[Bug rtl-optimization/50107] [IRA, i386] allocates regiters in very non-optimal way
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Aug 18 19:02:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50107
--- Comment #11 from H.J. Lu <hjl.tools at gmail dot com> 2011-08-18 18:31:37 UTC ---
(In reply to comment #10)
> > movq %rdi, %rdx
> > mulx %rsi, %rax, %rsi
> > movq %rsi, %rdx
> > ret
> > .cfi_endproc
> > .LFE0:
> > .size test_mul_64, .-test_mul_64
> > .ident "GCC: (GNU) 4.7.0 20110818 (experimental)"
> > .section .note.GNU-stack,"",@progbits
> > [hjl@gnu-6 pr50107]$
> >
> > I would expect
> >
> > movq %rdi, %rdx
> > mulx %rsi, %rax, %rdx
> > ret
>
> I think it i a reload problem. IRA assigns dx to pseudo 71 (an insn output)
> but reload then spills it.
uti-2.i.188r.asmcons has
(insn 11 4 24 2 (parallel [
(set (reg:DI 72)
(mult:DI (reg/v:DI 64 [ b ])
(reg/v:DI 63 [ a ])))
(set (reg:DI 73 [+8 ])
(truncate:DI (ashiftrt:TI (mult:TI (zero_extend:TI (reg/v:DI 64
[ b ]))
(zero_extend:TI (reg/v:DI 63 [ a ])))
(const_int 64 [0x40]))))
]) uti-2.i:3 339 {bmi2_mulxditi3_internal}
(expr_list:REG_DEAD (reg/v:DI 64 [ b ])
(expr_list:REG_DEAD (reg/v:DI 63 [ a ])
(nil))))
uti-2.i.191r.ira generates:
(insn 11 28 25 2 (parallel [
(set (reg:DI 0 ax [72])
(mult:DI (reg/v:DI 4 si [orig:64 b ] [64])
(reg:DI 1 dx)))
(set (reg:DI 4 si [orig:73+8 ] [73])
(truncate:DI (ashiftrt:TI (mult:TI (zero_extend:TI (reg/v:DI 4
s
i [orig:64 b ] [64]))
(zero_extend:TI (reg:DI 1 dx)))
(const_int 64 [0x40]))))
]) uti-2.i:3 339 {bmi2_mulxditi3_internal}
(nil))
Why does IRA/reload choose SI for pseudo 73?
More information about the Gcc-bugs
mailing list