> Am 28.10.2022 um 15:59 schrieb Andrew MacLeod <amacl...@redhat.com>:
>
>
>> On 10/28/22 09:46, Richard Biener wrote:
>>> On Fri, Oct 28, 2022 at 3:43 PM Andrew MacLeod <amacl...@redhat.com> wrote:
>>>
>>> On 10/28/22 03:17, Richard Biener wrote:
>>>> On Wed, Oct 26, 2022 at 4:24 PM Andrew MacLeod <amacl...@redhat.com> wrote:
>>>>> Figured I would ask what you guys think of making ranger the default for
>>>>> the VRP1 pass now.
>>>>>
>>>>> With partial equivalences and the other bits I checked in the past few
>>>>> weeks I'm not aware of much that the legacy VRP pass gets that ranger
>>>>> doesn't. The only exception to that which I am aware of is the trick
>>>>> played with the unreachable edges to set global ranges, but that is done
>>>>> in the DOM passes now anyway... so it just happens slightly later in the
>>>>> optimization cycle.
>>>> Note DOM should go away at some point. Why can this not happen during
>>>> ranger driven VRP?
>>> I have been working on that for the last 2 days. Turns out VRP1 can
>>> remove builtin_unreachable from the
>>> if (X)
>>> __builtin_unreachable ()
>>>
>>> idiom and set the appropriate global ranges, but it has to leave those
>>> with 2 ssa-names:
>>>
>>> if (a_1 != b_2)
>>> __builtin_unreachable()
>>>
>>> until the second pass of VRP or we lose the relationship between a_1 and
>>> b_2. That triggers some failures. Specifically a vectorizor fail
>>> because it cant be sure that the start and end point are not the same
>>> without the condition in the IL. Trying to store global relations over
>>> multiple passes would be problematic at this stage of development, so I
>>> don't see a problem with leaving it that way.
>> Hmm, I don't remember VRP1 doing anything special with the above though?
>> Did it somehow propagate the (un!)conditional equivalence?
>
> So as I looked at builtin_unreachable(), it was very adhoc. That one of the
> roots of that artificial testcase in the PR I opened. Cascading calls were
> not being handled in a consistent way. VRP1 removed some, dom removed some..
> they just kind of disappeared at some point, but not consistently. The PR
> that Uli opened that Aldy fixed, I could make fail again with minor
> adjustments to the conditions. So I worked on a consistent approach.
>
> My guess is the old range stored globally for that case for a_1 was probably
> ~[b_2, b_2] meaning it was carried in the range. Until we have an overall
> global relation tracker, we can't represent that across passes.
The global ranges were never symbolic, this was at most used during VRP itself.
>
> It appears that leaving those until VRP2 works fine... testsuite currently
> running tho ;-)
>
> Andrew
>