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