Index: tests_lit/assembler/x86/opcode_register_encodings.ll |
diff --git a/tests_lit/assembler/x86/opcode_register_encodings.ll b/tests_lit/assembler/x86/opcode_register_encodings.ll |
index 3d2b266e6e0af6c4460ca33a3a363ca802c65f2e..ca583362478f338b45e7f9217a675f9b2505f18a 100644 |
--- a/tests_lit/assembler/x86/opcode_register_encodings.ll |
+++ b/tests_lit/assembler/x86/opcode_register_encodings.ll |
@@ -6,7 +6,6 @@ |
; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ |
; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s |
; RUN: %p2i -i %s --args --verbose none | FileCheck --check-prefix=ERRORS %s |
-; RUN: %p2i -i %s --insts | %szdiff %s | FileCheck --check-prefix=DUMP %s |
define <8 x i16> @test_mul_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
entry: |
@@ -83,5 +82,49 @@ entry: |
; CHECK-DAG: 66 0f 38 40 8c 24 80 00 00 00 pmulld xmm1, xmmword ptr [esp + 128] |
} |
+; Test movq, which is used by atomic stores. |
+declare void @llvm.nacl.atomic.store.i64(i64, i64*, i32) |
+ |
+define void @test_atomic_store_64(i32 %iptr, i32 %iptr2, i32 %iptr3, i64 %v) { |
+entry: |
+ %ptr = inttoptr i32 %iptr to i64* |
+ %ptr2 = inttoptr i32 %iptr2 to i64* |
+ %ptr3 = inttoptr i32 %iptr3 to i64* |
+ call void @llvm.nacl.atomic.store.i64(i64 %v, i64* %ptr2, i32 6) |
+ call void @llvm.nacl.atomic.store.i64(i64 1234567891024, i64* %ptr, i32 6) |
+ call void @llvm.nacl.atomic.store.i64(i64 %v, i64* %ptr3, i32 6) |
+ ret void |
+} |
+; CHECK-LABEL: test_atomic_store_64 |
+; CHECK-DAG: f3 0f 7e 04 24 movq xmm0, qword ptr [esp] |
+; CHECK-DAG: f3 0f 7e 44 24 08 movq xmm0, qword ptr [esp + 8] |
+; CHECK-DAG: 66 0f d6 0{{.*}} movq qword ptr [e{{.*}}], xmm0 |
+ |
+; Test "movups" via vector stores and loads. |
+define void @store_v16xI8(i32 %addr, i32 %addr2, i32 %addr3, <16 x i8> %v) { |
+ %addr_v16xI8 = inttoptr i32 %addr to <16 x i8>* |
+ %addr2_v16xI8 = inttoptr i32 %addr2 to <16 x i8>* |
+ %addr3_v16xI8 = inttoptr i32 %addr3 to <16 x i8>* |
+ store <16 x i8> %v, <16 x i8>* %addr2_v16xI8, align 1 |
+ store <16 x i8> %v, <16 x i8>* %addr_v16xI8, align 1 |
+ store <16 x i8> %v, <16 x i8>* %addr3_v16xI8, align 1 |
+ ret void |
+} |
+; CHECK-LABEL: store_v16xI8 |
+; CHECK: 0f 11 0{{.*}} movups xmmword ptr [e{{.*}}], xmm0 |
+ |
+define <16 x i8> @load_v16xI8(i32 %addr, i32 %addr2, i32 %addr3) { |
+ %addr_v16xI8 = inttoptr i32 %addr to <16 x i8>* |
+ %addr2_v16xI8 = inttoptr i32 %addr2 to <16 x i8>* |
+ %addr3_v16xI8 = inttoptr i32 %addr3 to <16 x i8>* |
+ %res1 = load <16 x i8>* %addr2_v16xI8, align 1 |
+ %res2 = load <16 x i8>* %addr_v16xI8, align 1 |
+ %res3 = load <16 x i8>* %addr3_v16xI8, align 1 |
+ %res12 = add <16 x i8> %res1, %res2 |
+ %res123 = add <16 x i8> %res12, %res3 |
+ ret <16 x i8> %res123 |
+} |
+; CHECK-LABEL: load_v16xI8 |
+; CHECK: 0f 10 0{{.*}} movups xmm0, xmmword ptr [e{{.*}}] |
+ |
; ERRORS-NOT: ICE translation error |
-; DUMP-NOT: SZ |