| 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 |