|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
2 |
| -; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=SSE |
3 |
| -; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=SLM |
| 2 | +; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=SSE,SSE2 |
| 3 | +; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=SSE,SLM |
4 | 4 | ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX,AVX1
|
5 | 5 | ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX,AVX2
|
6 | 6 | ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=knl -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX512
|
@@ -61,41 +61,6 @@ define void @add_v8i64() {
|
61 | 61 | ; SSE-NEXT: store i64 [[R7]], ptr getelementptr inbounds ([8 x i64], ptr @c64, i32 0, i64 7), align 8
|
62 | 62 | ; SSE-NEXT: ret void
|
63 | 63 | ;
|
64 |
| -; SLM-LABEL: @add_v8i64( |
65 |
| -; SLM-NEXT: [[A0:%.*]] = load i64, ptr @a64, align 8 |
66 |
| -; SLM-NEXT: [[A1:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 1), align 8 |
67 |
| -; SLM-NEXT: [[A2:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 2), align 8 |
68 |
| -; SLM-NEXT: [[A3:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 3), align 8 |
69 |
| -; SLM-NEXT: [[A4:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 4), align 8 |
70 |
| -; SLM-NEXT: [[A5:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 5), align 8 |
71 |
| -; SLM-NEXT: [[A6:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 6), align 8 |
72 |
| -; SLM-NEXT: [[A7:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @a64, i32 0, i64 7), align 8 |
73 |
| -; SLM-NEXT: [[B0:%.*]] = load i64, ptr @b64, align 8 |
74 |
| -; SLM-NEXT: [[B1:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 1), align 8 |
75 |
| -; SLM-NEXT: [[B2:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 2), align 8 |
76 |
| -; SLM-NEXT: [[B3:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 3), align 8 |
77 |
| -; SLM-NEXT: [[B4:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 4), align 8 |
78 |
| -; SLM-NEXT: [[B5:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 5), align 8 |
79 |
| -; SLM-NEXT: [[B6:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 6), align 8 |
80 |
| -; SLM-NEXT: [[B7:%.*]] = load i64, ptr getelementptr inbounds ([8 x i64], ptr @b64, i32 0, i64 7), align 8 |
81 |
| -; SLM-NEXT: [[R0:%.*]] = call i64 @llvm.sadd.sat.i64(i64 [[A0]], i64 [[B0]]) |
82 |
| -; SLM-NEXT: [[R1:%.*]] = call i64 @llvm.sadd.sat.i64(i64 [[A1]], i64 [[B1]]) |
83 |
| -; SLM-NEXT: [[R2:%.*]] = call i64 @llvm.sadd.sat.i64(i64 [[A2]], i64 [[B2]]) |
84 |
| -; SLM-NEXT: [[R3:%.*]] = call i64 @llvm.sadd.sat.i64(i64 [[A3]], i64 [[B3]]) |
85 |
| -; SLM-NEXT: [[R4:%.*]] = call i64 @llvm.sadd.sat.i64(i64 [[A4]], i64 [[B4]]) |
86 |
| -; SLM-NEXT: [[R5:%.*]] = call i64 @llvm.sadd.sat.i64(i64 [[A5]], i64 [[B5]]) |
87 |
| -; SLM-NEXT: [[R6:%.*]] = call i64 @llvm.sadd.sat.i64(i64 [[A6]], i64 [[B6]]) |
88 |
| -; SLM-NEXT: [[R7:%.*]] = call i64 @llvm.sadd.sat.i64(i64 [[A7]], i64 [[B7]]) |
89 |
| -; SLM-NEXT: store i64 [[R0]], ptr @c64, align 8 |
90 |
| -; SLM-NEXT: store i64 [[R1]], ptr getelementptr inbounds ([8 x i64], ptr @c64, i32 0, i64 1), align 8 |
91 |
| -; SLM-NEXT: store i64 [[R2]], ptr getelementptr inbounds ([8 x i64], ptr @c64, i32 0, i64 2), align 8 |
92 |
| -; SLM-NEXT: store i64 [[R3]], ptr getelementptr inbounds ([8 x i64], ptr @c64, i32 0, i64 3), align 8 |
93 |
| -; SLM-NEXT: store i64 [[R4]], ptr getelementptr inbounds ([8 x i64], ptr @c64, i32 0, i64 4), align 8 |
94 |
| -; SLM-NEXT: store i64 [[R5]], ptr getelementptr inbounds ([8 x i64], ptr @c64, i32 0, i64 5), align 8 |
95 |
| -; SLM-NEXT: store i64 [[R6]], ptr getelementptr inbounds ([8 x i64], ptr @c64, i32 0, i64 6), align 8 |
96 |
| -; SLM-NEXT: store i64 [[R7]], ptr getelementptr inbounds ([8 x i64], ptr @c64, i32 0, i64 7), align 8 |
97 |
| -; SLM-NEXT: ret void |
98 |
| -; |
99 | 64 | ; AVX1-LABEL: @add_v8i64(
|
100 | 65 | ; AVX1-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @a64, align 8
|
101 | 66 | ; AVX1-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @b64, align 8
|
@@ -198,25 +163,6 @@ define void @add_v16i32() {
|
198 | 163 | ; SSE-NEXT: store <4 x i32> [[TMP12]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4
|
199 | 164 | ; SSE-NEXT: ret void
|
200 | 165 | ;
|
201 |
| -; SLM-LABEL: @add_v16i32( |
202 |
| -; SLM-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @a32, align 4 |
203 |
| -; SLM-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr @b32, align 4 |
204 |
| -; SLM-NEXT: [[TMP3:%.*]] = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]]) |
205 |
| -; SLM-NEXT: store <4 x i32> [[TMP3]], ptr @c32, align 4 |
206 |
| -; SLM-NEXT: [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 4), align 4 |
207 |
| -; SLM-NEXT: [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 4), align 4 |
208 |
| -; SLM-NEXT: [[TMP6:%.*]] = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> [[TMP4]], <4 x i32> [[TMP5]]) |
209 |
| -; SLM-NEXT: store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 4), align 4 |
210 |
| -; SLM-NEXT: [[TMP7:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 8), align 4 |
211 |
| -; SLM-NEXT: [[TMP8:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 8), align 4 |
212 |
| -; SLM-NEXT: [[TMP9:%.*]] = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> [[TMP7]], <4 x i32> [[TMP8]]) |
213 |
| -; SLM-NEXT: store <4 x i32> [[TMP9]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 8), align 4 |
214 |
| -; SLM-NEXT: [[TMP10:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @a32, i32 0, i64 12), align 4 |
215 |
| -; SLM-NEXT: [[TMP11:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([16 x i32], ptr @b32, i32 0, i64 12), align 4 |
216 |
| -; SLM-NEXT: [[TMP12:%.*]] = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> [[TMP10]], <4 x i32> [[TMP11]]) |
217 |
| -; SLM-NEXT: store <4 x i32> [[TMP12]], ptr getelementptr inbounds ([16 x i32], ptr @c32, i32 0, i64 12), align 4 |
218 |
| -; SLM-NEXT: ret void |
219 |
| -; |
220 | 166 | ; AVX-LABEL: @add_v16i32(
|
221 | 167 | ; AVX-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @a32, align 4
|
222 | 168 | ; AVX-NEXT: [[TMP2:%.*]] = load <8 x i32>, ptr @b32, align 4
|
@@ -322,25 +268,6 @@ define void @add_v32i16() {
|
322 | 268 | ; SSE-NEXT: store <8 x i16> [[TMP12]], ptr getelementptr inbounds ([32 x i16], ptr @c16, i32 0, i64 24), align 2
|
323 | 269 | ; SSE-NEXT: ret void
|
324 | 270 | ;
|
325 |
| -; SLM-LABEL: @add_v32i16( |
326 |
| -; SLM-NEXT: [[TMP1:%.*]] = load <8 x i16>, ptr @a16, align 2 |
327 |
| -; SLM-NEXT: [[TMP2:%.*]] = load <8 x i16>, ptr @b16, align 2 |
328 |
| -; SLM-NEXT: [[TMP3:%.*]] = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]]) |
329 |
| -; SLM-NEXT: store <8 x i16> [[TMP3]], ptr @c16, align 2 |
330 |
| -; SLM-NEXT: [[TMP4:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 8), align 2 |
331 |
| -; SLM-NEXT: [[TMP5:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 8), align 2 |
332 |
| -; SLM-NEXT: [[TMP6:%.*]] = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> [[TMP4]], <8 x i16> [[TMP5]]) |
333 |
| -; SLM-NEXT: store <8 x i16> [[TMP6]], ptr getelementptr inbounds ([32 x i16], ptr @c16, i32 0, i64 8), align 2 |
334 |
| -; SLM-NEXT: [[TMP7:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 16), align 2 |
335 |
| -; SLM-NEXT: [[TMP8:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 16), align 2 |
336 |
| -; SLM-NEXT: [[TMP9:%.*]] = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> [[TMP7]], <8 x i16> [[TMP8]]) |
337 |
| -; SLM-NEXT: store <8 x i16> [[TMP9]], ptr getelementptr inbounds ([32 x i16], ptr @c16, i32 0, i64 16), align 2 |
338 |
| -; SLM-NEXT: [[TMP10:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @a16, i32 0, i64 24), align 2 |
339 |
| -; SLM-NEXT: [[TMP11:%.*]] = load <8 x i16>, ptr getelementptr inbounds ([32 x i16], ptr @b16, i32 0, i64 24), align 2 |
340 |
| -; SLM-NEXT: [[TMP12:%.*]] = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> [[TMP10]], <8 x i16> [[TMP11]]) |
341 |
| -; SLM-NEXT: store <8 x i16> [[TMP12]], ptr getelementptr inbounds ([32 x i16], ptr @c16, i32 0, i64 24), align 2 |
342 |
| -; SLM-NEXT: ret void |
343 |
| -; |
344 | 271 | ; AVX-LABEL: @add_v32i16(
|
345 | 272 | ; AVX-NEXT: [[TMP1:%.*]] = load <16 x i16>, ptr @a16, align 2
|
346 | 273 | ; AVX-NEXT: [[TMP2:%.*]] = load <16 x i16>, ptr @b16, align 2
|
@@ -510,25 +437,6 @@ define void @add_v64i8() {
|
510 | 437 | ; SSE-NEXT: store <16 x i8> [[TMP12]], ptr getelementptr inbounds ([64 x i8], ptr @c8, i32 0, i64 48), align 1
|
511 | 438 | ; SSE-NEXT: ret void
|
512 | 439 | ;
|
513 |
| -; SLM-LABEL: @add_v64i8( |
514 |
| -; SLM-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr @a8, align 1 |
515 |
| -; SLM-NEXT: [[TMP2:%.*]] = load <16 x i8>, ptr @b8, align 1 |
516 |
| -; SLM-NEXT: [[TMP3:%.*]] = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]]) |
517 |
| -; SLM-NEXT: store <16 x i8> [[TMP3]], ptr @c8, align 1 |
518 |
| -; SLM-NEXT: [[TMP4:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 16), align 1 |
519 |
| -; SLM-NEXT: [[TMP5:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 16), align 1 |
520 |
| -; SLM-NEXT: [[TMP6:%.*]] = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> [[TMP4]], <16 x i8> [[TMP5]]) |
521 |
| -; SLM-NEXT: store <16 x i8> [[TMP6]], ptr getelementptr inbounds ([64 x i8], ptr @c8, i32 0, i64 16), align 1 |
522 |
| -; SLM-NEXT: [[TMP7:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 32), align 1 |
523 |
| -; SLM-NEXT: [[TMP8:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 32), align 1 |
524 |
| -; SLM-NEXT: [[TMP9:%.*]] = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> [[TMP7]], <16 x i8> [[TMP8]]) |
525 |
| -; SLM-NEXT: store <16 x i8> [[TMP9]], ptr getelementptr inbounds ([64 x i8], ptr @c8, i32 0, i64 32), align 1 |
526 |
| -; SLM-NEXT: [[TMP10:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @a8, i32 0, i64 48), align 1 |
527 |
| -; SLM-NEXT: [[TMP11:%.*]] = load <16 x i8>, ptr getelementptr inbounds ([64 x i8], ptr @b8, i32 0, i64 48), align 1 |
528 |
| -; SLM-NEXT: [[TMP12:%.*]] = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> [[TMP10]], <16 x i8> [[TMP11]]) |
529 |
| -; SLM-NEXT: store <16 x i8> [[TMP12]], ptr getelementptr inbounds ([64 x i8], ptr @c8, i32 0, i64 48), align 1 |
530 |
| -; SLM-NEXT: ret void |
531 |
| -; |
532 | 440 | ; AVX-LABEL: @add_v64i8(
|
533 | 441 | ; AVX-NEXT: [[TMP1:%.*]] = load <32 x i8>, ptr @a8, align 1
|
534 | 442 | ; AVX-NEXT: [[TMP2:%.*]] = load <32 x i8>, ptr @b8, align 1
|
@@ -805,3 +713,6 @@ define void @add_v64i8() {
|
805 | 713 | store i8 %r63, ptr getelementptr inbounds ([64 x i8], ptr @c8, i32 0, i64 63), align 1
|
806 | 714 | ret void
|
807 | 715 | }
|
| 716 | +;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: |
| 717 | +; SLM: {{.*}} |
| 718 | +; SSE2: {{.*}} |
0 commit comments