< prev index next >
src/share/vm/c1/c1_Canonicalizer.cpp
Print this page
rev 9088 : 8139040: Fix initializations before ShouldNotReachHere() etc. and enable -Wuninitialized on linux.
Reviewed-by: stuefe, coleenp
*** 637,654 ****
const Value l = x->x(); ValueType* lt = l->type();
const Value r = x->y(); ValueType* rt = r->type();
if (l == r && !lt->is_float_kind()) {
// pattern: If (a cond a) => simplify to Goto
! BlockBegin* sux;
switch (x->cond()) {
case If::eql: sux = x->sux_for(true); break;
case If::neq: sux = x->sux_for(false); break;
case If::lss: sux = x->sux_for(false); break;
case If::leq: sux = x->sux_for(true); break;
case If::gtr: sux = x->sux_for(false); break;
case If::geq: sux = x->sux_for(true); break;
}
// If is a safepoint then the debug information should come from the state_before of the If.
set_canonical(new Goto(sux, x->state_before(), is_safepoint(x, sux)));
return;
}
--- 637,655 ----
const Value l = x->x(); ValueType* lt = l->type();
const Value r = x->y(); ValueType* rt = r->type();
if (l == r && !lt->is_float_kind()) {
// pattern: If (a cond a) => simplify to Goto
! BlockBegin* sux = NULL;
switch (x->cond()) {
case If::eql: sux = x->sux_for(true); break;
case If::neq: sux = x->sux_for(false); break;
case If::lss: sux = x->sux_for(false); break;
case If::leq: sux = x->sux_for(true); break;
case If::gtr: sux = x->sux_for(false); break;
case If::geq: sux = x->sux_for(true); break;
+ default: ShouldNotReachHere();
}
// If is a safepoint then the debug information should come from the state_before of the If.
set_canonical(new Goto(sux, x->state_before(), is_safepoint(x, sux)));
return;
}
*** 682,692 ****
// all successors identical => simplify to: Goto
set_canonical(new Goto(lss_sux, x->state_before(), x->is_safepoint()));
} else {
// two successors differ and two successors are the same => simplify to: If (x cmp y)
// determine new condition & successors
! If::Condition cond;
BlockBegin* tsux = NULL;
BlockBegin* fsux = NULL;
if (lss_sux == eql_sux) { cond = If::leq; tsux = lss_sux; fsux = gtr_sux; }
else if (lss_sux == gtr_sux) { cond = If::neq; tsux = lss_sux; fsux = eql_sux; }
else if (eql_sux == gtr_sux) { cond = If::geq; tsux = eql_sux; fsux = lss_sux; }
--- 683,693 ----
// all successors identical => simplify to: Goto
set_canonical(new Goto(lss_sux, x->state_before(), x->is_safepoint()));
} else {
// two successors differ and two successors are the same => simplify to: If (x cmp y)
// determine new condition & successors
! If::Condition cond = If::eql;
BlockBegin* tsux = NULL;
BlockBegin* fsux = NULL;
if (lss_sux == eql_sux) { cond = If::leq; tsux = lss_sux; fsux = gtr_sux; }
else if (lss_sux == gtr_sux) { cond = If::neq; tsux = lss_sux; fsux = eql_sux; }
else if (eql_sux == gtr_sux) { cond = If::geq; tsux = eql_sux; fsux = lss_sux; }
< prev index next >