src/share/vm/opto/matcher.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/matcher.cpp Tue Oct 22 15:44:48 2013
--- new/src/share/vm/opto/matcher.cpp Tue Oct 22 15:44:48 2013
*** 2024,2033 ****
--- 2024,2042 ----
for(int i = n->req() - 1; i >= 0; --i) { // For my children
Node *m = n->in(i); // Get ith input
if (m == NULL) continue; // Ignore NULLs
uint mop = m->Opcode();
+ // Only push the input of a FlagsProj if it only has the FlagsProj
+ // as output. Otherwise all inputs to the node that produces FlagsProj
+ // will be marked as shared.
+ if (n->is_FlagsProj()) {
+ if (m->outcnt() == 1) {
+ mstack.push(m, Visit);
+ }
+ continue; // for(int i = ...)
+ }
// Must clone all producers of flags, or we will not match correctly.
// Suppose a compare setting int-flags is shared (e.g., a switch-tree)
// then it will match into an ideal Op_RegFlags. Alas, the fp-flags
// are also there, so we may match a float-branch to int-flags and
// expect the allocator to haul the flags from the int-side to the
src/share/vm/opto/matcher.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File