mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-19 04:13:07 +00:00
8343148: C2: Refactor uses of "PhaseValue::*con*() + PhaseIdealLoop::set_ctrl()" into separate method
Reviewed-by: kvn, chagedorn, thartmann
This commit is contained in:
parent
1e9204fa43
commit
e88e793cfd
@ -887,7 +887,7 @@ void ShenandoahBarrierC2Support::test_gc_state(Node*& ctrl, Node* raw_mem, Node*
|
||||
phase->register_new_node(gc_state_cmp, old_ctrl);
|
||||
phase->register_new_node(gc_state_bool, old_ctrl);
|
||||
|
||||
phase->set_ctrl(gc_state_offset, phase->C->root());
|
||||
phase->set_root_as_ctrl(gc_state_offset);
|
||||
|
||||
assert(is_gc_state_test(gc_state_iff, flags), "Should match the shape");
|
||||
}
|
||||
@ -945,7 +945,7 @@ void ShenandoahBarrierC2Support::test_in_cset(Node*& ctrl, Node*& not_cset_ctrl,
|
||||
phase->register_control(ctrl, loop, cset_iff);
|
||||
phase->register_control(not_cset_ctrl, loop, cset_iff);
|
||||
|
||||
phase->set_ctrl(cset_addr_ptr, phase->C->root());
|
||||
phase->set_root_as_ctrl(cset_addr_ptr);
|
||||
|
||||
phase->register_new_node(raw_val, old_ctrl);
|
||||
phase->register_new_node(cset_idx, old_ctrl);
|
||||
|
||||
@ -766,8 +766,7 @@ BoolNode* PhaseIdealLoop::rc_predicate(Node* ctrl, const int scale, Node* offset
|
||||
if ((stride > 0 && (java_subtract(limit_lo, stride) < limit_lo)) ||
|
||||
(stride < 0 && (java_subtract(limit_hi, stride) > limit_hi))) {
|
||||
// No overflow possible
|
||||
ConINode* con_stride = _igvn.intcon(stride);
|
||||
set_ctrl(con_stride, C->root());
|
||||
ConINode* con_stride = intcon(stride);
|
||||
max_idx_expr = new SubINode(limit, con_stride);
|
||||
idx_type = TypeInt::make(limit_lo - stride, limit_hi - stride, limit_type->_widen);
|
||||
} else {
|
||||
@ -775,8 +774,7 @@ BoolNode* PhaseIdealLoop::rc_predicate(Node* ctrl, const int scale, Node* offset
|
||||
overflow = true;
|
||||
limit = new ConvI2LNode(limit);
|
||||
register_new_node(limit, ctrl);
|
||||
ConLNode* con_stride = _igvn.longcon(stride);
|
||||
set_ctrl(con_stride, C->root());
|
||||
ConLNode* con_stride = longcon(stride);
|
||||
max_idx_expr = new SubLNode(limit, con_stride);
|
||||
}
|
||||
register_new_node(max_idx_expr, ctrl);
|
||||
@ -793,8 +791,7 @@ BoolNode* PhaseIdealLoop::rc_predicate(Node* ctrl, const int scale, Node* offset
|
||||
}
|
||||
|
||||
if (scale != 1) {
|
||||
ConNode* con_scale = _igvn.intcon(scale);
|
||||
set_ctrl(con_scale, C->root());
|
||||
ConNode* con_scale = intcon(scale);
|
||||
if (TraceLoopPredicate) {
|
||||
predString->print("* %d ", scale);
|
||||
}
|
||||
@ -811,8 +808,7 @@ BoolNode* PhaseIdealLoop::rc_predicate(Node* ctrl, const int scale, Node* offset
|
||||
register_new_node(max_idx_expr, ctrl);
|
||||
}
|
||||
overflow = true;
|
||||
con_scale = _igvn.longcon(scale);
|
||||
set_ctrl(con_scale, C->root());
|
||||
con_scale = longcon(scale);
|
||||
max_idx_expr = new MulLNode(max_idx_expr, con_scale);
|
||||
} else {
|
||||
// No overflow possible
|
||||
@ -1342,8 +1338,7 @@ bool PhaseIdealLoop::loop_predication_impl(IdealLoopTree* loop) {
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
ConNode* zero = _igvn.intcon(0);
|
||||
set_ctrl(zero, C->root());
|
||||
ConNode* zero = intcon(0);
|
||||
|
||||
ResourceArea* area = Thread::current()->resource_area();
|
||||
Invariance invar(area, loop);
|
||||
|
||||
@ -354,15 +354,11 @@ Node* IdealLoopTree::reassociate_add_sub_cmp(Node* n1, int inv1_idx, int inv2_id
|
||||
Node* inv1_c = phase->get_ctrl(inv1);
|
||||
Node* n_inv1;
|
||||
if (neg_inv1) {
|
||||
Node* zero;
|
||||
if (is_int) {
|
||||
zero = phase->_igvn.intcon(0);
|
||||
n_inv1 = new SubINode(zero, inv1);
|
||||
n_inv1 = new SubINode(phase->intcon(0), inv1);
|
||||
} else {
|
||||
zero = phase->_igvn.longcon(0L);
|
||||
n_inv1 = new SubLNode(zero, inv1);
|
||||
n_inv1 = new SubLNode(phase->longcon(0L), inv1);
|
||||
}
|
||||
phase->set_ctrl(zero, phase->C->root());
|
||||
phase->register_new_node(n_inv1, inv1_c);
|
||||
} else {
|
||||
n_inv1 = inv1;
|
||||
@ -1711,8 +1707,7 @@ void PhaseIdealLoop::update_main_loop_assertion_predicates(CountedLoopNode* main
|
||||
// Compute the value of the loop induction variable at the end of the
|
||||
// first iteration of the unrolled loop: init + new_stride_con - init_inc
|
||||
int unrolled_stride_con = main_loop_head->stride_con() * 2;
|
||||
Node* unrolled_stride = _igvn.intcon(unrolled_stride_con);
|
||||
set_ctrl(unrolled_stride, C->root());
|
||||
Node* unrolled_stride = intcon(unrolled_stride_con);
|
||||
|
||||
Node* loop_entry = main_loop_head->skip_strip_mined()->in(LoopNode::EntryControl);
|
||||
PredicateIterator predicate_iterator(loop_entry);
|
||||
@ -1879,23 +1874,20 @@ void PhaseIdealLoop::do_unroll(IdealLoopTree *loop, Node_List &old_new, bool adj
|
||||
if (limit->is_Con()) {
|
||||
// The check in policy_unroll and the assert above guarantee
|
||||
// no underflow if limit is constant.
|
||||
new_limit = _igvn.intcon(limit->get_int() - stride_con);
|
||||
set_ctrl(new_limit, C->root());
|
||||
new_limit = intcon(limit->get_int() - stride_con);
|
||||
} else {
|
||||
// Limit is not constant. Int subtraction could lead to underflow.
|
||||
// (1) Convert to long.
|
||||
Node* limit_l = new ConvI2LNode(limit);
|
||||
register_new_node_with_ctrl_of(limit_l, limit);
|
||||
Node* stride_l = _igvn.longcon(stride_con);
|
||||
set_ctrl(stride_l, C->root());
|
||||
Node* stride_l = longcon(stride_con);
|
||||
|
||||
// (2) Subtract: compute in long, to prevent underflow.
|
||||
Node* new_limit_l = new SubLNode(limit_l, stride_l);
|
||||
register_new_node(new_limit_l, ctrl);
|
||||
|
||||
// (3) Clamp to int range, in case we had subtraction underflow.
|
||||
Node* underflow_clamp_l = _igvn.longcon((stride_con > 0) ? min_jint : max_jint);
|
||||
set_ctrl(underflow_clamp_l, C->root());
|
||||
Node* underflow_clamp_l = longcon((stride_con > 0) ? min_jint : max_jint);
|
||||
Node* new_limit_no_underflow_l = nullptr;
|
||||
if (stride_con > 0) {
|
||||
// limit = MaxL(limit - stride, min_jint)
|
||||
@ -1985,8 +1977,7 @@ void PhaseIdealLoop::do_unroll(IdealLoopTree *loop, Node_List &old_new, bool adj
|
||||
// Kill the clone's backedge
|
||||
Node *newcle = old_new[loop_end->_idx];
|
||||
_igvn.hash_delete(newcle);
|
||||
Node *one = _igvn.intcon(1);
|
||||
set_ctrl(one, C->root());
|
||||
Node* one = intcon(1);
|
||||
newcle->set_req(1, one);
|
||||
// Force clone into same loop body
|
||||
uint max = loop->_body.size();
|
||||
@ -2122,8 +2113,7 @@ void PhaseIdealLoop::add_constraint(jlong stride_con, jlong scale_con, Node* off
|
||||
// Only do this for the pre-loop, one less iteration of the main loop doesn't hurt.
|
||||
bool round = ABS(scale_con) > 1;
|
||||
|
||||
Node* scale = _igvn.longcon(scale_con);
|
||||
set_ctrl(scale, C->root());
|
||||
Node* scale = longcon(scale_con);
|
||||
|
||||
if ((stride_con^scale_con) >= 0) { // Use XOR to avoid overflow
|
||||
// Positive stride*scale: the affine function is increasing,
|
||||
@ -2162,8 +2152,7 @@ void PhaseIdealLoop::add_constraint(jlong stride_con, jlong scale_con, Node* off
|
||||
// else /* scale > 0 and stride < 0 */
|
||||
// I > (upper_limit-(offset+1))/scale
|
||||
// )
|
||||
Node* one = _igvn.longcon(1);
|
||||
set_ctrl(one, C->root());
|
||||
Node* one = longcon(1);
|
||||
Node* plus_one = new AddLNode(offset, one);
|
||||
register_new_node(plus_one, pre_ctrl);
|
||||
*pre_limit = adjust_limit(!is_positive_stride, scale, plus_one, upper_limit, *pre_limit, pre_ctrl, round);
|
||||
@ -2368,8 +2357,7 @@ bool PhaseIdealLoop::is_scaled_iv_plus_offset(Node* exp, Node* iv, BasicType bt,
|
||||
*p_scale = scale;
|
||||
}
|
||||
if (p_offset != nullptr) {
|
||||
Node *zero = _igvn.zerocon(bt);
|
||||
set_ctrl(zero, C->root());
|
||||
Node* zero = zerocon(bt);
|
||||
*p_offset = zero;
|
||||
}
|
||||
return true;
|
||||
@ -2420,8 +2408,7 @@ bool PhaseIdealLoop::is_scaled_iv_plus_offset(Node* exp, Node* iv, BasicType bt,
|
||||
}
|
||||
if (p_offset != nullptr) {
|
||||
if (which == 1) { // must negate the extracted offset
|
||||
Node *zero = _igvn.integercon(0, exp_bt);
|
||||
set_ctrl(zero, C->root());
|
||||
Node* zero = integercon(0, exp_bt);
|
||||
Node *ctrl_off = get_ctrl(offset);
|
||||
offset = SubNode::make(zero, offset, exp_bt);
|
||||
register_new_node(offset, ctrl_off);
|
||||
@ -2540,13 +2527,10 @@ void PhaseIdealLoop::do_range_check(IdealLoopTree* loop) {
|
||||
|
||||
int stride_con = cl->stride_con();
|
||||
bool abs_stride_is_one = stride_con == 1 || stride_con == -1;
|
||||
Node* zero = _igvn.longcon(0);
|
||||
Node* one = _igvn.longcon(1);
|
||||
Node* zero = longcon(0);
|
||||
Node* one = longcon(1);
|
||||
// Use symmetrical int range [-max_jint,max_jint]
|
||||
Node* mini = _igvn.longcon(-max_jint);
|
||||
set_ctrl(zero, C->root());
|
||||
set_ctrl(one, C->root());
|
||||
set_ctrl(mini, C->root());
|
||||
Node* mini = longcon(-max_jint);
|
||||
|
||||
Node* loop_entry = cl->skip_strip_mined()->in(LoopNode::EntryControl);
|
||||
assert(loop_entry->is_Proj() && loop_entry->in(0)->is_If(), "if projection only");
|
||||
@ -2745,8 +2729,7 @@ void PhaseIdealLoop::do_range_check(IdealLoopTree* loop) {
|
||||
|
||||
// Kill the eliminated test
|
||||
C->set_major_progress();
|
||||
Node *kill_con = _igvn.intcon(1-flip);
|
||||
set_ctrl(kill_con, C->root());
|
||||
Node* kill_con = intcon(1-flip);
|
||||
_igvn.replace_input_of(iff, 1, kill_con);
|
||||
// Find surviving projection
|
||||
assert(iff->is_If(), "");
|
||||
|
||||
@ -313,8 +313,7 @@ IdealLoopTree* PhaseIdealLoop::insert_outer_loop(IdealLoopTree* loop, LoopNode*
|
||||
IdealLoopTree* PhaseIdealLoop::create_outer_strip_mined_loop(BoolNode *test, Node *cmp, Node *init_control,
|
||||
IdealLoopTree* loop, float cl_prob, float le_fcnt,
|
||||
Node*& entry_control, Node*& iffalse) {
|
||||
Node* outer_test = _igvn.intcon(0);
|
||||
set_ctrl(outer_test, C->root());
|
||||
Node* outer_test = intcon(0);
|
||||
Node *orig = iffalse;
|
||||
iffalse = iffalse->clone();
|
||||
_igvn.register_new_node_with_optimizer(iffalse);
|
||||
@ -969,16 +968,14 @@ bool PhaseIdealLoop::create_loop_nest(IdealLoopTree* loop, Node_List &old_new) {
|
||||
inner_iters_actual_int = inner_iters_actual;
|
||||
}
|
||||
|
||||
Node* int_zero = _igvn.intcon(0);
|
||||
set_ctrl(int_zero, C->root());
|
||||
Node* int_zero = intcon(0);
|
||||
if (stride_con < 0) {
|
||||
inner_iters_actual_int = new SubINode(int_zero, inner_iters_actual_int);
|
||||
_igvn.register_new_node_with_optimizer(inner_iters_actual_int);
|
||||
}
|
||||
|
||||
// Clone the iv data nodes as an integer iv
|
||||
Node* int_stride = _igvn.intcon(stride_con);
|
||||
set_ctrl(int_stride, C->root());
|
||||
Node* int_stride = intcon(stride_con);
|
||||
Node* inner_phi = new PhiNode(x->in(0), TypeInt::INT);
|
||||
Node* inner_incr = new AddINode(inner_phi, int_stride);
|
||||
Node* inner_cmp = nullptr;
|
||||
@ -1273,14 +1270,10 @@ int PhaseIdealLoop::extract_long_range_checks(const IdealLoopTree* loop, jint st
|
||||
void PhaseIdealLoop::transform_long_range_checks(int stride_con, const Node_List &range_checks, Node* outer_phi,
|
||||
Node* inner_iters_actual_int, Node* inner_phi,
|
||||
Node* iv_add, LoopNode* inner_head) {
|
||||
Node* long_zero = _igvn.longcon(0);
|
||||
set_ctrl(long_zero, C->root());
|
||||
Node* int_zero = _igvn.intcon(0);
|
||||
set_ctrl(int_zero, this->C->root());
|
||||
Node* long_one = _igvn.longcon(1);
|
||||
set_ctrl(long_one, this->C->root());
|
||||
Node* int_stride = _igvn.intcon(checked_cast<int>(stride_con));
|
||||
set_ctrl(int_stride, this->C->root());
|
||||
Node* long_zero = longcon(0);
|
||||
Node* int_zero = intcon(0);
|
||||
Node* long_one = longcon(1);
|
||||
Node* int_stride = intcon(checked_cast<int>(stride_con));
|
||||
|
||||
for (uint i = 0; i < range_checks.size(); i++) {
|
||||
ProjNode* proj = range_checks.at(i)->as_Proj();
|
||||
@ -1302,8 +1295,7 @@ void PhaseIdealLoop::transform_long_range_checks(int stride_con, const Node_List
|
||||
Node* entry_control = inner_head->in(LoopNode::EntryControl);
|
||||
|
||||
Node* R = range;
|
||||
Node* K = _igvn.longcon(scale);
|
||||
set_ctrl(K, this->C->root());
|
||||
Node* K = longcon(scale);
|
||||
|
||||
Node* L = offset;
|
||||
|
||||
@ -1334,8 +1326,7 @@ void PhaseIdealLoop::transform_long_range_checks(int stride_con, const Node_List
|
||||
// So this transformation could cause spurious deoptimizations and failed range check elimination
|
||||
// (but not incorrect execution) for unlikely corner cases with overflow.
|
||||
// If this causes problems in practice, we could maybe direct execution to a post-loop, instead of deoptimizing.
|
||||
Node* max_jint_plus_one_long = _igvn.longcon((jlong)max_jint + 1);
|
||||
set_ctrl(max_jint_plus_one_long, C->root());
|
||||
Node* max_jint_plus_one_long = longcon((jlong)max_jint + 1);
|
||||
Node* max_range = new AddLNode(max_jint_plus_one_long, L);
|
||||
register_new_node(max_range, entry_control);
|
||||
R = MaxNode::unsigned_min(R, max_range, TypeLong::POS, _igvn);
|
||||
@ -1389,8 +1380,7 @@ void PhaseIdealLoop::transform_long_range_checks(int stride_con, const Node_List
|
||||
|
||||
// H_clamp = Q_max+1 < Q_min ? max_jlong : Q_max+1
|
||||
// (Because Q_min and Q_max are close, the overflow check could also be encoded as Q_max+1 < 0 & Q_min >= 0.)
|
||||
Node* max_jlong_long = _igvn.longcon(max_jlong);
|
||||
set_ctrl(max_jlong_long, this->C->root());
|
||||
Node* max_jlong_long = longcon(max_jlong);
|
||||
Node* Q_max_cmp = new CmpLNode(Q_max_plus_one, Q_min);
|
||||
register_new_node(Q_max_cmp, entry_control);
|
||||
Node* Q_max_bool = new BoolNode(Q_max_cmp, BoolTest::lt);
|
||||
@ -1424,8 +1414,7 @@ void PhaseIdealLoop::transform_long_range_checks(int stride_con, const Node_List
|
||||
// to: j*K + L_2 <u32 R_2
|
||||
// that is:
|
||||
// (j*K + Q_first) - L_clamp <u32 clamp(R, L_clamp, H_clamp) - L_clamp
|
||||
K = _igvn.intcon(checked_cast<int>(scale));
|
||||
set_ctrl(K, this->C->root());
|
||||
K = intcon(checked_cast<int>(scale));
|
||||
Node* scaled_iv = new MulINode(inner_phi, K);
|
||||
register_new_node(scaled_iv, c);
|
||||
Node* scaled_iv_plus_offset = new AddINode(scaled_iv, L_2);
|
||||
@ -3155,7 +3144,7 @@ void OuterStripMinedLoopNode::transform_to_counted_loop(PhaseIterGVN* igvn, Phas
|
||||
// make counted loop exit test always fail
|
||||
ConINode* zero = igvn->intcon(0);
|
||||
if (iloop != nullptr) {
|
||||
iloop->set_ctrl(zero, igvn->C->root());
|
||||
iloop->set_root_as_ctrl(zero);
|
||||
}
|
||||
igvn->replace_input_of(cle, 1, zero);
|
||||
// replace outer loop end with CountedLoopEndNode with formers' CLE's exit test
|
||||
@ -4067,8 +4056,7 @@ void PhaseIdealLoop::replace_parallel_iv(IdealLoopTree *loop) {
|
||||
// variable differs from the trip counter by a loop-invariant
|
||||
// amount, the difference between their respective initial values.
|
||||
// It is scaled by the 'ratio_con'.
|
||||
Node* ratio = _igvn.integercon(ratio_con, stride_con2_bt);
|
||||
set_ctrl(ratio, C->root());
|
||||
Node* ratio = integercon(ratio_con, stride_con2_bt);
|
||||
|
||||
Node* init_converted = insert_convert_node_if_needed(stride_con2_bt, init);
|
||||
Node* phi_converted = insert_convert_node_if_needed(stride_con2_bt, phi);
|
||||
@ -4488,8 +4476,7 @@ void PhaseIdealLoop::eliminate_useless_template_assertion_predicates(Unique_Node
|
||||
OpaqueTemplateAssertionPredicateNode* opaque_node =
|
||||
C->template_assertion_predicate_opaq_node(i - 1)->as_OpaqueTemplateAssertionPredicate();
|
||||
if (!useful_predicates.member(opaque_node)) { // not in the useful list
|
||||
ConINode* one = _igvn.intcon(1);
|
||||
set_ctrl(one, C->root());
|
||||
ConINode* one = intcon(1);
|
||||
_igvn.replace_node(opaque_node, one);
|
||||
}
|
||||
}
|
||||
@ -6870,6 +6857,36 @@ void PhaseIdealLoop::rpo(Node* start, Node_Stack &stk, VectorSet &visited, Node_
|
||||
}
|
||||
}
|
||||
|
||||
ConINode* PhaseIdealLoop::intcon(jint i) {
|
||||
ConINode* node = _igvn.intcon(i);
|
||||
set_root_as_ctrl(node);
|
||||
return node;
|
||||
}
|
||||
|
||||
ConLNode* PhaseIdealLoop::longcon(jlong i) {
|
||||
ConLNode* node = _igvn.longcon(i);
|
||||
set_root_as_ctrl(node);
|
||||
return node;
|
||||
}
|
||||
|
||||
ConNode* PhaseIdealLoop::makecon(const Type* t) {
|
||||
ConNode* node = _igvn.makecon(t);
|
||||
set_root_as_ctrl(node);
|
||||
return node;
|
||||
}
|
||||
|
||||
ConNode* PhaseIdealLoop::integercon(jlong l, BasicType bt) {
|
||||
ConNode* node = _igvn.integercon(l, bt);
|
||||
set_root_as_ctrl(node);
|
||||
return node;
|
||||
}
|
||||
|
||||
ConNode* PhaseIdealLoop::zerocon(BasicType bt) {
|
||||
ConNode* node = _igvn.zerocon(bt);
|
||||
set_root_as_ctrl(node);
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
//=============================================================================
|
||||
//------------------------------LoopTreeIterator-------------------------------
|
||||
|
||||
@ -980,6 +980,10 @@ public:
|
||||
assert( ctrl == find_non_split_ctrl(ctrl), "must set legal crtl" );
|
||||
_loop_or_ctrl.map(n->_idx, (Node*)((intptr_t)ctrl + 1));
|
||||
}
|
||||
void set_root_as_ctrl(Node* n) {
|
||||
assert(!has_node(n) || has_ctrl(n), "");
|
||||
_loop_or_ctrl.map(n->_idx, (Node*)((intptr_t)C->root() + 1));
|
||||
}
|
||||
// Set control and update loop membership
|
||||
void set_ctrl_and_loop(Node* n, Node* ctrl) {
|
||||
IdealLoopTree* old_loop = get_loop(get_ctrl(n));
|
||||
@ -1784,6 +1788,16 @@ public:
|
||||
void pin_array_access_nodes_dependent_on(Node* ctrl);
|
||||
|
||||
Node* ensure_node_and_inputs_are_above_pre_end(CountedLoopEndNode* pre_end, Node* node);
|
||||
|
||||
ConINode* intcon(jint i);
|
||||
|
||||
ConLNode* longcon(jlong i);
|
||||
|
||||
ConNode* makecon(const Type* t);
|
||||
|
||||
ConNode* integercon(jlong l, BasicType bt);
|
||||
|
||||
ConNode* zerocon(BasicType bt);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -122,7 +122,7 @@ Node* PhaseIdealLoop::split_thru_phi(Node* n, Node* region, int policy) {
|
||||
|
||||
if (singleton) {
|
||||
wins++;
|
||||
x = ((PhaseGVN&)_igvn).makecon(t);
|
||||
x = makecon(t);
|
||||
} else {
|
||||
// We now call Identity to try to simplify the cloned node.
|
||||
// Note that some Identity methods call phase->type(this).
|
||||
@ -189,8 +189,7 @@ Node* PhaseIdealLoop::split_thru_phi(Node* n, Node* region, int policy) {
|
||||
IdealLoopTree *old_loop;
|
||||
|
||||
if (x->is_Con()) {
|
||||
// Constant's control is always root.
|
||||
set_ctrl(x, C->root());
|
||||
assert(get_ctrl(x) == C->root(), "constant control is not root");
|
||||
continue;
|
||||
}
|
||||
// The occasional new node
|
||||
@ -331,8 +330,7 @@ void PhaseIdealLoop::dominated_by(IfProjNode* prevdom, IfNode* iff, bool flip, b
|
||||
pop = Op_IfTrue;
|
||||
}
|
||||
// 'con' is set to true or false to kill the dominated test.
|
||||
Node *con = _igvn.makecon(pop == Op_IfTrue ? TypeInt::ONE : TypeInt::ZERO);
|
||||
set_ctrl(con, C->root()); // Constant gets a new use
|
||||
Node* con = makecon(pop == Op_IfTrue ? TypeInt::ONE : TypeInt::ZERO);
|
||||
// Hack the dominated test
|
||||
_igvn.replace_input_of(iff, 1, con);
|
||||
|
||||
@ -472,8 +470,7 @@ Node* PhaseIdealLoop::remix_address_expressions_add_left_shift(Node* n, IdealLoo
|
||||
if (add->Opcode() == Op_Sub(bt) &&
|
||||
_igvn.type(add->in(1)) != TypeInteger::zero(bt)) {
|
||||
assert(add->Opcode() == Op_SubI || add->Opcode() == Op_SubL, "");
|
||||
Node* zero = _igvn.integercon(0, bt);
|
||||
set_ctrl(zero, C->root());
|
||||
Node* zero = integercon(0, bt);
|
||||
Node* neg = SubNode::make(zero, add->in(2), bt);
|
||||
register_new_node_with_ctrl_of(neg, add->in(2));
|
||||
add = AddNode::make(add->in(1), neg, bt);
|
||||
@ -2915,8 +2912,7 @@ Node* PhaseIdealLoop::short_circuit_if(IfNode* iff, ProjNode* live_proj) {
|
||||
guarantee(live_proj != nullptr, "null projection");
|
||||
int proj_con = live_proj->_con;
|
||||
assert(proj_con == 0 || proj_con == 1, "false or true projection");
|
||||
Node *con = _igvn.intcon(proj_con);
|
||||
set_ctrl(con, C->root());
|
||||
Node* con = intcon(proj_con);
|
||||
if (iff) {
|
||||
iff->set_req(1, con);
|
||||
}
|
||||
@ -3225,8 +3221,7 @@ IfNode* PhaseIdealLoop::insert_cmpi_loop_exit(IfNode* if_cmpu, IdealLoopTree* lo
|
||||
if (stride > 0) {
|
||||
rhs_cmpi = limit; // For i >= limit
|
||||
} else {
|
||||
rhs_cmpi = _igvn.makecon(TypeInt::ZERO); // For i < 0
|
||||
set_ctrl(rhs_cmpi, C->root());
|
||||
rhs_cmpi = makecon(TypeInt::ZERO); // For i < 0
|
||||
}
|
||||
// Create a new region on the exit path
|
||||
RegionNode* reg = insert_region_before_proj(lp_exit);
|
||||
@ -3255,8 +3250,7 @@ void PhaseIdealLoop::remove_cmpi_loop_exit(IfNode* if_cmp, IdealLoopTree *loop)
|
||||
assert(if_cmp->in(1)->in(1)->Opcode() == Op_CmpI &&
|
||||
stay_in_loop(lp_proj, loop)->is_If() &&
|
||||
stay_in_loop(lp_proj, loop)->in(1)->in(1)->Opcode() == Op_CmpU, "inserted cmpi before cmpu");
|
||||
Node *con = _igvn.makecon(lp_proj->is_IfTrue() ? TypeInt::ONE : TypeInt::ZERO);
|
||||
set_ctrl(con, C->root());
|
||||
Node* con = makecon(lp_proj->is_IfTrue() ? TypeInt::ONE : TypeInt::ZERO);
|
||||
if_cmp->set_req(1, con);
|
||||
}
|
||||
|
||||
@ -4638,7 +4632,7 @@ void PhaseIdealLoop::move_unordered_reduction_out_of_loop(IdealLoopTree* loop) {
|
||||
assert(first_ur != nullptr, "must have successfully terminated chain traversal");
|
||||
|
||||
Node* identity_scalar = ReductionNode::make_identity_con_scalar(_igvn, sopc, bt);
|
||||
set_ctrl(identity_scalar, C->root());
|
||||
set_root_as_ctrl(identity_scalar);
|
||||
VectorNode* identity_vector = VectorNode::scalar2vector(identity_scalar, vector_length, bt);
|
||||
register_new_node(identity_vector, C->root());
|
||||
assert(vec_t == identity_vector->vect_type(), "matching vector type");
|
||||
|
||||
@ -274,8 +274,7 @@ bool InitializedAssertionPredicate::is_predicate(Node* node) {
|
||||
}
|
||||
|
||||
void InitializedAssertionPredicate::kill(PhaseIdealLoop* phase) const {
|
||||
Node* true_con = phase->igvn().intcon(1);
|
||||
phase->set_ctrl(true_con, phase->C->root());
|
||||
Node* true_con = phase->intcon(1);
|
||||
phase->igvn().replace_input_of(_if_node, 1, true_con);
|
||||
}
|
||||
|
||||
|
||||
@ -1215,9 +1215,7 @@ Node* VPointer::maybe_negate_invar(bool negate, Node* invar) {
|
||||
if (negate) {
|
||||
BasicType bt = invar->bottom_type()->basic_type();
|
||||
assert(bt == T_INT || bt == T_LONG, "");
|
||||
PhaseIterGVN& igvn = phase()->igvn();
|
||||
Node* zero = igvn.zerocon(bt);
|
||||
phase()->set_ctrl(zero, phase()->C->root());
|
||||
Node* zero = phase()->zerocon(bt);
|
||||
Node* sub = SubNode::make(zero, invar, bt);
|
||||
invar = register_if_new(sub);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user