@@ -53,3 +53,58 @@ entry:
53
53
ret i32 %max.3
54
54
}
55
55
56
+ define i32 @test1 (ptr %p ) {
57
+ ; CHECK-LABEL: define i32 @test1(
58
+ ; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR0]] {
59
+ ; CHECK-NEXT: entry:
60
+ ; CHECK-NEXT: [[D_0:%.*]] = load i16, ptr [[P]], align 4
61
+ ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i16> <i16 0, i16 poison, i16 0, i16 0>, i16 [[D_0]], i32 1
62
+ ; CHECK-NEXT: [[TMP1:%.*]] = or <4 x i16> [[TMP0]], zeroinitializer
63
+ ; CHECK-NEXT: [[TMP2:%.*]] = and <4 x i16> [[TMP1]], <i16 -16383, i16 -1, i16 -1, i16 -1>
64
+ ; CHECK-NEXT: [[TMP3:%.*]] = zext <4 x i16> [[TMP0]] to <4 x i32>
65
+ ; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x i32> <i32 49153, i32 65535, i32 65535, i32 65535>, <4 x i32> [[TMP3]], <4 x i32> <i32 0, i32 5, i32 2, i32 3>
66
+ ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq <4 x i32> [[TMP4]], <i32 -16383, i32 65535, i32 65535, i32 65535>
67
+ ; CHECK-NEXT: [[TMP6:%.*]] = select <4 x i1> [[TMP5]], <4 x i16> [[TMP2]], <4 x i16> <i16 3, i16 4, i16 2, i16 1>
68
+ ; CHECK-NEXT: [[TMP7:%.*]] = zext <4 x i16> [[TMP6]] to <4 x i32>
69
+ ; CHECK-NEXT: [[TMP8:%.*]] = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> [[TMP7]])
70
+ ; CHECK-NEXT: ret i32 [[TMP8]]
71
+ ;
72
+ entry:
73
+ %d.0 = load i16 , ptr %p , align 4
74
+ %zext.d.0 = zext i16 %d.0 to i32
75
+ %zero.0 = zext i16 0 to i32
76
+ %zero.1 = zext i16 0 to i32
77
+ %zero.2 = zext i16 0 to i32
78
+
79
+ %or.d.0 = or i32 %zext.d.0 , 0
80
+ %or.zero.0 = or i32 %zero.0 , 0
81
+ %or.zero.1 = or i32 %zero.1 , 0
82
+ %or.zero.2 = or i32 %zero.2 , 0
83
+
84
+ %szero.00 = sext i16 65535 to i32
85
+ %szero.0 = sext i16 -16383 to i32
86
+ %uzero.1 = zext i16 65535 to i32
87
+ %szero.2 = sext i16 65535 to i32
88
+
89
+ %zero.d.0 = and i32 %or.d.0 , %szero.00
90
+ %and.zero.0 = and i32 %or.zero.0 , %szero.0
91
+ %and.zero.1 = and i32 %or.zero.1 , %uzero.1
92
+ %and.zero.2 = and i32 %or.zero.2 , %szero.2
93
+
94
+ %d.0.gt.0 = icmp eq i32 %zext.d.0 , 65535
95
+ %false.0 = icmp eq i32 %szero.0 , -16383
96
+ %false.1 = icmp eq i32 %uzero.1 , 65535
97
+ %false.2 = icmp eq i32 %szero.2 , 65535
98
+
99
+ %select.0.2 = select i1 %d.0.gt.0 , i32 %zero.d.0 , i32 4
100
+ %select.1.0 = select i1 %false.0 , i32 %and.zero.0 , i32 3
101
+ %select.2.0 = select i1 %false.1 , i32 %and.zero.1 , i32 2
102
+ %select.3.0 = select i1 %false.2 , i32 %and.zero.2 , i32 1
103
+
104
+ %max.0 = add i32 %select.0.2 , %select.1.0
105
+ %max.1 = add i32 %max.0 , %select.2.0
106
+ %max.2 = add i32 %max.1 , %select.3.0
107
+
108
+ ret i32 %max.2
109
+ }
110
+
0 commit comments