[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
[Qemu-devel] [PATCH for-2.5 08/10] tcg/optimize: add optimizations for ext_i32_i64 and extu_i32_i64 ops, Aurelien Jarno, 2015/07/24
[Qemu-devel] [PATCH for-2.5 05/10] tcg: rename trunc_shr_i32 into trunc_shr_i64_i32, Aurelien Jarno, 2015/07/24
[Qemu-devel] [PATCH for-2.5 02/10] tcg/optimize: add temp_is_const and temp_is_copy functions, Aurelien Jarno, 2015/07/24
[Qemu-devel] [PATCH for-2.5 03/10] tcg/optimize: track const/copy status separately, Aurelien Jarno, 2015/07/24