------- Comment #4 from danglin at gcc dot gnu dot org  2006-02-13 23:36 -------
Here's what 3.4 does for the testcase:

(insn 38 204 205 0 (set (reg:HI 19 %r19)
        (mem:HI (plus:SI (reg/v/f:SI 3 %r3 [orig:97 w ] [97])
                (const_int 256 [0x100])) [4 S2 A16])) 52 {*pa.md:2878} (nil)
    (expr_list:REG_EQUIV (mem:HI (plus:SI (reg/v/f:SI 3 %r3 [orig:97 w ] [97])
                (const_int 256 [0x100])) [4 S2 A16])
        (nil)))

(insn 205 38 206 0 (set (mem:SI (plus:SI (reg/f:SI 30 %r30)
                (const_int -16 [0xfffffff0])) [0 S4 A32])
        (reg:SI 19 %r19)) 37 {*pa.md:2265} (nil)
    (nil))

(insn 206 205 23 0 (set (reg:SI 78 %fr27)
        (mem:SI (plus:SI (reg/f:SI 30 %r30)
                (const_int -16 [0xfffffff0])) [0 S4 A32])) 37 {*pa.md:2265}
(nil
)
    (nil))

...

(insn 217 74 218 0 (set (mem:SI (plus:SI (reg/f:SI 30 %r30)
                (const_int -16 [0xfffffff0])) [0 S4 A32])
        (reg:SI 78 %fr27)) 37 {*pa.md:2265} (nil)
    (nil))

(insn 218 217 39 0 (set (reg:SI 19 %r19)
        (mem:SI (plus:SI (reg/f:SI 30 %r30)
                (const_int -16 [0xfffffff0])) [0 S4 A32])) 37 {*pa.md:2265}
(nil
)
    (nil))

(insn 39 218 219 0 (set (reg:SI 19 %r19)
        (sign_extend:SI (reg:HI 19 %r19))) 83 {extendhisi2} (insn_list 38
(nil))
    (nil))

(insn 219 39 220 0 (set (mem:SI (plus:SI (reg/f:SI 30 %r30)
                (const_int -16 [0xfffffff0])) [0 S4 A32])
        (reg:SI 19 %r19)) 37 {*pa.md:2265} (nil)
    (nil))

(insn 220 219 221 0 (set (reg:SI 78 %fr27 [118])
        (mem:SI (plus:SI (reg/f:SI 30 %r30)
                (const_int -16 [0xfffffff0])) [0 S4 A32])) 37 {*pa.md:2265}
(nil
)
    (nil))

...

(insn 42 222 83 0 (set (reg:DI 78 %fr27 [123])
        (mult:DI (zero_extend:DI (reg:SI 78 %fr27 [118]))
            (zero_extend:DI (reg:SI 69 %fr22R)))) 112 {umulsidi3} (insn_list 41
(insn_list 39 (nil)))
    (nil))

I guess the bug was instroduced by the removal of the
SECONDARY_MEMORY_NEEDED_RTX
define.  Without it reload isn't smart enough to use SImode for the
general to floating-point register copy.  Probably, adding alternatives to
do the copy will fix the problem, and just maybe if the alternatives are
disparaged reload won't use them.  Yuck.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26255

Reply via email to