On 2015-07-29 17:12, Alex Bennée wrote: > > Aurelien Jarno <aurel...@aurel32.net> 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 <r...@twiddle.net> > > Signed-off-by: Aurelien Jarno <aurel...@aurel32.net> > > --- > > 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 aurel...@aurel32.net http://www.aurel32.net