< prev index next >

src/hotspot/share/opto/matcher.cpp

Print this page




1734     _new2old_map.map(ex->_idx, s->_leaf);
1735 #endif
1736   }
1737 
1738   // PhaseChaitin::fixup_spills will sometimes generate spill code
1739   // via the matcher.  By the time, nodes have been wired into the CFG,
1740   // and any further nodes generated by expand rules will be left hanging
1741   // in space, and will not get emitted as output code.  Catch this.
1742   // Also, catch any new register allocation constraints ("projections")
1743   // generated belatedly during spill code generation.
1744   if (_allocation_started) {
1745     guarantee(ex == mach, "no expand rules during spill generation");
1746     guarantee(number_of_projections_prior == number_of_projections(), "no allocation during spill generation");
1747   }
1748 
1749   if (leaf->is_Con() || leaf->is_DecodeNarrowPtr()) {
1750     // Record the con for sharing
1751     _shared_nodes.map(leaf->_idx, ex);
1752   }
1753 







1754   return ex;
1755 }
1756 
1757 void Matcher::handle_precedence_edges(Node* n, MachNode *mach) {
1758   for (uint i = n->req(); i < n->len(); i++) {
1759     if (n->in(i) != NULL) {
1760       mach->add_prec(n->in(i));
1761     }
1762   }
1763 }
1764 
1765 void Matcher::ReduceInst_Chain_Rule( State *s, int rule, Node *&mem, MachNode *mach ) {
1766   // 'op' is what I am expecting to receive
1767   int op = _leftOp[rule];
1768   // Operand type to catch childs result
1769   // This is what my child will give me.
1770   int opnd_class_instance = s->_rule[op];
1771   // Choose between operand class or not.
1772   // This is what I will receive.
1773   int catch_op = (FIRST_OPERAND_CLASS <= op && op < NUM_OPERANDS) ? opnd_class_instance : op;




1734     _new2old_map.map(ex->_idx, s->_leaf);
1735 #endif
1736   }
1737 
1738   // PhaseChaitin::fixup_spills will sometimes generate spill code
1739   // via the matcher.  By the time, nodes have been wired into the CFG,
1740   // and any further nodes generated by expand rules will be left hanging
1741   // in space, and will not get emitted as output code.  Catch this.
1742   // Also, catch any new register allocation constraints ("projections")
1743   // generated belatedly during spill code generation.
1744   if (_allocation_started) {
1745     guarantee(ex == mach, "no expand rules during spill generation");
1746     guarantee(number_of_projections_prior == number_of_projections(), "no allocation during spill generation");
1747   }
1748 
1749   if (leaf->is_Con() || leaf->is_DecodeNarrowPtr()) {
1750     // Record the con for sharing
1751     _shared_nodes.map(leaf->_idx, ex);
1752   }
1753 
1754   // Have mach nodes inherit GC barrier data
1755   if (leaf->is_LoadStore()) {
1756     mach->set_barrier_data(leaf->as_LoadStore()->barrier_data());
1757   } else if (leaf->is_Mem()) {
1758     mach->set_barrier_data(leaf->as_Mem()->barrier_data());
1759   }
1760 
1761   return ex;
1762 }
1763 
1764 void Matcher::handle_precedence_edges(Node* n, MachNode *mach) {
1765   for (uint i = n->req(); i < n->len(); i++) {
1766     if (n->in(i) != NULL) {
1767       mach->add_prec(n->in(i));
1768     }
1769   }
1770 }
1771 
1772 void Matcher::ReduceInst_Chain_Rule( State *s, int rule, Node *&mem, MachNode *mach ) {
1773   // 'op' is what I am expecting to receive
1774   int op = _leftOp[rule];
1775   // Operand type to catch childs result
1776   // This is what my child will give me.
1777   int opnd_class_instance = s->_rule[op];
1778   // Choose between operand class or not.
1779   // This is what I will receive.
1780   int catch_op = (FIRST_OPERAND_CLASS <= op && op < NUM_OPERANDS) ? opnd_class_instance : op;


< prev index next >