On 4/29/20 10:13 AM, Richard Sandiford wrote:
> If this is a bug we need to fix for GCC 10 then how about this:

I do think this is important to fix.  Mike Meissner just switched our
-mcpu=future code to enable -mpcrel by default in GCC10, so we're going
to see a lot more of these types of addresses than before.



> (1) change the MEM case to something like:
> 
>       {
>         bool addr_changed = false;
>         rtx addr = cse_process_notes (XEXP (x, 0), x, &addr_changed);
>         if (addr_changed && validate_change (x, &XEXP (x, 0), addr, 0))
>         *changed = true;
>         return x;
>       }
> 
>     which makes it safe to do the validation only at the top level
>     of the MEM.
> 
> (2) make the:
> 
>        for (i = 0; i < GET_RTX_LENGTH (code); i++)
>          if (fmt[i] == 'e')
> 
>     loop assign directly to XEXP (x, i) if the new rtx is different,
>     instead of using validate_change.  This ensures that temporarily
>     invalid rtl doesn't get verified.
> 
>     (passing a null object to validate_change would have the same effect,
>     but that feels a bit hacky)
> 
> (3) use the simplify_binary_operator thing above, since that at least
>     should be safe, even if it potentially leaves similar bugs unfixed
>     for other operators.
> 
> Sorry for the runaround :-(

No problem.  I appreciate the feedback and I agree we want to get this right.
I'll implement the above and report back.  Thanks!

Peter

Reply via email to