< prev index next >

src/share/vm/opto/loopopts.cpp

Print this page
rev 5783 : 8024069: replace_in_map() should operate on parent maps
Summary: type information gets lost because replace_in_map() doesn't update parent maps
Reviewed-by: kvn, twisti

*** 232,243 **** // Loop predicates may have depending checks which should not // be skipped. For example, range check predicate has two checks // for lower and upper bounds. ProjNode* unc_proj = iff->as_If()->proj_out(1 - dp->as_Proj()->_con)->as_Proj(); if (exclude_loop_predicate && ! (is_uncommon_trap_proj(unc_proj, Deoptimization::Reason_predicate) || ! is_uncommon_trap_proj(unc_proj, Deoptimization::Reason_range_check))) { // If this is a range check (IfNode::is_range_check), do not // reorder because Compile::allow_range_check_smearing might have // changed the check. return; // Let IGVN transformation change control dependence. } --- 232,243 ---- // Loop predicates may have depending checks which should not // be skipped. For example, range check predicate has two checks // for lower and upper bounds. ProjNode* unc_proj = iff->as_If()->proj_out(1 - dp->as_Proj()->_con)->as_Proj(); if (exclude_loop_predicate && ! (unc_proj->is_uncommon_trap_proj(Deoptimization::Reason_predicate) || ! unc_proj->is_uncommon_trap_proj(Deoptimization::Reason_range_check))) { // If this is a range check (IfNode::is_range_check), do not // reorder because Compile::allow_range_check_smearing might have // changed the check. return; // Let IGVN transformation change control dependence. }
< prev index next >