https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70478

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ra
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-03-31
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
It seems to somehow "optimize" with regard to the and op being unsigned char
and thus all upper bits being zero and only the lower ones need to be computed?

Before RA

(insn 7 4 8 2 (set (reg:SI 66 [ *b_4(D)+-3 ])
        (zero_extend:SI (mem:QI (reg:DI 3 %r3 [ b ]) [0 *b_4(D)+0 S1 A8])))
t.c:3 1209 {*zero_extendqisi2_extimm}
     (expr_list:REG_DEAD (reg:DI 3 %r3 [ b ])
        (nil)))
(insn 8 7 11 2 (parallel [
            (set (mem:SI (reg:DI 2 %r2 [ a ]) [1 *a_2(D)+0 S4 A32])
                (and:SI (mem:SI (reg:DI 2 %r2 [ a ]) [1 *a_2(D)+0 S4 A32])
                    (reg:SI 66 [ *b_4(D)+-3 ])))
            (clobber (reg:CC 33 %cc))
        ]) t.c:3 1473 {*andsi3_zarch}
     (expr_list:REG_DEAD (reg:SI 66 [ *b_4(D)+-3 ])
        (expr_list:REG_DEAD (reg:DI 2 %r2 [ a ])
            (expr_list:REG_UNUSED (reg:CC 33 %cc)
                (nil)))))

after

(insn 7 4 8 2 (set (reg:SI 66 [ *b_4(D)+-3 ])
        (zero_extend:SI (mem:QI (reg:DI 3 %r3 [ b ]) [0 *b_4(D)+0 S1 A8])))
t.c:3 1209 {*zero_extendqisi2_extimm}
     (expr_list:REG_DEAD (reg:DI 3 %r3 [ b ])
        (nil)))
(insn 8 7 11 2 (parallel [
            (set (mem:SI (reg:DI 2 %r2 [ a ]) [1 *a_2(D)+0 S4 A32])
                (and:SI (mem:SI (reg:DI 2 %r2 [ a ]) [1 *a_2(D)+0 S4 A32])
                    (reg:SI 66 [ *b_4(D)+-3 ])))
            (clobber (reg:CC 33 %cc))
        ]) t.c:3 1473 {*andsi3_zarch}
     (expr_list:REG_DEAD (reg:SI 66 [ *b_4(D)+-3 ])
        (expr_list:REG_DEAD (reg:DI 2 %r2 [ a ])
            (expr_list:REG_UNUSED (reg:CC 33 %cc)
                (nil)))))

but then LRA chooses to spill while reload is happy with the above.

Reply via email to