@@ -21,7 +21,7 @@ define i32 @p(i32 %x, i32 %y, i32 %m) {
21
21
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], [[M:%.*]]
22
22
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[M]], -1
23
23
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[NEG]], [[Y:%.*]]
24
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND]], [[AND1]]
24
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND]], [[AND1]]
25
25
; CHECK-NEXT: ret i32 [[RET]]
26
26
;
27
27
%and = and i32 %x , %m
@@ -36,7 +36,7 @@ define <2 x i32> @p_splatvec(<2 x i32> %x, <2 x i32> %y, <2 x i32> %m) {
36
36
; CHECK-NEXT: [[AND:%.*]] = and <2 x i32> [[X:%.*]], [[M:%.*]]
37
37
; CHECK-NEXT: [[NEG:%.*]] = xor <2 x i32> [[M]], <i32 -1, i32 -1>
38
38
; CHECK-NEXT: [[AND1:%.*]] = and <2 x i32> [[NEG]], [[Y:%.*]]
39
- ; CHECK-NEXT: [[RET:%.*]] = or <2 x i32> [[AND]], [[AND1]]
39
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint <2 x i32> [[AND]], [[AND1]]
40
40
; CHECK-NEXT: ret <2 x i32> [[RET]]
41
41
;
42
42
%and = and <2 x i32 > %x , %m
@@ -51,7 +51,7 @@ define <3 x i32> @p_vec_undef(<3 x i32> %x, <3 x i32> %y, <3 x i32> %m) {
51
51
; CHECK-NEXT: [[AND:%.*]] = and <3 x i32> [[X:%.*]], [[M:%.*]]
52
52
; CHECK-NEXT: [[NEG:%.*]] = xor <3 x i32> [[M]], <i32 -1, i32 undef, i32 -1>
53
53
; CHECK-NEXT: [[AND1:%.*]] = and <3 x i32> [[NEG]], [[Y:%.*]]
54
- ; CHECK-NEXT: [[RET:%.*]] = or <3 x i32> [[AND]], [[AND1]]
54
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint <3 x i32> [[AND]], [[AND1]]
55
55
; CHECK-NEXT: ret <3 x i32> [[RET]]
56
56
;
57
57
%and = and <3 x i32 > %x , %m
@@ -69,7 +69,7 @@ define i32 @p_constmask(i32 %x, i32 %y) {
69
69
; CHECK-LABEL: @p_constmask(
70
70
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 65280
71
71
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[Y:%.*]], -65281
72
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND]], [[AND1]]
72
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND]], [[AND1]]
73
73
; CHECK-NEXT: ret i32 [[RET]]
74
74
;
75
75
%and = and i32 %x , 65280
@@ -82,7 +82,7 @@ define <2 x i32> @p_constmask_splatvec(<2 x i32> %x, <2 x i32> %y) {
82
82
; CHECK-LABEL: @p_constmask_splatvec(
83
83
; CHECK-NEXT: [[AND:%.*]] = and <2 x i32> [[X:%.*]], <i32 65280, i32 65280>
84
84
; CHECK-NEXT: [[AND1:%.*]] = and <2 x i32> [[Y:%.*]], <i32 -65281, i32 -65281>
85
- ; CHECK-NEXT: [[RET:%.*]] = or <2 x i32> [[AND]], [[AND1]]
85
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint <2 x i32> [[AND]], [[AND1]]
86
86
; CHECK-NEXT: ret <2 x i32> [[RET]]
87
87
;
88
88
%and = and <2 x i32 > %x , <i32 65280 , i32 65280 >
@@ -125,7 +125,7 @@ define i32 @p_constmask2(i32 %x, i32 %y) {
125
125
; CHECK-LABEL: @p_constmask2(
126
126
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 61440
127
127
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[Y:%.*]], -65281
128
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND]], [[AND1]]
128
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND]], [[AND1]]
129
129
; CHECK-NEXT: ret i32 [[RET]]
130
130
;
131
131
%and = and i32 %x , 61440
@@ -138,7 +138,7 @@ define <2 x i32> @p_constmask2_splatvec(<2 x i32> %x, <2 x i32> %y) {
138
138
; CHECK-LABEL: @p_constmask2_splatvec(
139
139
; CHECK-NEXT: [[AND:%.*]] = and <2 x i32> [[X:%.*]], <i32 61440, i32 61440>
140
140
; CHECK-NEXT: [[AND1:%.*]] = and <2 x i32> [[Y:%.*]], <i32 -65281, i32 -65281>
141
- ; CHECK-NEXT: [[RET:%.*]] = or <2 x i32> [[AND]], [[AND1]]
141
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint <2 x i32> [[AND]], [[AND1]]
142
142
; CHECK-NEXT: ret <2 x i32> [[RET]]
143
143
;
144
144
%and = and <2 x i32 > %x , <i32 61440 , i32 61440 >
@@ -185,7 +185,7 @@ define i32 @p_commutative0(i32 %x, i32 %y, i32 %m) {
185
185
; CHECK-NEXT: [[AND:%.*]] = and i32 [[M:%.*]], [[X:%.*]]
186
186
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[M]], -1
187
187
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[NEG]], [[Y:%.*]]
188
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND]], [[AND1]]
188
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND]], [[AND1]]
189
189
; CHECK-NEXT: ret i32 [[RET]]
190
190
;
191
191
%and = and i32 %m , %x ; swapped order
@@ -201,7 +201,7 @@ define i32 @p_commutative1(i32 %x, i32 %m) {
201
201
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], [[M:%.*]]
202
202
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[M]], -1
203
203
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[Y]], [[NEG]]
204
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND]], [[AND1]]
204
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND]], [[AND1]]
205
205
; CHECK-NEXT: ret i32 [[RET]]
206
206
;
207
207
%y = call i32 @gen32 ()
@@ -217,7 +217,7 @@ define i32 @p_commutative2(i32 %x, i32 %y, i32 %m) {
217
217
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], [[M:%.*]]
218
218
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[M]], -1
219
219
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[NEG]], [[Y:%.*]]
220
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND1]], [[AND]]
220
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND1]], [[AND]]
221
221
; CHECK-NEXT: ret i32 [[RET]]
222
222
;
223
223
%and = and i32 %x , %m
@@ -233,7 +233,7 @@ define i32 @p_commutative3(i32 %x, i32 %m) {
233
233
; CHECK-NEXT: [[AND:%.*]] = and i32 [[M:%.*]], [[X:%.*]]
234
234
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[M]], -1
235
235
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[Y]], [[NEG]]
236
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND]], [[AND1]]
236
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND]], [[AND1]]
237
237
; CHECK-NEXT: ret i32 [[RET]]
238
238
;
239
239
%y = call i32 @gen32 ()
@@ -249,7 +249,7 @@ define i32 @p_commutative4(i32 %x, i32 %y, i32 %m) {
249
249
; CHECK-NEXT: [[AND:%.*]] = and i32 [[M:%.*]], [[X:%.*]]
250
250
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[M]], -1
251
251
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[NEG]], [[Y:%.*]]
252
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND1]], [[AND]]
252
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND1]], [[AND]]
253
253
; CHECK-NEXT: ret i32 [[RET]]
254
254
;
255
255
%and = and i32 %m , %x ; swapped order
@@ -265,7 +265,7 @@ define i32 @p_commutative5(i32 %x, i32 %m) {
265
265
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], [[M:%.*]]
266
266
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[M]], -1
267
267
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[Y]], [[NEG]]
268
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND1]], [[AND]]
268
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND1]], [[AND]]
269
269
; CHECK-NEXT: ret i32 [[RET]]
270
270
;
271
271
%y = call i32 @gen32 ()
@@ -282,7 +282,7 @@ define i32 @p_commutative6(i32 %x, i32 %m) {
282
282
; CHECK-NEXT: [[AND:%.*]] = and i32 [[M:%.*]], [[X:%.*]]
283
283
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[M]], -1
284
284
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[Y]], [[NEG]]
285
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND1]], [[AND]]
285
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND1]], [[AND]]
286
286
; CHECK-NEXT: ret i32 [[RET]]
287
287
;
288
288
%y = call i32 @gen32 ()
@@ -297,7 +297,7 @@ define i32 @p_constmask_commutative(i32 %x, i32 %y) {
297
297
; CHECK-LABEL: @p_constmask_commutative(
298
298
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 65280
299
299
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[Y:%.*]], -65281
300
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND1]], [[AND]]
300
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND1]], [[AND]]
301
301
; CHECK-NEXT: ret i32 [[RET]]
302
302
;
303
303
%and = and i32 %x , 65280
@@ -319,7 +319,7 @@ define i32 @n0_oneuse(i32 %x, i32 %y, i32 %m) {
319
319
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], [[M:%.*]]
320
320
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[M]], -1
321
321
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[NEG]], [[Y:%.*]]
322
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND]], [[AND1]]
322
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND]], [[AND1]]
323
323
; CHECK-NEXT: call void @use32(i32 [[AND]])
324
324
; CHECK-NEXT: call void @use32(i32 [[NEG]])
325
325
; CHECK-NEXT: call void @use32(i32 [[AND1]])
@@ -339,7 +339,7 @@ define i32 @n0_constmask_oneuse(i32 %x, i32 %y) {
339
339
; CHECK-LABEL: @n0_constmask_oneuse(
340
340
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 65280
341
341
; CHECK-NEXT: [[AND1:%.*]] = and i32 [[Y:%.*]], -65281
342
- ; CHECK-NEXT: [[RET:%.*]] = or i32 [[AND]], [[AND1]]
342
+ ; CHECK-NEXT: [[RET:%.*]] = or disjoint i32 [[AND]], [[AND1]]
343
343
; CHECK-NEXT: call void @use32(i32 [[AND]])
344
344
; CHECK-NEXT: call void @use32(i32 [[AND1]])
345
345
; CHECK-NEXT: ret i32 [[RET]]
0 commit comments