66
66
define <16 x i1 > @v2i2v_2_16 (<2 x i1 > %vin ) {
67
67
; CHECK-LABEL: @v2i2v_2_16(
68
68
; CHECK-NEXT: entry:
69
- ; CHECK-NEXT: [[INT:%.*]] = call i32 @llvm.arm.mve.pred.v2i.v2i1(<2 x i1> [[VIN:%.*]]), !range [[RNG0:![0-9]+]]
69
+ ; CHECK-NEXT: [[INT:%.*]] = call noundef range( i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v2i1(<2 x i1> [[VIN:%.*]])
70
70
; CHECK-NEXT: [[VOUT:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[INT]])
71
71
; CHECK-NEXT: ret <16 x i1> [[VOUT]]
72
72
;
79
79
define <16 x i1 > @v2i2v_4_16 (<4 x i1 > %vin ) {
80
80
; CHECK-LABEL: @v2i2v_4_16(
81
81
; CHECK-NEXT: entry:
82
- ; CHECK-NEXT: [[INT:%.*]] = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]]), !range [[RNG0]]
82
+ ; CHECK-NEXT: [[INT:%.*]] = call noundef range( i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]])
83
83
; CHECK-NEXT: [[VOUT:%.*]] = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 [[INT]])
84
84
; CHECK-NEXT: ret <16 x i1> [[VOUT]]
85
85
;
92
92
define <4 x i1 > @v2i2v_8_4 (<8 x i1 > %vin ) {
93
93
; CHECK-LABEL: @v2i2v_8_4(
94
94
; CHECK-NEXT: entry:
95
- ; CHECK-NEXT: [[INT:%.*]] = call i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> [[VIN:%.*]]), !range [[RNG0]]
95
+ ; CHECK-NEXT: [[INT:%.*]] = call noundef range( i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> [[VIN:%.*]])
96
96
; CHECK-NEXT: [[VOUT:%.*]] = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 [[INT]])
97
97
; CHECK-NEXT: ret <4 x i1> [[VOUT]]
98
98
;
@@ -105,7 +105,7 @@ entry:
105
105
define <8 x i1 > @v2i2v_16_8 (<16 x i1 > %vin ) {
106
106
; CHECK-LABEL: @v2i2v_16_8(
107
107
; CHECK-NEXT: entry:
108
- ; CHECK-NEXT: [[INT:%.*]] = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> [[VIN:%.*]]), !range [[RNG0]]
108
+ ; CHECK-NEXT: [[INT:%.*]] = call noundef range( i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> [[VIN:%.*]])
109
109
; CHECK-NEXT: [[VOUT:%.*]] = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 [[INT]])
110
110
; CHECK-NEXT: ret <8 x i1> [[VOUT]]
111
111
;
@@ -170,7 +170,7 @@ entry:
170
170
define i32 @v2i_truncext_i16 (<4 x i1 > %vin ) {
171
171
; CHECK-LABEL: @v2i_truncext_i16(
172
172
; CHECK-NEXT: entry:
173
- ; CHECK-NEXT: [[WIDE1:%.*]] = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]]), !range [[RNG0]]
173
+ ; CHECK-NEXT: [[WIDE1:%.*]] = call noundef range( i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]])
174
174
; CHECK-NEXT: ret i32 [[WIDE1]]
175
175
;
176
176
entry:
@@ -183,7 +183,7 @@ entry:
183
183
define i32 @v2i_truncext_i8 (<4 x i1 > %vin ) {
184
184
; CHECK-LABEL: @v2i_truncext_i8(
185
185
; CHECK-NEXT: entry:
186
- ; CHECK-NEXT: [[WIDE1:%.*]] = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]]), !range [[RNG0]]
186
+ ; CHECK-NEXT: [[WIDE1:%.*]] = call noundef range( i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]])
187
187
; CHECK-NEXT: [[WIDE2:%.*]] = and i32 [[WIDE1]], 255
188
188
; CHECK-NEXT: ret i32 [[WIDE2]]
189
189
;
@@ -197,7 +197,7 @@ entry:
197
197
define i32 @v2i_and_16 (<4 x i1 > %vin ) {
198
198
; CHECK-LABEL: @v2i_and_16(
199
199
; CHECK-NEXT: entry:
200
- ; CHECK-NEXT: [[WIDE1:%.*]] = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]]), !range [[RNG0]]
200
+ ; CHECK-NEXT: [[WIDE1:%.*]] = call noundef range( i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]])
201
201
; CHECK-NEXT: ret i32 [[WIDE1]]
202
202
;
203
203
entry:
@@ -209,7 +209,7 @@ entry:
209
209
define i32 @v2i_and_15 (<4 x i1 > %vin ) {
210
210
; CHECK-LABEL: @v2i_and_15(
211
211
; CHECK-NEXT: entry:
212
- ; CHECK-NEXT: [[WIDE1:%.*]] = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]]), !range [[RNG0]]
212
+ ; CHECK-NEXT: [[WIDE1:%.*]] = call noundef range( i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> [[VIN:%.*]])
213
213
; CHECK-NEXT: [[WIDE2:%.*]] = and i32 [[WIDE1]], 32767
214
214
; CHECK-NEXT: ret i32 [[WIDE2]]
215
215
;
@@ -397,7 +397,7 @@ entry:
397
397
define i32 @range_upper_limit (<16 x i1 > %vin ) {
398
398
; CHECK-LABEL: @range_upper_limit(
399
399
; CHECK-NEXT: entry:
400
- ; CHECK-NEXT: [[INT:%.*]] = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> [[VIN:%.*]]), !range [[RNG0]]
400
+ ; CHECK-NEXT: [[INT:%.*]] = call noundef range( i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> [[VIN:%.*]])
401
401
; CHECK-NEXT: [[C:%.*]] = icmp eq i32 [[INT]], 65535
402
402
; CHECK-NEXT: [[S:%.*]] = zext i1 [[C]] to i32
403
403
; CHECK-NEXT: ret i32 [[S]]
@@ -408,3 +408,36 @@ entry:
408
408
%s = select i1 %c , i32 1 , i32 0
409
409
ret i32 %s
410
410
}
411
+
412
+ define i32 @range_already_added_larger_range (<16 x i1 > %vin ) {
413
+ ; CHECK-LABEL: @range_already_added_larger_range(
414
+ ; CHECK-NEXT: entry:
415
+ ; CHECK-NEXT: [[INT:%.*]] = call noundef range(i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> [[VIN:%.*]])
416
+ ; CHECK-NEXT: ret i32 [[INT]]
417
+ ;
418
+ entry:
419
+ %int = call noundef range(i32 0 , 65540 ) i32 @llvm.arm.mve.pred.v2i.v16i1 (<16 x i1 > %vin )
420
+ ret i32 %int
421
+ }
422
+
423
+ define i32 @range_already_added_smaller_range (<16 x i1 > %vin ) {
424
+ ; CHECK-LABEL: @range_already_added_smaller_range(
425
+ ; CHECK-NEXT: entry:
426
+ ; CHECK-NEXT: [[INT:%.*]] = call noundef range(i32 0, 655) i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> [[VIN:%.*]])
427
+ ; CHECK-NEXT: ret i32 [[INT]]
428
+ ;
429
+ entry:
430
+ %int = call noundef range(i32 0 , 655 ) i32 @llvm.arm.mve.pred.v2i.v16i1 (<16 x i1 > %vin )
431
+ ret i32 %int
432
+ }
433
+
434
+ define i32 @range_already_added_same_range (<16 x i1 > %vin ) {
435
+ ; CHECK-LABEL: @range_already_added_same_range(
436
+ ; CHECK-NEXT: entry:
437
+ ; CHECK-NEXT: [[INT:%.*]] = call noundef range(i32 0, 65536) i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> [[VIN:%.*]])
438
+ ; CHECK-NEXT: ret i32 [[INT]]
439
+ ;
440
+ entry:
441
+ %int = call noundef range(i32 0 , 65536 ) i32 @llvm.arm.mve.pred.v2i.v16i1 (<16 x i1 > %vin )
442
+ ret i32 %int
443
+ }
0 commit comments