|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
|
2 |
| -; RUN: opt -S --passes=slp-vectorizer -mtriple=aarch64 -slp-threshold=-20 -slp-vectorize-hor=0 < %s | FileCheck %s |
| 2 | +; RUN: opt -S --passes=slp-vectorizer -mtriple=aarch64 -slp-threshold=-20 -slp-vectorize-hor=0 < %s | FileCheck --check-prefix=DEFAULT %s |
| 3 | +; RUN: opt -S --passes=slp-vectorizer -mtriple=aarch64 -slp-threshold=-20 -slp-vectorize-hor=0 -mcpu=apple-m1 < %s | FileCheck --check-prefix=APPLE-M1 %s |
3 | 4 |
|
4 | 5 | define i16 @foo(i16 %in1, i16 %in2) {
|
5 | 6 | ; CHECK-LABEL: define i16 @foo(
|
@@ -29,6 +30,60 @@ define i16 @foo(i16 %in1, i16 %in2) {
|
29 | 30 | ; CHECK-NEXT: [[ADD3:%.*]] = add nuw nsw i16 [[ADD2]], [[ZEXT3_2]]
|
30 | 31 | ; CHECK-NEXT: ret i16 [[ADD3]]
|
31 | 32 | ;
|
| 33 | +; DEFAULT-LABEL: define i16 @foo( |
| 34 | +; DEFAULT-SAME: i16 [[IN1:%.*]], i16 [[IN2:%.*]]) { |
| 35 | +; DEFAULT-NEXT: entry: |
| 36 | +; DEFAULT-NEXT: [[TMP0:%.*]] = insertelement <2 x i16> poison, i16 [[IN1]], i32 0 |
| 37 | +; DEFAULT-NEXT: [[TMP1:%.*]] = shufflevector <2 x i16> [[TMP0]], <2 x i16> poison, <2 x i32> zeroinitializer |
| 38 | +; DEFAULT-NEXT: [[TMP2:%.*]] = zext <2 x i16> [[TMP1]] to <2 x i64> |
| 39 | +; DEFAULT-NEXT: [[TMP3:%.*]] = insertelement <2 x i16> poison, i16 [[IN2]], i32 0 |
| 40 | +; DEFAULT-NEXT: [[TMP4:%.*]] = shufflevector <2 x i16> [[TMP3]], <2 x i16> poison, <2 x i32> zeroinitializer |
| 41 | +; DEFAULT-NEXT: [[TMP5:%.*]] = zext <2 x i16> [[TMP4]] to <2 x i64> |
| 42 | +; DEFAULT-NEXT: [[TMP6:%.*]] = mul nuw nsw <2 x i64> [[TMP5]], [[TMP2]] |
| 43 | +; DEFAULT-NEXT: [[TMP7:%.*]] = and <2 x i64> [[TMP6]], splat (i64 65535) |
| 44 | +; DEFAULT-NEXT: [[TMP8:%.*]] = icmp ne <2 x i64> [[TMP7]], splat (i64 65533) |
| 45 | +; DEFAULT-NEXT: [[TMP9:%.*]] = extractelement <2 x i1> [[TMP8]], i32 1 |
| 46 | +; DEFAULT-NEXT: [[ZEXT3_1:%.*]] = zext i1 [[TMP9]] to i16 |
| 47 | +; DEFAULT-NEXT: [[TMP10:%.*]] = extractelement <2 x i64> [[TMP6]], i32 1 |
| 48 | +; DEFAULT-NEXT: [[CMP2_1:%.*]] = icmp ne i64 [[TMP10]], 196605 |
| 49 | +; DEFAULT-NEXT: [[ZEXT4_1:%.*]] = zext i1 [[CMP2_1]] to i16 |
| 50 | +; DEFAULT-NEXT: [[ADD1:%.*]] = add nuw nsw i16 [[ZEXT3_1]], [[ZEXT4_1]] |
| 51 | +; DEFAULT-NEXT: [[TMP11:%.*]] = extractelement <2 x i1> [[TMP8]], i32 0 |
| 52 | +; DEFAULT-NEXT: [[ZEXT3_2:%.*]] = zext i1 [[TMP11]] to i16 |
| 53 | +; DEFAULT-NEXT: [[TMP12:%.*]] = extractelement <2 x i64> [[TMP6]], i32 0 |
| 54 | +; DEFAULT-NEXT: [[CMP2_2:%.*]] = icmp ne i64 [[TMP12]], 196605 |
| 55 | +; DEFAULT-NEXT: [[ZEXT4_2:%.*]] = zext i1 [[CMP2_2]] to i16 |
| 56 | +; DEFAULT-NEXT: [[ADD2:%.*]] = add nuw nsw i16 [[ADD1]], [[ZEXT4_2]] |
| 57 | +; DEFAULT-NEXT: [[ADD3:%.*]] = add nuw nsw i16 [[ADD2]], [[ZEXT3_2]] |
| 58 | +; DEFAULT-NEXT: ret i16 [[ADD3]] |
| 59 | +; |
| 60 | +; APPLE-M1-LABEL: define i16 @foo( |
| 61 | +; APPLE-M1-SAME: i16 [[IN1:%.*]], i16 [[IN2:%.*]]) #[[ATTR0:[0-9]+]] { |
| 62 | +; APPLE-M1-NEXT: entry: |
| 63 | +; APPLE-M1-NEXT: [[TMP0:%.*]] = insertelement <2 x i16> poison, i16 [[IN1]], i32 0 |
| 64 | +; APPLE-M1-NEXT: [[TMP1:%.*]] = shufflevector <2 x i16> [[TMP0]], <2 x i16> poison, <2 x i32> zeroinitializer |
| 65 | +; APPLE-M1-NEXT: [[TMP2:%.*]] = zext <2 x i16> [[TMP1]] to <2 x i64> |
| 66 | +; APPLE-M1-NEXT: [[TMP3:%.*]] = insertelement <2 x i16> poison, i16 [[IN2]], i32 0 |
| 67 | +; APPLE-M1-NEXT: [[TMP4:%.*]] = shufflevector <2 x i16> [[TMP3]], <2 x i16> poison, <2 x i32> zeroinitializer |
| 68 | +; APPLE-M1-NEXT: [[TMP5:%.*]] = zext <2 x i16> [[TMP4]] to <2 x i64> |
| 69 | +; APPLE-M1-NEXT: [[TMP6:%.*]] = mul nuw nsw <2 x i64> [[TMP5]], [[TMP2]] |
| 70 | +; APPLE-M1-NEXT: [[TMP7:%.*]] = and <2 x i64> [[TMP6]], splat (i64 65535) |
| 71 | +; APPLE-M1-NEXT: [[TMP8:%.*]] = icmp ne <2 x i64> [[TMP7]], splat (i64 65533) |
| 72 | +; APPLE-M1-NEXT: [[TMP9:%.*]] = extractelement <2 x i1> [[TMP8]], i32 1 |
| 73 | +; APPLE-M1-NEXT: [[ZEXT3_1:%.*]] = zext i1 [[TMP9]] to i16 |
| 74 | +; APPLE-M1-NEXT: [[TMP10:%.*]] = extractelement <2 x i64> [[TMP6]], i32 1 |
| 75 | +; APPLE-M1-NEXT: [[CMP2_1:%.*]] = icmp ne i64 [[TMP10]], 196605 |
| 76 | +; APPLE-M1-NEXT: [[ZEXT4_1:%.*]] = zext i1 [[CMP2_1]] to i16 |
| 77 | +; APPLE-M1-NEXT: [[ADD1:%.*]] = add nuw nsw i16 [[ZEXT3_1]], [[ZEXT4_1]] |
| 78 | +; APPLE-M1-NEXT: [[TMP11:%.*]] = extractelement <2 x i1> [[TMP8]], i32 0 |
| 79 | +; APPLE-M1-NEXT: [[ZEXT3_2:%.*]] = zext i1 [[TMP11]] to i16 |
| 80 | +; APPLE-M1-NEXT: [[TMP12:%.*]] = extractelement <2 x i64> [[TMP6]], i32 0 |
| 81 | +; APPLE-M1-NEXT: [[CMP2_2:%.*]] = icmp ne i64 [[TMP12]], 196605 |
| 82 | +; APPLE-M1-NEXT: [[ZEXT4_2:%.*]] = zext i1 [[CMP2_2]] to i16 |
| 83 | +; APPLE-M1-NEXT: [[ADD2:%.*]] = add nuw nsw i16 [[ADD1]], [[ZEXT4_2]] |
| 84 | +; APPLE-M1-NEXT: [[ADD3:%.*]] = add nuw nsw i16 [[ADD2]], [[ZEXT3_2]] |
| 85 | +; APPLE-M1-NEXT: ret i16 [[ADD3]] |
| 86 | +; |
32 | 87 | entry:
|
33 | 88 | %zext1_1 = zext i16 %in1 to i64
|
34 | 89 | %zext2_1 = zext i16 %in2 to i64
|
|
0 commit comments