Hello,
On Wed, 19 Jun 2024, Tamar Christina wrote:
> So this is where we compare different IV expressions to determine which
> IVs compute the same thing and thus can be in the same group.
>
> The STRIP_NOPS don't work because while the incoming types are the same
> the casts are different. So:
>
> >>> p debug (ustep)
> (unsigned long) stride.3_27 * 4
> $3 = void
> >>> p debug (cstep)
> (unsigned long) (stride.3_27 * 4)
> $4 = void
>
> Which is of course stripped to:
>
> >>> p debug (top)
> (unsigned long) stride.3_27 * 4
> $1 = void
> >>> p debug (bot)
> stride.3_27 * 4
>
> Both of these compute the same thing
In isolation these are _not_ computing the same when strides type is
smaller than ulong, namely when stride is either negative or larger than
its max-value/4. I.e. when comparing IVs not only the overflow behaviour
for the whole {base,+,step} revolution matters, but also the behaviour on
the constituent expressions. (It's possible that stride is known to be
non-problematic here, I haven't checked. I was just triggered by the
claim of same-ness :) )
Ciao,
Michael.