From 07bd8bf34ae146609fbc4a704fac7c9012f69739 Mon Sep 17 00:00:00 2001 From: Trevor Elliott Date: Wed, 16 Nov 2022 10:33:00 -0800 Subject: [PATCH] Remove unnecessary moves in x64 gen_memcpy (#5277) Remove some unnecessary moves in the x64 gen_memcpy implementation -- the call instruction that's generated will already constrain the args to those registers. --- cranelift/codegen/src/isa/x64/abi.rs | 2 -- .../filetests/filetests/isa/x64/struct-arg.clif | 13 ++++++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/cranelift/codegen/src/isa/x64/abi.rs b/cranelift/codegen/src/isa/x64/abi.rs index 3e697a33bb..91bde772c6 100644 --- a/cranelift/codegen/src/isa/x64/abi.rs +++ b/cranelift/codegen/src/isa/x64/abi.rs @@ -639,8 +639,6 @@ impl ABIMachineSpec for X64ABIMachineSpec { let arg0 = get_intreg_for_arg(&call_conv, 0, 0).unwrap(); let arg1 = get_intreg_for_arg(&call_conv, 1, 1).unwrap(); let arg2 = get_intreg_for_arg(&call_conv, 2, 2).unwrap(); - insts.push(Inst::gen_move(Writable::from_reg(arg0), dst, I64)); - insts.push(Inst::gen_move(Writable::from_reg(arg1), src, I64)); insts.extend( Inst::gen_constant(ValueRegs::one(temp), size as u128, I64, |_| { panic!("tmp should not be needed") diff --git a/cranelift/filetests/filetests/isa/x64/struct-arg.clif b/cranelift/filetests/filetests/isa/x64/struct-arg.clif index c3055b76b7..cc65b6e687 100644 --- a/cranelift/filetests/filetests/isa/x64/struct-arg.clif +++ b/cranelift/filetests/filetests/isa/x64/struct-arg.clif @@ -51,8 +51,8 @@ block0(v0: i64): ; virtual_sp_offset_adjust 64 ; lea 0(%rsp), %rdi ; movl $64, %edx -; load_ext_name %Memcpy+0, %rax -; call *%rax +; load_ext_name %Memcpy+0, %r11 +; call *%r11 ; call User(userextname0) ; addq %rsp, $64, %rsp ; virtual_sp_offset_adjust -64 @@ -130,14 +130,13 @@ block0(v0: i64, v1: i64, v2: i64): ; virtual_sp_offset_adjust 192 ; lea 0(%rsp), %rdi ; movl $128, %edx -; load_ext_name %Memcpy+0, %rcx -; call *%rcx +; load_ext_name %Memcpy+0, %rax +; call *%rax ; lea 128(%rsp), %rdi -; movq %r14, %rsi ; movl $64, %edx -; load_ext_name %Memcpy+0, %rcx +; load_ext_name %Memcpy+0, %r11 ; movq %r14, %rsi -; call *%rcx +; call *%r11 ; movq %r12, %rdi ; call User(userextname0) ; addq %rsp, $192, %rsp