src/share/vm/opto/idealKit.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
8034812 Cdiff src/share/vm/opto/idealKit.cpp
src/share/vm/opto/idealKit.cpp
Print this page
*** 84,94 ****
} else {
bol = Bool(CmpP(left, right), relop);
}
// Delay gvn.tranform on if-nodes until construction is finished
// to prevent a constant bool input from discarding a control output.
! IfNode* iff = delay_transform(new (C) IfNode(ctrl(), bol, prob, cnt))->as_If();
Node* then = IfTrue(iff);
Node* elsen = IfFalse(iff);
Node* else_cvstate = copy_cvstate();
else_cvstate->set_req(TypeFunc::Control, elsen);
_pending_cvstates->push(else_cvstate);
--- 84,94 ----
} else {
bol = Bool(CmpP(left, right), relop);
}
// Delay gvn.tranform on if-nodes until construction is finished
// to prevent a constant bool input from discarding a control output.
! IfNode* iff = delay_transform(new IfNode(ctrl(), bol, prob, cnt))->as_If();
Node* then = IfTrue(iff);
Node* elsen = IfFalse(iff);
Node* else_cvstate = copy_cvstate();
else_cvstate->set_req(TypeFunc::Control, elsen);
_pending_cvstates->push(else_cvstate);
*** 203,213 ****
// the number of precedessors.)
Node* IdealKit::make_label(int goto_ct) {
assert(_cvstate != NULL, "must declare variables before labels");
Node* lab = new_cvstate();
int sz = 1 + goto_ct + 1 /* fall thru */;
! Node* reg = delay_transform(new (C) RegionNode(sz));
lab->init_req(TypeFunc::Control, reg);
return lab;
}
//-------------------------------bind-------------------------------------
--- 203,213 ----
// the number of precedessors.)
Node* IdealKit::make_label(int goto_ct) {
assert(_cvstate != NULL, "must declare variables before labels");
Node* lab = new_cvstate();
int sz = 1 + goto_ct + 1 /* fall thru */;
! Node* reg = delay_transform(new RegionNode(sz));
lab->init_req(TypeFunc::Control, reg);
return lab;
}
//-------------------------------bind-------------------------------------
*** 310,320 ****
}
//-----------------------------new_cvstate-----------------------------------
Node* IdealKit::new_cvstate() {
uint sz = _var_ct + first_var;
! return new (C) Node(sz);
}
//-----------------------------copy_cvstate-----------------------------------
Node* IdealKit::copy_cvstate() {
Node* ns = new_cvstate();
--- 310,320 ----
}
//-----------------------------new_cvstate-----------------------------------
Node* IdealKit::new_cvstate() {
uint sz = _var_ct + first_var;
! return new Node(sz);
}
//-----------------------------copy_cvstate-----------------------------------
Node* IdealKit::copy_cvstate() {
Node* ns = new_cvstate();
*** 395,405 ****
debug_only(adr_type = C->get_adr_type(adr_idx));
Node *mem = memory(adr_idx);
// Add required edge to oop_store, optimizer does not support precedence edges.
// Convert required edge to precedence edge before allocation.
! Node* st = new (C) StoreCMNode(ctl, mem, adr, adr_type, val, oop_store, oop_adr_idx);
st = transform(st);
set_memory(st, adr_idx);
return st;
--- 395,405 ----
debug_only(adr_type = C->get_adr_type(adr_idx));
Node *mem = memory(adr_idx);
// Add required edge to oop_store, optimizer does not support precedence edges.
// Convert required edge to precedence edge before allocation.
! Node* st = new StoreCMNode(ctl, mem, adr, adr_type, val, oop_store, oop_adr_idx);
st = transform(st);
set_memory(st, adr_idx);
return st;
*** 495,505 ****
// We only handle taking in RawMem and modifying RawMem
const TypePtr* adr_type = TypeRawPtr::BOTTOM;
uint adr_idx = C->get_alias_index(adr_type);
// Slow-path leaf call
! CallNode *call = (CallNode*)new (C) CallLeafNode( slow_call_type, slow_call, leaf_name, adr_type);
// Set fixed predefined input arguments
call->init_req( TypeFunc::Control, ctrl() );
call->init_req( TypeFunc::I_O , top() ) ; // does no i/o
// Narrow memory as only memory input
--- 495,505 ----
// We only handle taking in RawMem and modifying RawMem
const TypePtr* adr_type = TypeRawPtr::BOTTOM;
uint adr_idx = C->get_alias_index(adr_type);
// Slow-path leaf call
! CallNode *call = (CallNode*)new CallLeafNode( slow_call_type, slow_call, leaf_name, adr_type);
// Set fixed predefined input arguments
call->init_req( TypeFunc::Control, ctrl() );
call->init_req( TypeFunc::I_O , top() ) ; // does no i/o
// Narrow memory as only memory input
*** 516,529 ****
call = (CallNode *) _gvn.transform(call);
Node *c = call; // dbx gets confused with call call->dump()
// Slow leaf call has no side-effects, sets few values
! set_ctrl(transform( new (C) ProjNode(call,TypeFunc::Control) ));
// Make memory for the call
! Node* mem = _gvn.transform( new (C) ProjNode(call, TypeFunc::Memory) );
// Set the RawPtr memory state only.
set_memory(mem, adr_idx);
assert(C->alias_type(call->adr_type()) == C->alias_type(adr_type),
--- 516,529 ----
call = (CallNode *) _gvn.transform(call);
Node *c = call; // dbx gets confused with call call->dump()
// Slow leaf call has no side-effects, sets few values
! set_ctrl(transform( new ProjNode(call,TypeFunc::Control) ));
// Make memory for the call
! Node* mem = _gvn.transform( new ProjNode(call, TypeFunc::Memory) );
// Set the RawPtr memory state only.
set_memory(mem, adr_idx);
assert(C->alias_type(call->adr_type()) == C->alias_type(adr_type),
*** 542,552 ****
// We only handle taking in RawMem and modifying RawMem
uint adr_idx = C->get_alias_index(adr_type);
// Slow-path leaf call
! CallNode *call = (CallNode*)new (C) CallLeafNoFPNode( slow_call_type, slow_call, leaf_name, adr_type);
// Set fixed predefined input arguments
call->init_req( TypeFunc::Control, ctrl() );
call->init_req( TypeFunc::I_O , top() ) ; // does no i/o
// Narrow memory as only memory input
--- 542,552 ----
// We only handle taking in RawMem and modifying RawMem
uint adr_idx = C->get_alias_index(adr_type);
// Slow-path leaf call
! CallNode *call = (CallNode*)new CallLeafNoFPNode( slow_call_type, slow_call, leaf_name, adr_type);
// Set fixed predefined input arguments
call->init_req( TypeFunc::Control, ctrl() );
call->init_req( TypeFunc::I_O , top() ) ; // does no i/o
// Narrow memory as only memory input
*** 563,576 ****
call = (CallNode *) _gvn.transform(call);
Node *c = call; // dbx gets confused with call call->dump()
// Slow leaf call has no side-effects, sets few values
! set_ctrl(transform( new (C) ProjNode(call,TypeFunc::Control) ));
// Make memory for the call
! Node* mem = _gvn.transform( new (C) ProjNode(call, TypeFunc::Memory) );
// Set the RawPtr memory state only.
set_memory(mem, adr_idx);
assert(C->alias_type(call->adr_type()) == C->alias_type(adr_type),
--- 563,576 ----
call = (CallNode *) _gvn.transform(call);
Node *c = call; // dbx gets confused with call call->dump()
// Slow leaf call has no side-effects, sets few values
! set_ctrl(transform( new ProjNode(call,TypeFunc::Control) ));
// Make memory for the call
! Node* mem = _gvn.transform( new ProjNode(call, TypeFunc::Memory) );
// Set the RawPtr memory state only.
set_memory(mem, adr_idx);
assert(C->alias_type(call->adr_type()) == C->alias_type(adr_type),
src/share/vm/opto/idealKit.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File