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