* gimple-ssa-evrp-analyze.c (evrp_range_analyzer::record_ranges_from_phis): Only use SCEV to refine ranges if scev_initialized_p returns true. * vr-values.c (vr_values::extract_range_from_phi_node): Likewise. diff --git a/gcc/gimple-ssa-evrp-analyze.c b/gcc/gimple-ssa-evrp-analyze.c index 68a2cdc..38fb0db 100644 --- a/gcc/gimple-ssa-evrp-analyze.c +++ b/gcc/gimple-ssa-evrp-analyze.c @@ -176,7 +176,8 @@ evrp_range_analyzer::record_ranges_from_phis (basic_block bb) to use VARYING for them. But we can still resort to SCEV for loop header PHIs. */ struct loop *l; - if (interesting + if (scev_initialized_p () + && interesting && (l = loop_containing_stmt (phi)) && l->header == gimple_bb (phi)) vr_values.adjust_range_with_scev (&vr_result, l, phi, lhs); diff --git a/gcc/vr-values.c b/gcc/vr-values.c index 2d11861..e617556 100644 --- a/gcc/vr-values.c +++ b/gcc/vr-values.c @@ -2935,7 +2935,8 @@ scev_check: scev_check can be reached from two paths, one is a fall through from above "varying" label, the other is direct goto from code block which tries to avoid infinite simulation. */ - if ((l = loop_containing_stmt (phi)) + if (scev_initialized_p () + && (l = loop_containing_stmt (phi)) && l->header == gimple_bb (phi)) adjust_range_with_scev (vr_result, l, phi, lhs);