Mercurial > hg > truffle
comparison src/share/vm/opto/callnode.cpp @ 6804:e626685e9f6c
7193318: C2: remove number of inputs requirement from Node's new operator
Summary: Deleted placement new operator of Node - node(size_t, Compile *, int).
Reviewed-by: kvn, twisti
Contributed-by: bharadwaj.yadavalli@oracle.com
author | kvn |
---|---|
date | Thu, 27 Sep 2012 09:38:42 -0700 |
parents | da91efe96a93 |
children | ad5dd04754ee |
comparison
equal
deleted
inserted
replaced
6803:06f52c4d0e18 | 6804:e626685e9f6c |
---|---|
70 Node *StartNode::match( const ProjNode *proj, const Matcher *match ) { | 70 Node *StartNode::match( const ProjNode *proj, const Matcher *match ) { |
71 switch (proj->_con) { | 71 switch (proj->_con) { |
72 case TypeFunc::Control: | 72 case TypeFunc::Control: |
73 case TypeFunc::I_O: | 73 case TypeFunc::I_O: |
74 case TypeFunc::Memory: | 74 case TypeFunc::Memory: |
75 return new (match->C, 1) MachProjNode(this,proj->_con,RegMask::Empty,MachProjNode::unmatched_proj); | 75 return new (match->C) MachProjNode(this,proj->_con,RegMask::Empty,MachProjNode::unmatched_proj); |
76 case TypeFunc::FramePtr: | 76 case TypeFunc::FramePtr: |
77 return new (match->C, 1) MachProjNode(this,proj->_con,Matcher::c_frame_ptr_mask, Op_RegP); | 77 return new (match->C) MachProjNode(this,proj->_con,Matcher::c_frame_ptr_mask, Op_RegP); |
78 case TypeFunc::ReturnAdr: | 78 case TypeFunc::ReturnAdr: |
79 return new (match->C, 1) MachProjNode(this,proj->_con,match->_return_addr_mask,Op_RegP); | 79 return new (match->C) MachProjNode(this,proj->_con,match->_return_addr_mask,Op_RegP); |
80 case TypeFunc::Parms: | 80 case TypeFunc::Parms: |
81 default: { | 81 default: { |
82 uint parm_num = proj->_con - TypeFunc::Parms; | 82 uint parm_num = proj->_con - TypeFunc::Parms; |
83 const Type *t = _domain->field_at(proj->_con); | 83 const Type *t = _domain->field_at(proj->_con); |
84 if (t->base() == Type::Half) // 2nd half of Longs and Doubles | 84 if (t->base() == Type::Half) // 2nd half of Longs and Doubles |
85 return new (match->C, 1) ConNode(Type::TOP); | 85 return new (match->C) ConNode(Type::TOP); |
86 uint ideal_reg = t->ideal_reg(); | 86 uint ideal_reg = t->ideal_reg(); |
87 RegMask &rm = match->_calling_convention_mask[parm_num]; | 87 RegMask &rm = match->_calling_convention_mask[parm_num]; |
88 return new (match->C, 1) MachProjNode(this,proj->_con,rm,ideal_reg); | 88 return new (match->C) MachProjNode(this,proj->_con,rm,ideal_reg); |
89 } | 89 } |
90 } | 90 } |
91 return NULL; | 91 return NULL; |
92 } | 92 } |
93 | 93 |
623 Node *CallNode::match( const ProjNode *proj, const Matcher *match ) { | 623 Node *CallNode::match( const ProjNode *proj, const Matcher *match ) { |
624 switch (proj->_con) { | 624 switch (proj->_con) { |
625 case TypeFunc::Control: | 625 case TypeFunc::Control: |
626 case TypeFunc::I_O: | 626 case TypeFunc::I_O: |
627 case TypeFunc::Memory: | 627 case TypeFunc::Memory: |
628 return new (match->C, 1) MachProjNode(this,proj->_con,RegMask::Empty,MachProjNode::unmatched_proj); | 628 return new (match->C) MachProjNode(this,proj->_con,RegMask::Empty,MachProjNode::unmatched_proj); |
629 | 629 |
630 case TypeFunc::Parms+1: // For LONG & DOUBLE returns | 630 case TypeFunc::Parms+1: // For LONG & DOUBLE returns |
631 assert(tf()->_range->field_at(TypeFunc::Parms+1) == Type::HALF, ""); | 631 assert(tf()->_range->field_at(TypeFunc::Parms+1) == Type::HALF, ""); |
632 // 2nd half of doubles and longs | 632 // 2nd half of doubles and longs |
633 return new (match->C, 1) MachProjNode(this,proj->_con, RegMask::Empty, (uint)OptoReg::Bad); | 633 return new (match->C) MachProjNode(this,proj->_con, RegMask::Empty, (uint)OptoReg::Bad); |
634 | 634 |
635 case TypeFunc::Parms: { // Normal returns | 635 case TypeFunc::Parms: { // Normal returns |
636 uint ideal_reg = tf()->range()->field_at(TypeFunc::Parms)->ideal_reg(); | 636 uint ideal_reg = tf()->range()->field_at(TypeFunc::Parms)->ideal_reg(); |
637 OptoRegPair regs = is_CallRuntime() | 637 OptoRegPair regs = is_CallRuntime() |
638 ? match->c_return_value(ideal_reg,true) // Calls into C runtime | 638 ? match->c_return_value(ideal_reg,true) // Calls into C runtime |
639 : match-> return_value(ideal_reg,true); // Calls into compiled Java code | 639 : match-> return_value(ideal_reg,true); // Calls into compiled Java code |
640 RegMask rm = RegMask(regs.first()); | 640 RegMask rm = RegMask(regs.first()); |
641 if( OptoReg::is_valid(regs.second()) ) | 641 if( OptoReg::is_valid(regs.second()) ) |
642 rm.Insert( regs.second() ); | 642 rm.Insert( regs.second() ); |
643 return new (match->C, 1) MachProjNode(this,proj->_con,rm,ideal_reg); | 643 return new (match->C) MachProjNode(this,proj->_con,rm,ideal_reg); |
644 } | 644 } |
645 | 645 |
646 case TypeFunc::ReturnAdr: | 646 case TypeFunc::ReturnAdr: |
647 case TypeFunc::FramePtr: | 647 case TypeFunc::FramePtr: |
648 default: | 648 default: |
1173 catchproj->unique_out()->Opcode() != Op_Halt)) { | 1173 catchproj->unique_out()->Opcode() != Op_Halt)) { |
1174 assert(catchproj->is_CatchProj(), "must be a CatchProjNode"); | 1174 assert(catchproj->is_CatchProj(), "must be a CatchProjNode"); |
1175 Node* nproj = catchproj->clone(); | 1175 Node* nproj = catchproj->clone(); |
1176 igvn->register_new_node_with_optimizer(nproj); | 1176 igvn->register_new_node_with_optimizer(nproj); |
1177 | 1177 |
1178 Node *frame = new (phase->C, 1) ParmNode( phase->C->start(), TypeFunc::FramePtr ); | 1178 Node *frame = new (phase->C) ParmNode( phase->C->start(), TypeFunc::FramePtr ); |
1179 frame = phase->transform(frame); | 1179 frame = phase->transform(frame); |
1180 // Halt & Catch Fire | 1180 // Halt & Catch Fire |
1181 Node *halt = new (phase->C, TypeFunc::Parms) HaltNode( nproj, frame ); | 1181 Node *halt = new (phase->C) HaltNode( nproj, frame ); |
1182 phase->C->root()->add_req(halt); | 1182 phase->C->root()->add_req(halt); |
1183 phase->transform(halt); | 1183 phase->transform(halt); |
1184 | 1184 |
1185 igvn->replace_node(catchproj, phase->C->top()); | 1185 igvn->replace_node(catchproj, phase->C->top()); |
1186 return this; | 1186 return this; |
1216 | 1216 |
1217 // Return NULL if new nodes are not allowed | 1217 // Return NULL if new nodes are not allowed |
1218 if (!allow_new_nodes) return NULL; | 1218 if (!allow_new_nodes) return NULL; |
1219 // Create a cast which is control dependent on the initialization to | 1219 // Create a cast which is control dependent on the initialization to |
1220 // propagate the fact that the array length must be positive. | 1220 // propagate the fact that the array length must be positive. |
1221 length = new (phase->C, 2) CastIINode(length, narrow_length_type); | 1221 length = new (phase->C) CastIINode(length, narrow_length_type); |
1222 length->set_req(0, initialization()->proj_out(0)); | 1222 length->set_req(0, initialization()->proj_out(0)); |
1223 } | 1223 } |
1224 } | 1224 } |
1225 | 1225 |
1226 return length; | 1226 return length; |