Hi!

On Thu, Oct 01, 2020 at 11:03:37PM +0930, Alan Modra wrote:
> during RTL pass: fwprop1
> gcc.dg/pr82596.c: In function 'test_cststring':
> gcc.dg/pr82596.c:27:1: internal compiler error: in decompose, at rtl.h:2282
> 
> -m32 gcc/testsuite/gcc.dg/pr82596.c fails along with other tests after
> applying rtx_cost patches, which exposed a backend bug.
> 
> legitimize_address when presented with the following address
>       (plus (reg) (const_int 0x7ffffffff))
> attempts to rewrite it as a high/low sum.  The low part is 0xffff, or
> -1, making the high part 0x80000000.  But this is no longer canonical
> for SImode.

Yes, you can in general not just do GEN_INT on stuff you did arithmetic
on.  Nice catch :-)

Okay for trunk, and backports if possible after a day or two.  Thanks!

>       * config/rs6000/rs6000.c (rs6000_legitimize_address): Properly
>       sign extend high part of address constant.

I would just say "use gen_int_mode" ;-)  But this is fine, sure.


Segher

Reply via email to