@@ -25,8 +25,8 @@ declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1)
25
25
define i8 @umin_cttz_i8_zero_undefined (i8 %X ) {
26
26
; CHECK-LABEL: define i8 @umin_cttz_i8_zero_undefined(
27
27
; CHECK-SAME: i8 [[X:%.*]]) {
28
- ; CHECK-NEXT: [[CTTZ :%.*]] = call range( i8 0, 9) i8 @llvm.cttz.i8(i8 [[X]], i1 true)
29
- ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.umin .i8(i8 [[CTTZ ]], i8 6 )
28
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i8 [[X]], 64
29
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i8 0, 7) i8 @llvm.cttz .i8(i8 [[TMP1 ]], i1 true )
30
30
; CHECK-NEXT: ret i8 [[RET]]
31
31
;
32
32
%cttz = call i8 @llvm.cttz.i8 (i8 %X , i1 true )
@@ -37,8 +37,8 @@ define i8 @umin_cttz_i8_zero_undefined(i8 %X) {
37
37
define i8 @umin_cttz_i8_zero_defined (i8 %X ) {
38
38
; CHECK-LABEL: define i8 @umin_cttz_i8_zero_defined(
39
39
; CHECK-SAME: i8 [[X:%.*]]) {
40
- ; CHECK-NEXT: [[CTTZ :%.*]] = call range( i8 0, 9) i8 @llvm.cttz.i8(i8 [[X]], i1 false)
41
- ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.umin .i8(i8 [[CTTZ ]], i8 6 )
40
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i8 [[X]], 64
41
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i8 0, 7) i8 @llvm.cttz .i8(i8 [[TMP1 ]], i1 true )
42
42
; CHECK-NEXT: ret i8 [[RET]]
43
43
;
44
44
%cttz = call i8 @llvm.cttz.i8 (i8 %X , i1 false )
@@ -49,8 +49,8 @@ define i8 @umin_cttz_i8_zero_defined(i8 %X) {
49
49
define i8 @umin_cttz_i8_commuted_zero_undefined (i8 %X ) {
50
50
; CHECK-LABEL: define i8 @umin_cttz_i8_commuted_zero_undefined(
51
51
; CHECK-SAME: i8 [[X:%.*]]) {
52
- ; CHECK-NEXT: [[CTTZ :%.*]] = call range( i8 0, 9) i8 @llvm.cttz.i8(i8 [[X]], i1 true)
53
- ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.umin .i8(i8 [[CTTZ ]], i8 6 )
52
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i8 [[X]], 64
53
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i8 0, 7) i8 @llvm.cttz .i8(i8 [[TMP1 ]], i1 true )
54
54
; CHECK-NEXT: ret i8 [[RET]]
55
55
;
56
56
%cttz = call i8 @llvm.cttz.i8 (i8 %X , i1 true )
@@ -72,8 +72,8 @@ define i8 @umin_cttz_i8_ge_bitwidth_zero_undefined(i8 %X) {
72
72
define i16 @umin_cttz_i16_zero_undefined (i16 %X ) {
73
73
; CHECK-LABEL: define i16 @umin_cttz_i16_zero_undefined(
74
74
; CHECK-SAME: i16 [[X:%.*]]) {
75
- ; CHECK-NEXT: [[CTTZ :%.*]] = call range( i16 0, 17) i16 @llvm.cttz.i16(i16 [[X]], i1 true)
76
- ; CHECK-NEXT: [[RET:%.*]] = call i16 @llvm.umin .i16(i16 [[CTTZ ]], i16 6 )
75
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i16 [[X]], 64
76
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i16 0, 7) i16 @llvm.cttz .i16(i16 [[TMP1 ]], i1 true )
77
77
; CHECK-NEXT: ret i16 [[RET]]
78
78
;
79
79
%cttz = call i16 @llvm.cttz.i16 (i16 %X , i1 true )
@@ -84,8 +84,8 @@ define i16 @umin_cttz_i16_zero_undefined(i16 %X) {
84
84
define i32 @umin_cttz_i32_zero_undefined (i32 %X ) {
85
85
; CHECK-LABEL: define i32 @umin_cttz_i32_zero_undefined(
86
86
; CHECK-SAME: i32 [[X:%.*]]) {
87
- ; CHECK-NEXT: [[CTTZ :%.*]] = call range( i32 0, 33) i32 @llvm.cttz.i32(i32 [[X]], i1 true)
88
- ; CHECK-NEXT: [[RET:%.*]] = call i32 @llvm.umin .i32(i32 [[CTTZ ]], i32 6 )
87
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i32 [[X]], 64
88
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i32 0, 7) i32 @llvm.cttz .i32(i32 [[TMP1 ]], i1 true )
89
89
; CHECK-NEXT: ret i32 [[RET]]
90
90
;
91
91
%cttz = call i32 @llvm.cttz.i32 (i32 %X , i1 true )
@@ -96,8 +96,8 @@ define i32 @umin_cttz_i32_zero_undefined(i32 %X) {
96
96
define i64 @umin_cttz_i64_zero_undefined (i64 %X ) {
97
97
; CHECK-LABEL: define i64 @umin_cttz_i64_zero_undefined(
98
98
; CHECK-SAME: i64 [[X:%.*]]) {
99
- ; CHECK-NEXT: [[CTTZ :%.*]] = call range( i64 0, 65) i64 @llvm.cttz.i64(i64 [[X]], i1 true)
100
- ; CHECK-NEXT: [[RET:%.*]] = call i64 @llvm.umin .i64(i64 [[CTTZ ]], i64 6 )
99
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i64 [[X]], 64
100
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i64 0, 7) i64 @llvm.cttz .i64(i64 [[TMP1 ]], i1 true )
101
101
; CHECK-NEXT: ret i64 [[RET]]
102
102
;
103
103
%cttz = call i64 @llvm.cttz.i64 (i64 %X , i1 true )
@@ -129,8 +129,8 @@ define i1 @umin_cttz_i1_zero_defined(i1 %X) {
129
129
define <2 x i32 > @umin_cttz_2xi32_splat_zero_undefined (<2 x i32 > %X ) {
130
130
; CHECK-LABEL: define <2 x i32> @umin_cttz_2xi32_splat_zero_undefined(
131
131
; CHECK-SAME: <2 x i32> [[X:%.*]]) {
132
- ; CHECK-NEXT: [[CTTZ :%.*]] = call range(i32 0, 33) <2 x i32> @llvm.cttz.v2i32(<2 x i32> [[X]], i1 true)
133
- ; CHECK-NEXT: [[RET:%.*]] = call <2 x i32> @llvm.umin .v2i32(<2 x i32> [[CTTZ ]], <2 x i32> <i32 6, i32 6> )
132
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or <2 x i32> [[X]], <i32 64, i32 64>
133
+ ; CHECK-NEXT: [[RET:%.*]] = call range(i32 0, 7) <2 x i32> @llvm.cttz .v2i32(<2 x i32> [[TMP1 ]], i1 true )
134
134
; CHECK-NEXT: ret <2 x i32> [[RET]]
135
135
;
136
136
%cttz = call <2 x i32 > @llvm.cttz.v2i32 (<2 x i32 > %X , i1 true )
@@ -191,8 +191,8 @@ define i16 @umin_cttz_i16_negative_two_uses(i16 %X) {
191
191
define i8 @umin_ctlz_i8_zero_undefined (i8 %X ) {
192
192
; CHECK-LABEL: define i8 @umin_ctlz_i8_zero_undefined(
193
193
; CHECK-SAME: i8 [[X:%.*]]) {
194
- ; CHECK-NEXT: [[CTLZ :%.*]] = call range( i8 0, 9) i8 @llvm.ctlz.i8(i8 [[X]], i1 true)
195
- ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.umin .i8(i8 [[CTLZ ]], i8 6 )
194
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i8 [[X]], 2
195
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i8 0, 7) i8 @llvm.ctlz .i8(i8 [[TMP1 ]], i1 true )
196
196
; CHECK-NEXT: ret i8 [[RET]]
197
197
;
198
198
%ctlz = call i8 @llvm.ctlz.i8 (i8 %X , i1 true )
@@ -203,8 +203,8 @@ define i8 @umin_ctlz_i8_zero_undefined(i8 %X) {
203
203
define i8 @umin_ctlz_i8_zero_defined (i8 %X ) {
204
204
; CHECK-LABEL: define i8 @umin_ctlz_i8_zero_defined(
205
205
; CHECK-SAME: i8 [[X:%.*]]) {
206
- ; CHECK-NEXT: [[CTLZ :%.*]] = call range( i8 0, 9) i8 @llvm.ctlz.i8(i8 [[X]], i1 false)
207
- ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.umin .i8(i8 [[CTLZ ]], i8 6 )
206
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i8 [[X]], 2
207
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i8 0, 7) i8 @llvm.ctlz .i8(i8 [[TMP1 ]], i1 true )
208
208
; CHECK-NEXT: ret i8 [[RET]]
209
209
;
210
210
%ctlz = call i8 @llvm.ctlz.i8 (i8 %X , i1 false )
@@ -215,8 +215,8 @@ define i8 @umin_ctlz_i8_zero_defined(i8 %X) {
215
215
define i8 @umin_ctlz_i8_commuted_zero_undefined (i8 %X ) {
216
216
; CHECK-LABEL: define i8 @umin_ctlz_i8_commuted_zero_undefined(
217
217
; CHECK-SAME: i8 [[X:%.*]]) {
218
- ; CHECK-NEXT: [[CTLZ :%.*]] = call range( i8 0, 9) i8 @llvm.ctlz.i8(i8 [[X]], i1 true)
219
- ; CHECK-NEXT: [[RET:%.*]] = call i8 @llvm.umin .i8(i8 [[CTLZ ]], i8 6 )
218
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i8 [[X]], 2
219
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i8 0, 7) i8 @llvm.ctlz .i8(i8 [[TMP1 ]], i1 true )
220
220
; CHECK-NEXT: ret i8 [[RET]]
221
221
;
222
222
%ctlz = call i8 @llvm.ctlz.i8 (i8 %X , i1 true )
@@ -238,8 +238,8 @@ define i8 @umin_ctlz_i8_ge_bitwidth_zero_undefined(i8 %X) {
238
238
define i16 @umin_ctlz_i16_zero_undefined (i16 %X ) {
239
239
; CHECK-LABEL: define i16 @umin_ctlz_i16_zero_undefined(
240
240
; CHECK-SAME: i16 [[X:%.*]]) {
241
- ; CHECK-NEXT: [[CTLZ :%.*]] = call range( i16 0, 17) i16 @llvm.ctlz.i16(i16 [[X]], i1 true)
242
- ; CHECK-NEXT: [[RET:%.*]] = call i16 @llvm.umin .i16(i16 [[CTLZ ]], i16 6 )
241
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i16 [[X]], 512
242
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i16 0, 7) i16 @llvm.ctlz .i16(i16 [[TMP1 ]], i1 true )
243
243
; CHECK-NEXT: ret i16 [[RET]]
244
244
;
245
245
%ctlz = call i16 @llvm.ctlz.i16 (i16 %X , i1 true )
@@ -250,8 +250,8 @@ define i16 @umin_ctlz_i16_zero_undefined(i16 %X) {
250
250
define i32 @umin_ctlz_i32_zero_undefined (i32 %X ) {
251
251
; CHECK-LABEL: define i32 @umin_ctlz_i32_zero_undefined(
252
252
; CHECK-SAME: i32 [[X:%.*]]) {
253
- ; CHECK-NEXT: [[CTLZ :%.*]] = call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[X]], i1 true)
254
- ; CHECK-NEXT: [[RET:%.*]] = call i32 @llvm.umin .i32(i32 [[CTLZ ]], i32 6 )
253
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i32 [[X]], 33554432
254
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i32 0, 7) i32 @llvm.ctlz .i32(i32 [[TMP1 ]], i1 true )
255
255
; CHECK-NEXT: ret i32 [[RET]]
256
256
;
257
257
%ctlz = call i32 @llvm.ctlz.i32 (i32 %X , i1 true )
@@ -262,8 +262,8 @@ define i32 @umin_ctlz_i32_zero_undefined(i32 %X) {
262
262
define i64 @umin_ctlz_i64_zero_undefined (i64 %X ) {
263
263
; CHECK-LABEL: define i64 @umin_ctlz_i64_zero_undefined(
264
264
; CHECK-SAME: i64 [[X:%.*]]) {
265
- ; CHECK-NEXT: [[CTLZ :%.*]] = call range( i64 0, 65) i64 @llvm.ctlz.i64(i64 [[X]], i1 true)
266
- ; CHECK-NEXT: [[RET:%.*]] = call i64 @llvm.umin .i64(i64 [[CTLZ ]], i64 6 )
265
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or i64 [[X]], 144115188075855872
266
+ ; CHECK-NEXT: [[RET:%.*]] = call range( i64 0, 7) i64 @llvm.ctlz .i64(i64 [[TMP1 ]], i1 true )
267
267
; CHECK-NEXT: ret i64 [[RET]]
268
268
;
269
269
%ctlz = call i64 @llvm.ctlz.i64 (i64 %X , i1 true )
@@ -295,8 +295,8 @@ define i1 @umin_ctlz_i1_zero_defined(i1 %X) {
295
295
define <2 x i32 > @umin_ctlz_2xi32_splat_zero_undefined (<2 x i32 > %X ) {
296
296
; CHECK-LABEL: define <2 x i32> @umin_ctlz_2xi32_splat_zero_undefined(
297
297
; CHECK-SAME: <2 x i32> [[X:%.*]]) {
298
- ; CHECK-NEXT: [[CTLZ :%.*]] = call range(i32 0, 33) <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[X]], i1 true)
299
- ; CHECK-NEXT: [[RET:%.*]] = call <2 x i32> @llvm.umin .v2i32(<2 x i32> [[CTLZ ]], <2 x i32> <i32 6, i32 6> )
298
+ ; CHECK-NEXT: [[TMP1 :%.*]] = or <2 x i32> [[X]], <i32 33554432, i32 33554432>
299
+ ; CHECK-NEXT: [[RET:%.*]] = call range(i32 0, 7) <2 x i32> @llvm.ctlz .v2i32(<2 x i32> [[TMP1 ]], i1 true )
300
300
; CHECK-NEXT: ret <2 x i32> [[RET]]
301
301
;
302
302
%ctlz = call <2 x i32 > @llvm.ctlz.v2i32 (<2 x i32 > %X , i1 true )
0 commit comments