------- 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

Reply via email to