OLD | NEW |
1 ; Tests various aspects of x86 opcode encodings. E.g., some opcodes like | 1 ; Tests various aspects of x86 opcode encodings. E.g., some opcodes like |
2 ; those for pmull vary more wildly depending on operand size (rather than | 2 ; those for pmull vary more wildly depending on operand size (rather than |
3 ; follow a usual pattern). | 3 ; follow a usual pattern). |
4 | 4 |
5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 -mattr=sse4.1 \ | 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 -mattr=sse4.1 \ |
6 ; RUN: -sandbox | FileCheck %s | 6 ; RUN: -sandbox | FileCheck %s |
7 | 7 |
8 define <8 x i16> @test_mul_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 8 define <8 x i16> @test_mul_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
9 entry: | 9 entry: |
10 %res = mul <8 x i16> %arg0, %arg1 | 10 %res = mul <8 x i16> %arg0, %arg1 |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 store <16 x i8> %v, <16 x i8>* %addr3_v16xI8, align 1 | 108 store <16 x i8> %v, <16 x i8>* %addr3_v16xI8, align 1 |
109 ret void | 109 ret void |
110 } | 110 } |
111 ; CHECK-LABEL: store_v16xI8 | 111 ; CHECK-LABEL: store_v16xI8 |
112 ; CHECK: 0f 11 0{{.*}} movups XMMWORD PTR [e{{.*}}],xmm0 | 112 ; CHECK: 0f 11 0{{.*}} movups XMMWORD PTR [e{{.*}}],xmm0 |
113 | 113 |
114 define <16 x i8> @load_v16xI8(i32 %addr, i32 %addr2, i32 %addr3) { | 114 define <16 x i8> @load_v16xI8(i32 %addr, i32 %addr2, i32 %addr3) { |
115 %addr_v16xI8 = inttoptr i32 %addr to <16 x i8>* | 115 %addr_v16xI8 = inttoptr i32 %addr to <16 x i8>* |
116 %addr2_v16xI8 = inttoptr i32 %addr2 to <16 x i8>* | 116 %addr2_v16xI8 = inttoptr i32 %addr2 to <16 x i8>* |
117 %addr3_v16xI8 = inttoptr i32 %addr3 to <16 x i8>* | 117 %addr3_v16xI8 = inttoptr i32 %addr3 to <16 x i8>* |
118 %res1 = load <16 x i8>* %addr2_v16xI8, align 1 | 118 %res1 = load <16 x i8>, <16 x i8>* %addr2_v16xI8, align 1 |
119 %res2 = load <16 x i8>* %addr_v16xI8, align 1 | 119 %res2 = load <16 x i8>, <16 x i8>* %addr_v16xI8, align 1 |
120 %res3 = load <16 x i8>* %addr3_v16xI8, align 1 | 120 %res3 = load <16 x i8>, <16 x i8>* %addr3_v16xI8, align 1 |
121 %res12 = add <16 x i8> %res1, %res2 | 121 %res12 = add <16 x i8> %res1, %res2 |
122 %res123 = add <16 x i8> %res12, %res3 | 122 %res123 = add <16 x i8> %res12, %res3 |
123 ret <16 x i8> %res123 | 123 ret <16 x i8> %res123 |
124 } | 124 } |
125 ; CHECK-LABEL: load_v16xI8 | 125 ; CHECK-LABEL: load_v16xI8 |
126 ; CHECK: 0f 10 0{{.*}} movups xmm0,XMMWORD PTR [e{{.*}}] | 126 ; CHECK: 0f 10 0{{.*}} movups xmm0,XMMWORD PTR [e{{.*}}] |
127 | 127 |
128 ; Test segment override prefix. This happens w/ nacl.read.tp. | 128 ; Test segment override prefix. This happens w/ nacl.read.tp. |
129 declare i8* @llvm.nacl.read.tp() | 129 declare i8* @llvm.nacl.read.tp() |
130 | 130 |
131 ; Also test more address complex operands via address-mode-optimization. | 131 ; Also test more address complex operands via address-mode-optimization. |
132 define i32 @test_nacl_read_tp_more_addressing() { | 132 define i32 @test_nacl_read_tp_more_addressing() { |
133 entry: | 133 entry: |
134 %ptr = call i8* @llvm.nacl.read.tp() | 134 %ptr = call i8* @llvm.nacl.read.tp() |
135 %__1 = ptrtoint i8* %ptr to i32 | 135 %__1 = ptrtoint i8* %ptr to i32 |
136 %x = add i32 %__1, %__1 | 136 %x = add i32 %__1, %__1 |
137 %__3 = inttoptr i32 %x to i32* | 137 %__3 = inttoptr i32 %x to i32* |
138 %v = load i32* %__3, align 1 | 138 %v = load i32, i32* %__3, align 1 |
139 %v_add = add i32 %v, 1 | 139 %v_add = add i32 %v, 1 |
140 | 140 |
141 %ptr2 = call i8* @llvm.nacl.read.tp() | 141 %ptr2 = call i8* @llvm.nacl.read.tp() |
142 %__6 = ptrtoint i8* %ptr2 to i32 | 142 %__6 = ptrtoint i8* %ptr2 to i32 |
143 %y = add i32 %__6, -128 | 143 %y = add i32 %__6, -128 |
144 %__8 = inttoptr i32 %y to i32* | 144 %__8 = inttoptr i32 %y to i32* |
145 %v_add2 = add i32 %v, 4 | 145 %v_add2 = add i32 %v, 4 |
146 store i32 %v_add2, i32* %__8, align 1 | 146 store i32 %v_add2, i32* %__8, align 1 |
147 | 147 |
148 %z = add i32 %__6, 256 | 148 %z = add i32 %__6, 256 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 three: | 284 three: |
285 %res3 = extractelement <8 x i16> %vec4, i32 7 | 285 %res3 = extractelement <8 x i16> %vec4, i32 7 |
286 %res3_ext = zext i16 %res3 to i32 | 286 %res3_ext = zext i16 %res3 to i32 |
287 ret i32 %res3_ext | 287 ret i32 %res3_ext |
288 } | 288 } |
289 ; CHECK-LABEL: test_pextrw | 289 ; CHECK-LABEL: test_pextrw |
290 ; CHECK-DAG: 66 0f c5 c0 00 pextrw eax,xmm0 | 290 ; CHECK-DAG: 66 0f c5 c0 00 pextrw eax,xmm0 |
291 ; CHECK-DAG: 66 0f c5 c1 02 pextrw eax,xmm1 | 291 ; CHECK-DAG: 66 0f c5 c1 02 pextrw eax,xmm1 |
292 ; CHECK-DAG: 66 0f c5 c2 05 pextrw eax,xmm2 | 292 ; CHECK-DAG: 66 0f c5 c2 05 pextrw eax,xmm2 |
293 ; CHECK-DAG: 66 0f c5 c3 07 pextrw eax,xmm3 | 293 ; CHECK-DAG: 66 0f c5 c3 07 pextrw eax,xmm3 |
OLD | NEW |