5
5
define i32 @bit_ceil_32 (i32 %x ) {
6
6
; CHECK-LABEL: @bit_ceil_32(
7
7
; CHECK-NEXT: [[DEC:%.*]] = add i32 [[X:%.*]], -1
8
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false), !range [[RNG0:![0-9]+]]
8
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false)
9
9
; CHECK-NEXT: [[TMP1:%.*]] = sub nsw i32 0, [[CTLZ]]
10
10
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 31
11
11
; CHECK-NEXT: [[SEL:%.*]] = shl nuw i32 1, [[TMP2]]
@@ -24,7 +24,7 @@ define i32 @bit_ceil_32(i32 %x) {
24
24
define i64 @bit_ceil_64 (i64 %x ) {
25
25
; CHECK-LABEL: @bit_ceil_64(
26
26
; CHECK-NEXT: [[DEC:%.*]] = add i64 [[X:%.*]], -1
27
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i64 @llvm.ctlz.i64(i64 [[DEC]], i1 false), !range [[RNG1:![0-9]+]]
27
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i64 0, 65) i64 @llvm.ctlz.i64(i64 [[DEC]], i1 false)
28
28
; CHECK-NEXT: [[TMP1:%.*]] = sub nsw i64 0, [[CTLZ]]
29
29
; CHECK-NEXT: [[TMP2:%.*]] = and i64 [[TMP1]], 63
30
30
; CHECK-NEXT: [[SEL:%.*]] = shl nuw i64 1, [[TMP2]]
@@ -44,7 +44,7 @@ define i32 @bit_ceil_32_minus_1(i32 %x) {
44
44
; CHECK-LABEL: @bit_ceil_32_minus_1(
45
45
; CHECK-NEXT: entry:
46
46
; CHECK-NEXT: [[SUB:%.*]] = add i32 [[X:%.*]], -2
47
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[SUB]], i1 false), !range [[RNG0]]
47
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[SUB]], i1 false)
48
48
; CHECK-NEXT: [[TMP0:%.*]] = sub nsw i32 0, [[CTLZ]]
49
49
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 31
50
50
; CHECK-NEXT: [[SEL:%.*]] = shl nuw i32 1, [[TMP1]]
64
64
; std::bit_ceil<uint32_t>(x + 1)
65
65
define i32 @bit_ceil_32_plus_1 (i32 %x ) {
66
66
; CHECK-LABEL: @bit_ceil_32_plus_1(
67
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[X:%.*]], i1 false), !range [[RNG0]]
67
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[X:%.*]], i1 false)
68
68
; CHECK-NEXT: [[TMP1:%.*]] = sub nsw i32 0, [[CTLZ]]
69
69
; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 31
70
70
; CHECK-NEXT: [[SEL:%.*]] = shl nuw i32 1, [[TMP2]]
@@ -84,7 +84,7 @@ define i32 @bit_ceil_plus_2(i32 %x) {
84
84
; CHECK-LABEL: @bit_ceil_plus_2(
85
85
; CHECK-NEXT: entry:
86
86
; CHECK-NEXT: [[SUB:%.*]] = add i32 [[X:%.*]], 1
87
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[SUB]], i1 false), !range [[RNG0]]
87
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[SUB]], i1 false)
88
88
; CHECK-NEXT: [[TMP0:%.*]] = sub nsw i32 0, [[CTLZ]]
89
89
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 31
90
90
; CHECK-NEXT: [[SEL:%.*]] = shl nuw i32 1, [[TMP1]]
@@ -105,7 +105,7 @@ define i32 @bit_ceil_32_neg(i32 %x) {
105
105
; CHECK-LABEL: @bit_ceil_32_neg(
106
106
; CHECK-NEXT: entry:
107
107
; CHECK-NEXT: [[SUB:%.*]] = xor i32 [[X:%.*]], -1
108
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[SUB]], i1 false), !range [[RNG0]]
108
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[SUB]], i1 false)
109
109
; CHECK-NEXT: [[TMP0:%.*]] = sub nsw i32 0, [[CTLZ]]
110
110
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 31
111
111
; CHECK-NEXT: [[SEL:%.*]] = shl nuw i32 1, [[TMP1]]
@@ -127,7 +127,7 @@ define i32 @bit_ceil_not(i32 %x) {
127
127
; CHECK-LABEL: @bit_ceil_not(
128
128
; CHECK-NEXT: entry:
129
129
; CHECK-NEXT: [[SUB:%.*]] = sub i32 -2, [[X:%.*]]
130
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[SUB]], i1 false), !range [[RNG0]]
130
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[SUB]], i1 false)
131
131
; CHECK-NEXT: [[TMP0:%.*]] = sub nsw i32 0, [[CTLZ]]
132
132
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 31
133
133
; CHECK-NEXT: [[SEL:%.*]] = shl nuw i32 1, [[TMP1]]
@@ -147,7 +147,7 @@ entry:
147
147
define i32 @bit_ceil_commuted_operands (i32 %x ) {
148
148
; CHECK-LABEL: @bit_ceil_commuted_operands(
149
149
; CHECK-NEXT: [[DEC:%.*]] = add i32 [[X:%.*]], -1
150
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false), !range [[RNG0]]
150
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false)
151
151
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 32, [[CTLZ]]
152
152
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 1, [[SUB]]
153
153
; CHECK-NEXT: ret i32 [[SHL]]
@@ -165,7 +165,7 @@ define i32 @bit_ceil_commuted_operands(i32 %x) {
165
165
define i32 @bit_ceil_wrong_select_constant (i32 %x ) {
166
166
; CHECK-LABEL: @bit_ceil_wrong_select_constant(
167
167
; CHECK-NEXT: [[DEC:%.*]] = add i32 [[X:%.*]], -1
168
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false), !range [[RNG0]]
168
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false)
169
169
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 32, [[CTLZ]]
170
170
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 1, [[SUB]]
171
171
; CHECK-NEXT: [[UGT_INV:%.*]] = icmp ult i32 [[X]], 2
@@ -185,7 +185,7 @@ define i32 @bit_ceil_wrong_select_constant(i32 %x) {
185
185
define i32 @bit_ceil_32_wrong_cond (i32 %x ) {
186
186
; CHECK-LABEL: @bit_ceil_32_wrong_cond(
187
187
; CHECK-NEXT: [[DEC:%.*]] = add i32 [[X:%.*]], -1
188
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false), !range [[RNG0]]
188
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false)
189
189
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 32, [[CTLZ]]
190
190
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 1, [[SUB]]
191
191
; CHECK-NEXT: [[UGT:%.*]] = icmp ugt i32 [[X]], 2
@@ -205,7 +205,7 @@ define i32 @bit_ceil_32_wrong_cond(i32 %x) {
205
205
define i32 @bit_ceil_wrong_sub_constant (i32 %x ) {
206
206
; CHECK-LABEL: @bit_ceil_wrong_sub_constant(
207
207
; CHECK-NEXT: [[DEC:%.*]] = add i32 [[X:%.*]], -1
208
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false), !range [[RNG0]]
208
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false)
209
209
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 33, [[CTLZ]]
210
210
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 1, [[SUB]]
211
211
; CHECK-NEXT: [[UGT:%.*]] = icmp ugt i32 [[X]], 1
@@ -225,7 +225,7 @@ define i32 @bit_ceil_wrong_sub_constant(i32 %x) {
225
225
define i32 @bit_ceil_32_shl_used_twice (i32 %x , ptr %p ) {
226
226
; CHECK-LABEL: @bit_ceil_32_shl_used_twice(
227
227
; CHECK-NEXT: [[DEC:%.*]] = add i32 [[X:%.*]], -1
228
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false), !range [[RNG0]]
228
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false)
229
229
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 32, [[CTLZ]]
230
230
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 1, [[SUB]]
231
231
; CHECK-NEXT: [[UGT:%.*]] = icmp ugt i32 [[X]], 1
@@ -247,7 +247,7 @@ define i32 @bit_ceil_32_shl_used_twice(i32 %x, ptr %p) {
247
247
define i32 @bit_ceil_32_sub_used_twice (i32 %x , ptr %p ) {
248
248
; CHECK-LABEL: @bit_ceil_32_sub_used_twice(
249
249
; CHECK-NEXT: [[DEC:%.*]] = add i32 [[X:%.*]], -1
250
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false), !range [[RNG0]]
250
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range( i32 0, 33) i32 @llvm.ctlz.i32(i32 [[DEC]], i1 false)
251
251
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 32, [[CTLZ]]
252
252
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 1, [[SUB]]
253
253
; CHECK-NEXT: [[UGT:%.*]] = icmp ugt i32 [[X]], 1
@@ -269,7 +269,7 @@ define i32 @bit_ceil_32_sub_used_twice(i32 %x, ptr %p) {
269
269
define <4 x i32 > @bit_ceil_v4i32 (<4 x i32 > %x ) {
270
270
; CHECK-LABEL: @bit_ceil_v4i32(
271
271
; CHECK-NEXT: [[DEC:%.*]] = add <4 x i32> [[X:%.*]], <i32 -1, i32 -1, i32 -1, i32 -1>
272
- ; CHECK-NEXT: [[CTLZ:%.*]] = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[DEC]], i1 false), !range [[RNG0]]
272
+ ; CHECK-NEXT: [[CTLZ:%.*]] = tail call range(i32 0, 33) <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[DEC]], i1 false)
273
273
; CHECK-NEXT: [[TMP1:%.*]] = sub nsw <4 x i32> zeroinitializer, [[CTLZ]]
274
274
; CHECK-NEXT: [[TMP2:%.*]] = and <4 x i32> [[TMP1]], <i32 31, i32 31, i32 31, i32 31>
275
275
; CHECK-NEXT: [[SEL:%.*]] = shl nuw <4 x i32> <i32 1, i32 1, i32 1, i32 1>, [[TMP2]]
0 commit comments