|
4 | 4 | ; RUN: opt < %s -passes=vector-combine -S -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=CHECK,AVX512
|
5 | 5 |
|
6 | 6 | define <8 x i16> @src_v4tov8_i16(<4 x i16> %x, <4 x i16> %y, <4 x i16> %z) {
|
7 |
| -; CHECK-LABEL: define <8 x i16> @src_v4tov8_i16( |
8 |
| -; CHECK-SAME: <4 x i16> [[X:%.*]], <4 x i16> [[Y:%.*]], <4 x i16> [[Z:%.*]]) #[[ATTR0:[0-9]+]] { |
9 |
| -; CHECK-NEXT: [[CMP_XY:%.*]] = icmp slt <4 x i16> [[X]], [[Y]] |
10 |
| -; CHECK-NEXT: [[CMP_YZ:%.*]] = icmp slt <4 x i16> [[Y]], [[Z]] |
11 |
| -; CHECK-NEXT: [[SELECT_XZ:%.*]] = select <4 x i1> [[CMP_XY]], <4 x i16> [[X]], <4 x i16> [[Z]] |
12 |
| -; CHECK-NEXT: [[SELECT_YX:%.*]] = select <4 x i1> [[CMP_YZ]], <4 x i16> [[Y]], <4 x i16> [[X]] |
13 |
| -; CHECK-NEXT: [[RES:%.*]] = shufflevector <4 x i16> [[SELECT_XZ]], <4 x i16> [[SELECT_YX]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
14 |
| -; CHECK-NEXT: ret <8 x i16> [[RES]] |
| 7 | +; SSE-LABEL: define <8 x i16> @src_v4tov8_i16( |
| 8 | +; SSE-SAME: <4 x i16> [[X:%.*]], <4 x i16> [[Y:%.*]], <4 x i16> [[Z:%.*]]) #[[ATTR0:[0-9]+]] { |
| 9 | +; SSE-NEXT: [[CMP_XY:%.*]] = icmp slt <4 x i16> [[X]], [[Y]] |
| 10 | +; SSE-NEXT: [[CMP_YZ:%.*]] = icmp slt <4 x i16> [[Y]], [[Z]] |
| 11 | +; SSE-NEXT: [[TMP1:%.*]] = shufflevector <4 x i1> [[CMP_XY]], <4 x i1> [[CMP_YZ]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 12 | +; SSE-NEXT: [[TMP2:%.*]] = shufflevector <4 x i16> [[X]], <4 x i16> [[Y]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 13 | +; SSE-NEXT: [[TMP3:%.*]] = shufflevector <4 x i16> [[Z]], <4 x i16> [[X]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 14 | +; SSE-NEXT: [[RES:%.*]] = select <8 x i1> [[TMP1]], <8 x i16> [[TMP2]], <8 x i16> [[TMP3]] |
| 15 | +; SSE-NEXT: ret <8 x i16> [[RES]] |
| 16 | +; |
| 17 | +; AVX2-LABEL: define <8 x i16> @src_v4tov8_i16( |
| 18 | +; AVX2-SAME: <4 x i16> [[X:%.*]], <4 x i16> [[Y:%.*]], <4 x i16> [[Z:%.*]]) #[[ATTR0:[0-9]+]] { |
| 19 | +; AVX2-NEXT: [[CMP_XY:%.*]] = icmp slt <4 x i16> [[X]], [[Y]] |
| 20 | +; AVX2-NEXT: [[CMP_YZ:%.*]] = icmp slt <4 x i16> [[Y]], [[Z]] |
| 21 | +; AVX2-NEXT: [[TMP1:%.*]] = shufflevector <4 x i1> [[CMP_XY]], <4 x i1> [[CMP_YZ]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 22 | +; AVX2-NEXT: [[TMP2:%.*]] = shufflevector <4 x i16> [[X]], <4 x i16> [[Y]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 23 | +; AVX2-NEXT: [[TMP3:%.*]] = shufflevector <4 x i16> [[Z]], <4 x i16> [[X]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 24 | +; AVX2-NEXT: [[RES:%.*]] = select <8 x i1> [[TMP1]], <8 x i16> [[TMP2]], <8 x i16> [[TMP3]] |
| 25 | +; AVX2-NEXT: ret <8 x i16> [[RES]] |
| 26 | +; |
| 27 | +; AVX512-LABEL: define <8 x i16> @src_v4tov8_i16( |
| 28 | +; AVX512-SAME: <4 x i16> [[X:%.*]], <4 x i16> [[Y:%.*]], <4 x i16> [[Z:%.*]]) #[[ATTR0:[0-9]+]] { |
| 29 | +; AVX512-NEXT: [[CMP_XY:%.*]] = icmp slt <4 x i16> [[X]], [[Y]] |
| 30 | +; AVX512-NEXT: [[CMP_YZ:%.*]] = icmp slt <4 x i16> [[Y]], [[Z]] |
| 31 | +; AVX512-NEXT: [[SELECT_XZ:%.*]] = select <4 x i1> [[CMP_XY]], <4 x i16> [[X]], <4 x i16> [[Z]] |
| 32 | +; AVX512-NEXT: [[SELECT_YX:%.*]] = select <4 x i1> [[CMP_YZ]], <4 x i16> [[Y]], <4 x i16> [[X]] |
| 33 | +; AVX512-NEXT: [[RES:%.*]] = shufflevector <4 x i16> [[SELECT_XZ]], <4 x i16> [[SELECT_YX]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 34 | +; AVX512-NEXT: ret <8 x i16> [[RES]] |
15 | 35 | ;
|
16 | 36 | %cmp.xy = icmp slt <4 x i16> %x, %y
|
17 | 37 | %cmp.yz = icmp slt <4 x i16> %y, %z
|
@@ -173,7 +193,7 @@ define <16 x i32> @src_v8tov16_i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %z) {
|
173 | 193 |
|
174 | 194 | define <32 x i32> @src_v16tov32_i32(<16 x i32> %x, <16 x i32> %y, <16 x i32> %z) {
|
175 | 195 | ; CHECK-LABEL: define <32 x i32> @src_v16tov32_i32(
|
176 |
| -; CHECK-SAME: <16 x i32> [[X:%.*]], <16 x i32> [[Y:%.*]], <16 x i32> [[Z:%.*]]) #[[ATTR0]] { |
| 196 | +; CHECK-SAME: <16 x i32> [[X:%.*]], <16 x i32> [[Y:%.*]], <16 x i32> [[Z:%.*]]) #[[ATTR0:[0-9]+]] { |
177 | 197 | ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <16 x i32> [[X]], <16 x i32> [[Y]], <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
|
178 | 198 | ; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <16 x i32> [[Y]], <16 x i32> [[Z]], <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
|
179 | 199 | ; CHECK-NEXT: [[TMP3:%.*]] = icmp slt <32 x i32> [[TMP1]], [[TMP2]]
|
|
0 commit comments