< prev index next >

src/hotspot/share/opto/callnode.cpp

Print this page

        

*** 688,698 **** } #endif const Type *CallNode::bottom_type() const { return tf()->range_cc(); } const Type* CallNode::Value(PhaseGVN* phase) const { ! if (phase->type(in(0)) == Type::TOP) return Type::TOP; return tf()->range_cc(); } //------------------------------calling_convention----------------------------- void CallNode::calling_convention(BasicType* sig_bt, VMRegPair *parm_regs, uint argcnt) const { --- 688,700 ---- } #endif const Type *CallNode::bottom_type() const { return tf()->range_cc(); } const Type* CallNode::Value(PhaseGVN* phase) const { ! if (!in(0) || phase->type(in(0)) == Type::TOP) { ! return Type::TOP; ! } return tf()->range_cc(); } //------------------------------calling_convention----------------------------- void CallNode::calling_convention(BasicType* sig_bt, VMRegPair *parm_regs, uint argcnt) const {
*** 1433,1442 **** --- 1435,1466 ---- if (analyzer->is_arg_stack(0) || analyzer->is_arg_local(0)) { _is_allocation_MemBar_redundant = true; } } + Node* AllocateNode::Ideal(PhaseGVN* phase, bool can_reshape) { + // Check for unused value type allocation + if (can_reshape && in(AllocateNode::ValueNode) != NULL && + outcnt() != 0 && result_cast() == NULL) { + // Remove allocation by replacing the projection nodes with its inputs + PhaseIterGVN* igvn = phase->is_IterGVN(); + CallProjections projs; + extract_projections(&projs, true); + igvn->replace_node(projs.fallthrough_catchproj, in(TypeFunc::Control)); + igvn->replace_node(projs.fallthrough_memproj, in(TypeFunc::Memory)); + igvn->replace_node(projs.catchall_memproj, phase->C->top()); + igvn->replace_node(projs.fallthrough_ioproj, in(TypeFunc::I_O)); + igvn->replace_node(projs.catchall_ioproj, phase->C->top()); + igvn->replace_node(projs.catchall_catchproj, phase->C->top()); + igvn->replace_node(projs.resproj, phase->C->top()); + igvn->remove_dead_node(this); + return NULL; + } + + return CallNode::Ideal(phase, can_reshape); + } + //============================================================================= Node* AllocateArrayNode::Ideal(PhaseGVN *phase, bool can_reshape) { Node* res = SafePointNode::Ideal(phase, can_reshape); if (res != NULL) { return res;
< prev index next >