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?

Reply via email to