src/share/vm/opto/matcher.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/opto

src/share/vm/opto/matcher.cpp

Print this page
rev 5515 : [mq]: fixes


2009           // Do match stores, despite no ideal reg
2010           mem_op = true;
2011           break;
2012         }
2013         if( n->is_Mem() ) { // Loads and LoadStores
2014           mem_op = true;
2015           // Loads must be root of match tree due to prior load conflict
2016           if( C->subsume_loads() == false )
2017             set_shared(n);
2018         }
2019         // Fall into default case
2020         if( !n->ideal_reg() )
2021           set_dontcare(n);  // Unmatchable Nodes
2022       } // end_switch
2023 
2024       for(int i = n->req() - 1; i >= 0; --i) { // For my children
2025         Node *m = n->in(i); // Get ith input
2026         if (m == NULL) continue;  // Ignore NULLs
2027         uint mop = m->Opcode();
2028 









2029         // Must clone all producers of flags, or we will not match correctly.
2030         // Suppose a compare setting int-flags is shared (e.g., a switch-tree)
2031         // then it will match into an ideal Op_RegFlags.  Alas, the fp-flags
2032         // are also there, so we may match a float-branch to int-flags and
2033         // expect the allocator to haul the flags from the int-side to the
2034         // fp-side.  No can do.
2035         if( _must_clone[mop] ) {
2036           mstack.push(m, Visit);
2037           continue; // for(int i = ...)
2038         }
2039 
2040         if( mop == Op_AddP && m->in(AddPNode::Base)->is_DecodeNarrowPtr()) {
2041           // Bases used in addresses must be shared but since
2042           // they are shared through a DecodeN they may appear
2043           // to have a single use so force sharing here.
2044           set_shared(m->in(AddPNode::Base)->in(1));
2045         }
2046 
2047         // Clone addressing expressions as they are "free" in memory access instructions
2048         if( mem_op && i == MemNode::Address && mop == Op_AddP ) {




2009           // Do match stores, despite no ideal reg
2010           mem_op = true;
2011           break;
2012         }
2013         if( n->is_Mem() ) { // Loads and LoadStores
2014           mem_op = true;
2015           // Loads must be root of match tree due to prior load conflict
2016           if( C->subsume_loads() == false )
2017             set_shared(n);
2018         }
2019         // Fall into default case
2020         if( !n->ideal_reg() )
2021           set_dontcare(n);  // Unmatchable Nodes
2022       } // end_switch
2023 
2024       for(int i = n->req() - 1; i >= 0; --i) { // For my children
2025         Node *m = n->in(i); // Get ith input
2026         if (m == NULL) continue;  // Ignore NULLs
2027         uint mop = m->Opcode();
2028 
2029         // Only push the input of a FlagsProj if it only has the FlagsProj
2030         // as output. Otherwise all inputs to the node that produces FlagsProj
2031         // will be marked as shared.
2032         if (n->is_FlagsProj()) {
2033           if (m->outcnt() == 1) {
2034             mstack.push(m, Visit);
2035           }
2036           continue; // for(int i = ...)
2037         }
2038         // Must clone all producers of flags, or we will not match correctly.
2039         // Suppose a compare setting int-flags is shared (e.g., a switch-tree)
2040         // then it will match into an ideal Op_RegFlags.  Alas, the fp-flags
2041         // are also there, so we may match a float-branch to int-flags and
2042         // expect the allocator to haul the flags from the int-side to the
2043         // fp-side.  No can do.
2044         if( _must_clone[mop] ) {
2045           mstack.push(m, Visit);
2046           continue; // for(int i = ...)
2047         }
2048 
2049         if( mop == Op_AddP && m->in(AddPNode::Base)->is_DecodeNarrowPtr()) {
2050           // Bases used in addresses must be shared but since
2051           // they are shared through a DecodeN they may appear
2052           // to have a single use so force sharing here.
2053           set_shared(m->in(AddPNode::Base)->in(1));
2054         }
2055 
2056         // Clone addressing expressions as they are "free" in memory access instructions
2057         if( mem_op && i == MemNode::Address && mop == Op_AddP ) {


src/share/vm/opto/matcher.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File