diff options
Diffstat (limited to 'tests/assembly-llvm/x86_64-array-pair-load-store-merge.rs')
| -rw-r--r-- | tests/assembly-llvm/x86_64-array-pair-load-store-merge.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/assembly-llvm/x86_64-array-pair-load-store-merge.rs b/tests/assembly-llvm/x86_64-array-pair-load-store-merge.rs new file mode 100644 index 00000000000..56a1a9e8206 --- /dev/null +++ b/tests/assembly-llvm/x86_64-array-pair-load-store-merge.rs @@ -0,0 +1,20 @@ +//@ assembly-output: emit-asm +//@ compile-flags: --crate-type=lib -Copt-level=3 -C llvm-args=-x86-asm-syntax=intel +//@ only-x86_64 +//@ ignore-sgx +//@ ignore-apple (manipulates rsp too) + +// Depending on various codegen choices, this might end up copying +// a `<2 x i8>`, an `i16`, or two `i8`s. +// Regardless of those choices, make sure the instructions use (2-byte) words. + +// CHECK-LABEL: array_copy_2_elements: +#[no_mangle] +pub fn array_copy_2_elements(a: &[u8; 2], p: &mut [u8; 2]) { + // CHECK-NOT: byte + // CHECK-NOT: mov + // CHECK: mov{{.+}}, word ptr + // CHECK-NEXT: mov word ptr + // CHECK-NEXT: ret + *p = *a; +} |
