[RFA][PATCH] Use SCEV conditionally within vr-values and evrp range analysis - V2

Richard Biener richard.guenther@gmail.com
Tue Nov 28 11:55:00 GMT 2017


On Mon, Nov 27, 2017 at 5:43 PM, Jeff Law <law@redhat.com> wrote:
> On 11/23/2017 05:49 AM, Richard Biener wrote:
>> On Thu, Nov 23, 2017 at 1:16 AM, Jeff Law <law@redhat.com> wrote:
>>>
>>> Clients of the evrp range analysis may not have initialized the SCEV
>>> infrastructure, and in fact my not want to (DOM for example).
>>>
>>> Yet inside both vr-values.c and gimple-ssa-evrp-analyze.c we have calls
>>> into SCEV (that will fault/abort if SCEV is not properly initialized).
>>>
>>> This patch allows clients of vr-values.c and gimple-ssa-evrp-analyze.c
>>> to indicate if they want SCEV analysis.
>>>
>>> Bootstrapped and regression tested by itself as well as with the DOM
>>> patches to use EVRP analysis  (which test the "don't want SCEV path).
>>>
>>> OK for the trunk?
>>
>> There's also scev_initialized_p () which you could conveniently use.
> Yea, that worked fine and is (of course) much simpler.
>
> Bootstrapped and regression tested in isolation as well as on top of my
> ongoing work to remove jump threading from tree-vrp.c.
>
> OK for the trunk now?

Ok.

Richard.

> Jeff
>
>
>         * 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);
>
>



More information about the Gcc-patches mailing list