qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-2.5 04/10] tcg/optimize: allow constant to h


From: Aurelien Jarno
Subject: Re: [Qemu-devel] [PATCH for-2.5 04/10] tcg/optimize: allow constant to have copies
Date: Wed, 29 Jul 2015 18:27:57 +0200
User-agent: Mutt/1.5.23 (2014-03-12)

On 2015-07-29 17:12, Alex Bennée wrote:
> 
> Aurelien Jarno <address@hidden> writes:
> 
> > Now that copies and constants are tracked separately, we can allow
> > constant to have copies, deferring the choice to use a register or a
> > constant to the register allocation pass. This prevent this kind of
> > regular constant reloading:
> >
> > -OUT: [size=338]
> > +OUT: [size=298]
> >    mov    -0x4(%r14),%ebp
> >    test   %ebp,%ebp
> >    jne    0x7ffbe9cb0ed6
> >    mov    $0x40002219f8,%rbp
> >    mov    %rbp,(%r14)
> > -  mov    $0x40002219f8,%rbp
> >    mov    $0x4000221a20,%rbx
> >    mov    %rbp,(%rbx)
> >    mov    $0x4000000000,%rbp
> >    mov    %rbp,(%r14)
> > -  mov    $0x4000000000,%rbp
> >    mov    $0x4000221d38,%rbx
> >    mov    %rbp,(%rbx)
> >    mov    $0x40002221a8,%rbp
> >    mov    %rbp,(%r14)
> > -  mov    $0x40002221a8,%rbp
> >    mov    $0x4000221d40,%rbx
> >    mov    %rbp,(%rbx)
> >    mov    $0x4000019170,%rbp
> >    mov    %rbp,(%r14)
> > -  mov    $0x4000019170,%rbp
> >    mov    $0x4000221d48,%rbx
> >    mov    %rbp,(%rbx)
> >    mov    $0x40000049ee,%rbp
> >    mov    %rbp,0x80(%r14)
> >    mov    %r14,%rdi
> >    callq  0x7ffbe99924d0
> >    mov    $0x4000001680,%rbp
> >    mov    %rbp,0x30(%r14)
> >    mov    0x10(%r14),%rbp
> >    mov    $0x4000001680,%rbp
> >    mov    %rbp,0x30(%r14)
> >    mov    0x10(%r14),%rbp
> >    shl    $0x20,%rbp
> >    mov    (%r14),%rbx
> >    mov    %ebx,%ebx
> >    mov    %rbx,(%r14)
> >    or     %rbx,%rbp
> >    mov    %rbp,0x10(%r14)
> >    mov    %rbp,0x90(%r14)
> >    mov    0x60(%r14),%rbx
> >    mov    %rbx,0x38(%r14)
> >    mov    0x28(%r14),%rbx
> >    mov    $0x4000220e60,%r12
> >    mov    %rbx,(%r12)
> >    mov    $0x40002219c8,%rbx
> >    mov    %rbp,(%rbx)
> >    mov    0x20(%r14),%rbp
> >    sub    $0x8,%rbp
> >    mov    $0x4000004a16,%rbx
> >    mov    %rbx,0x0(%rbp)
> >    mov    %rbp,0x20(%r14)
> >    mov    $0x19,%ebp
> >    mov    %ebp,0xa8(%r14)
> >    mov    $0x4000015110,%rbp
> >    mov    %rbp,0x80(%r14)
> >    xor    %eax,%eax
> >    jmpq   0x7ffbebcae426
> >    lea    -0x5f6d72a(%rip),%rax        # 0x7ffbe3d437b3
> >    jmpq   0x7ffbebcae426
> >
> > Cc: Richard Henderson <address@hidden>
> > Signed-off-by: Aurelien Jarno <address@hidden>
> > ---
> >  tcg/optimize.c | 11 ++---------
> >  1 file changed, 2 insertions(+), 9 deletions(-)
> >
> > diff --git a/tcg/optimize.c b/tcg/optimize.c
> > index f16eb1e..48103b2 100644
> > --- a/tcg/optimize.c
> > +++ b/tcg/optimize.c
> > @@ -237,11 +237,6 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, 
> > TCGArg *args,
> >          return;
> >      }
> >  
> > -    if (temp_is_const(src)) {
> > -        tcg_opt_gen_movi(s, op, args, dst, temps[src].val);
> > -        return;
> > -    }
> > -
> 
> That looks suspicious, surely we only want to drop the move if we
> already have the const somewhere else?

That's actually the while point of this patchset, to avoid converting
mov into moving for constant values and thus loosing the link between
temps.

At this moment point of the code, the only way to know that the source
temp is a constant is when it has been set using a movi before.

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
address@hidden                 http://www.aurel32.net



reply via email to

[Prev in Thread] Current Thread [Next in Thread]