------- Comment #4 from ramana dot r at gmail dot com 2009-02-03 21:43 ------- (In reply to comment #2)
> No problem with the trunk, but it's still there in the 4.3 branch. > > Here's a test case. Requires -funroll-loops -Os, no problem with any other > -O, > or without -funroll-loops, curiously. > > int f(int x, int y) { > int bytes = 4 * x + y; > if (bytes == 0) > return 0; > return bytes + 1; > } > I get the same problem even with a arm-none-eabi toolchain with the 4.3 branch only. For this particular testcase, the ICE is generated in final.c : cleanup_subreg_operands for the alter_subreg call for the following rtx. (insn:HI 9 8 17 /home/ramana/test.c:3 (parallel [ (set (reg:CC_NOOV 24 cc) (compare:CC_NOOV (plus:SI (mult:SI (reg:SI 0 r0 [ x ]) (const_int 4 [0x4])) (reg:SI 1 r1 [ y ])) (const_int 0 [0x0]))) (set (reg/v:SI 0 r0 [orig:133 bytes ] [133]) (plus:SI (cc0) (cc0))) ]) 265 {*arith_shiftsi_compare0} (expr_list:REG_DEAD (reg:SI 1 r1 [ y ]) (nil))) Looking at the dumps this rtx is generated by the rename registers pass in 4.3.x . In trunk however rename registers does not generate this rtx and hence there is no problem. It could still be latent but one has to dig deeper. -- ramana dot r at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rearnsha at arm dot com, | |ramana dot r at gmail dot | |com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39076