On Fri, May 11, 2007 at 01:54:24PM +0200, Roman Zippel wrote:
>
> To illustrate the problem here is what happens during combine:
>
> -(insn 7 28 8 2 ../gcc/gcc/testsuite/gcc.c-torture/execute/20001108-1.c:4
> (parallel [
> - (set (subreg:SI (reg:DI 30 [ D.1547 ]) 4)
> - (mult:SI (reg/v:SI 33 [ x ])
> - (subreg:SI (reg/v:DI 32 [ sum ]) 4)))
> - (set (subreg:SI (reg:DI 30 [ D.1547 ]) 0)
> - (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (reg/v:SI
> 33 [ x ]))
> - (sign_extend:DI (subreg:SI (reg/v:DI 32 [ sum ])
> 4)))
> - (const_int 32 [0x20]))))
> - ]) 182 {*m68k.md:2733} (expr_list:REG_DEAD (reg/v:SI 33 [ x ])
> - (expr_list:REG_UNUSED (reg:DI 30 [ D.1547 ])
> - (nil))))
> +(insn 7 28 8 2 ../gcc/gcc/testsuite/gcc.c-torture/execute/20001108-1.c:4
> (set (subreg:SI (reg:DI 30 [ D.1547 ]) 4)
> + (mult:SI (mem/c/i:SI (plus:SI (reg/f:SI 24 %argptr)
> + (const_int 16 [0x10])) [3 x+0 S4 A32])
> + (subreg:SI (reg/v:DI 32 [ sum ]) 4))) 176 {*m68k.md:2643}
> (expr_list:REG_UNUSED (reg:DI 30 [ D.1547 ])
> + (nil)))
The first one is the insn pattern right below the mulsidi3 expander,
right? Please give all insn patterns a name to make searches easier.
May I ask why the original insn 7 isn't coded something like
(set (reg:DI 30) (mult:DI (sign_extend:DI (reg:SI 33))
(sign_extend:DI (reg:SI 32))))
instead?
--
Rask Ingemann Lambertsen