@@ -6,7 +6,8 @@ declare void @llvm.assume(i1)
6
6
7
7
define i1 @mul_unkV_oddC_eq (i32 %v ) {
8
8
; CHECK-LABEL: @mul_unkV_oddC_eq(
9
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[V:%.*]], 0
9
+ ; CHECK-NEXT: [[MUL:%.*]] = mul i32 [[V:%.*]], 3
10
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[MUL]], 0
10
11
; CHECK-NEXT: ret i1 [[CMP]]
11
12
;
12
13
%mul = mul i32 %v , 3
@@ -27,7 +28,8 @@ define i1 @mul_unkV_oddC_eq_nonzero(i32 %v) {
27
28
28
29
define <2 x i1 > @mul_unkV_oddC_ne_vec (<2 x i64 > %v ) {
29
30
; CHECK-LABEL: @mul_unkV_oddC_ne_vec(
30
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i64> [[V:%.*]], zeroinitializer
31
+ ; CHECK-NEXT: [[MUL:%.*]] = mul <2 x i64> [[V:%.*]], <i64 3, i64 3>
32
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i64> [[MUL]], zeroinitializer
31
33
; CHECK-NEXT: ret <2 x i1> [[CMP]]
32
34
;
33
35
%mul = mul <2 x i64 > %v , <i64 3 , i64 3 >
@@ -70,7 +72,7 @@ define i1 @mul_unkV_oddC_sge(i8 %v) {
70
72
define i1 @mul_reused_unkV_oddC_ne (i64 %v ) {
71
73
; CHECK-LABEL: @mul_reused_unkV_oddC_ne(
72
74
; CHECK-NEXT: [[MUL:%.*]] = mul i64 [[V:%.*]], 3
73
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[V ]], 0
75
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[MUL ]], 0
74
76
; CHECK-NEXT: call void @use64(i64 [[MUL]])
75
77
; CHECK-NEXT: ret i1 [[CMP]]
76
78
;
@@ -85,7 +87,8 @@ define i1 @mul_assumeoddV_unkV_eq(i16 %v, i16 %v2) {
85
87
; CHECK-NEXT: [[LB:%.*]] = and i16 [[V2:%.*]], 1
86
88
; CHECK-NEXT: [[ODD:%.*]] = icmp ne i16 [[LB]], 0
87
89
; CHECK-NEXT: call void @llvm.assume(i1 [[ODD]])
88
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[V:%.*]], 0
90
+ ; CHECK-NEXT: [[MUL:%.*]] = mul i16 [[V:%.*]], [[V2]]
91
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[MUL]], 0
89
92
; CHECK-NEXT: ret i1 [[CMP]]
90
93
;
91
94
%lb = and i16 %v2 , 1
@@ -102,7 +105,7 @@ define i1 @mul_reusedassumeoddV_unkV_ne(i64 %v, i64 %v2) {
102
105
; CHECK-NEXT: [[ODD:%.*]] = icmp ne i64 [[LB]], 0
103
106
; CHECK-NEXT: call void @llvm.assume(i1 [[ODD]])
104
107
; CHECK-NEXT: [[MUL:%.*]] = mul i64 [[V]], [[V2:%.*]]
105
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[V2 ]], 0
108
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[MUL ]], 0
106
109
; CHECK-NEXT: call void @use64(i64 [[MUL]])
107
110
; CHECK-NEXT: ret i1 [[CMP]]
108
111
;
@@ -117,7 +120,9 @@ define i1 @mul_reusedassumeoddV_unkV_ne(i64 %v, i64 %v2) {
117
120
118
121
define <2 x i1 > @mul_setoddV_unkV_ne (<2 x i32 > %v1 , <2 x i32 > %v2 ) {
119
122
; CHECK-LABEL: @mul_setoddV_unkV_ne(
120
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i32> [[V2:%.*]], zeroinitializer
123
+ ; CHECK-NEXT: [[V:%.*]] = or <2 x i32> [[V1:%.*]], <i32 1, i32 1>
124
+ ; CHECK-NEXT: [[MUL:%.*]] = mul <2 x i32> [[V]], [[V2:%.*]]
125
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i32> [[MUL]], zeroinitializer
121
126
; CHECK-NEXT: ret <2 x i1> [[CMP]]
122
127
;
123
128
%v = or <2 x i32 > %v1 , <i32 1 , i32 1 >
@@ -185,7 +190,8 @@ define i1 @mul_assumenzV_unkV_nsw_ne(i32 %v, i32 %v2) {
185
190
; CHECK-LABEL: @mul_assumenzV_unkV_nsw_ne(
186
191
; CHECK-NEXT: [[NZ:%.*]] = icmp ne i32 [[V:%.*]], 0
187
192
; CHECK-NEXT: call void @llvm.assume(i1 [[NZ]])
188
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[V2:%.*]], 0
193
+ ; CHECK-NEXT: [[MUL:%.*]] = mul nsw i32 [[V]], [[V2:%.*]]
194
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[MUL]], 0
189
195
; CHECK-NEXT: ret i1 [[CMP]]
190
196
;
191
197
%nz = icmp ne i32 %v , 0
@@ -223,7 +229,9 @@ define <2 x i1> @mul_unkV_unkV_nsw_nuw_ne(<2 x i16> %v, <2 x i16> %v2) {
223
229
224
230
define i1 @mul_setnzV_unkV_nuw_eq (i8 %v1 , i8 %v2 ) {
225
231
; CHECK-LABEL: @mul_setnzV_unkV_nuw_eq(
226
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[V2:%.*]], 0
232
+ ; CHECK-NEXT: [[V:%.*]] = or i8 [[V1:%.*]], 2
233
+ ; CHECK-NEXT: [[MUL:%.*]] = mul nuw i8 [[V]], [[V2:%.*]]
234
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[MUL]], 0
227
235
; CHECK-NEXT: ret i1 [[CMP]]
228
236
;
229
237
%v = or i8 %v1 , 2
@@ -237,7 +245,8 @@ define i1 @mul_brnzV_unkV_nuw_eq(i64 %v, i64 %v2) {
237
245
; CHECK-NEXT: [[NZ_NOT:%.*]] = icmp eq i64 [[V2:%.*]], 0
238
246
; CHECK-NEXT: br i1 [[NZ_NOT]], label [[FALSE:%.*]], label [[TRUE:%.*]]
239
247
; CHECK: true:
240
- ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[V:%.*]], 0
248
+ ; CHECK-NEXT: [[MUL:%.*]] = mul nuw i64 [[V:%.*]], [[V2]]
249
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[MUL]], 0
241
250
; CHECK-NEXT: ret i1 [[CMP]]
242
251
; CHECK: false:
243
252
; CHECK-NEXT: call void @use64(i64 [[V]])
0 commit comments