------- Comment #7 from amodra at bigpond dot net dot au 2005-11-24 06:51
-------
I'm not surprised that reducing this testcase isn't easy. Register pressure is
needed to trigger the bug. The problem is that in
(insn:HI 2761 3601 2769 279 wmadec.c:1117 (set (reg:V4SF 280 [ vect_var_.655 ])
(mem:V4SF (and:SI (plus:SI (reg/f:SI 1824)
(reg:SI 284 [ base_off.641 ]))
(const_int -16 [0xfffffffffffffff0])) [4 S16 A128])) 628
{altivec_lvx_v4sf} (insn_list:REG_DEP_TRUE 2757 (nil))
(expr_list:REG_DEAD (reg:SI 284 [ base_off.641 ])
(nil)))
reg 1824 doesn't get a hard register, so is replaced with a stack slot
(insn:HI 2761 3601 2769 279 wmadec.c:1117 (set (reg:V4SF 89 12 [orig:280
vect_var_.655 ] [280])
(mem:V4SF (and:SI (plus:SI (plus:SI (reg/f:SI 1 1)
(reg:SI 11 11 [orig:284 base_off.641 ] [284]))
(const_int 16512 [0x4080]))
(const_int -16 [0xfffffffffffffff0])) [4 S16 A128])) 628
{altivec_lvx_v4sf} (insn_list:REG_DEP_TRUE 2757 (nil))
(expr_list:REG_DEAD (reg:SI 11 11 [orig:284 base_off.641 ] [284])
(nil)))
reload just tries to put the mem address, including the AND, into a reg. It
needs to be taught that the AND should stay with the insn. The real address is
the part inside the AND.
--
amodra at bigpond dot net dot au changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|middle-end |tree-optimization
Target Milestone|4.1.0 |---
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24997