14
14
define i64 @test_shl_by_2 (i64 %x ) {
15
15
; CHECK-LABEL: define i64 @test_shl_by_2(
16
16
; CHECK-SAME: i64 [[X:%.*]]) {
17
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
18
17
; CHECK-NEXT: [[TMP2:%.*]] = shl nuw i64 [[X]], 2
19
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP2]], i64 [[X1]])
18
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
19
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[TMP2]]
20
20
; CHECK-NEXT: ret i64 [[MAX]]
21
21
;
22
22
%x1 = add i64 %x , 1
@@ -28,9 +28,9 @@ define i64 @test_shl_by_2(i64 %x) {
28
28
define i64 @test_shl_by_5 (i64 %x ) {
29
29
; CHECK-LABEL: define i64 @test_shl_by_5(
30
30
; CHECK-SAME: i64 [[X:%.*]]) {
31
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
32
31
; CHECK-NEXT: [[TMP2:%.*]] = shl nuw i64 [[X]], 5
33
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP2]], i64 [[X1]])
32
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
33
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[TMP2]]
34
34
; CHECK-NEXT: ret i64 [[MAX]]
35
35
;
36
36
%x1 = add i64 %x , 1
@@ -42,9 +42,9 @@ define i64 @test_shl_by_5(i64 %x) {
42
42
define i64 @test_shl_with_nsw (i64 %x ) {
43
43
; CHECK-LABEL: define i64 @test_shl_with_nsw(
44
44
; CHECK-SAME: i64 [[X:%.*]]) {
45
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
46
45
; CHECK-NEXT: [[SHL:%.*]] = shl nuw nsw i64 [[X]], 2
47
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[SHL]], i64 [[X1]])
46
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
47
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[SHL]]
48
48
; CHECK-NEXT: ret i64 [[MAX]]
49
49
;
50
50
%x1 = add i64 %x , 1
@@ -58,9 +58,9 @@ define i64 @test_shl_with_nsw(i64 %x) {
58
58
define i64 @test_shl_umax_commuted (i64 %x ) {
59
59
; CHECK-LABEL: define i64 @test_shl_umax_commuted(
60
60
; CHECK-SAME: i64 [[X:%.*]]) {
61
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
62
61
; CHECK-NEXT: [[SHL:%.*]] = shl nuw i64 [[X]], 2
63
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[X1]], i64 [[SHL]])
62
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
63
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[SHL]]
64
64
; CHECK-NEXT: ret i64 [[MAX]]
65
65
;
66
66
%x1 = add i64 %x , 1
@@ -164,9 +164,9 @@ define i64 @test_shl_multi_use_shl(i64 %x) {
164
164
define i64 @test_shl_multi_use_max (i64 %x ) {
165
165
; CHECK-LABEL: define i64 @test_shl_multi_use_max(
166
166
; CHECK-SAME: i64 [[X:%.*]]) {
167
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
168
167
; CHECK-NEXT: [[TMP2:%.*]] = shl nuw i64 [[X]], 3
169
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP2]], i64 [[X1]])
168
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
169
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[TMP2]]
170
170
; CHECK-NEXT: call void @use(i64 [[MAX]])
171
171
; CHECK-NEXT: ret i64 [[MAX]]
172
172
;
@@ -182,9 +182,9 @@ define i64 @test_shl_multi_use_max(i64 %x) {
182
182
define i64 @test_mul_by_3 (i64 %x ) {
183
183
; CHECK-LABEL: define i64 @test_mul_by_3(
184
184
; CHECK-SAME: i64 [[X:%.*]]) {
185
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
186
185
; CHECK-NEXT: [[MUL:%.*]] = mul nuw i64 [[X]], 3
187
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[MUL]], i64 [[X1]])
186
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
187
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[MUL]]
188
188
; CHECK-NEXT: ret i64 [[MAX]]
189
189
;
190
190
%x1 = add i64 %x , 1
@@ -196,9 +196,9 @@ define i64 @test_mul_by_3(i64 %x) {
196
196
define i64 @test_mul_by_5 (i64 %x ) {
197
197
; CHECK-LABEL: define i64 @test_mul_by_5(
198
198
; CHECK-SAME: i64 [[X:%.*]]) {
199
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
200
199
; CHECK-NEXT: [[MUL:%.*]] = mul nuw i64 [[X]], 5
201
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[MUL]], i64 [[X1]])
200
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
201
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[MUL]]
202
202
; CHECK-NEXT: ret i64 [[MAX]]
203
203
;
204
204
%x1 = add i64 %x , 1
@@ -210,9 +210,9 @@ define i64 @test_mul_by_5(i64 %x) {
210
210
define i64 @test_mul_with_nsw (i64 %x ) {
211
211
; CHECK-LABEL: define i64 @test_mul_with_nsw(
212
212
; CHECK-SAME: i64 [[X:%.*]]) {
213
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
214
213
; CHECK-NEXT: [[MUL:%.*]] = mul nuw nsw i64 [[X]], 3
215
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[MUL]], i64 [[X1]])
214
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
215
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[MUL]]
216
216
; CHECK-NEXT: ret i64 [[MAX]]
217
217
;
218
218
%x1 = add i64 %x , 1
@@ -226,9 +226,9 @@ define i64 @test_mul_with_nsw(i64 %x) {
226
226
define i64 @test_mul_max_commuted (i64 %x ) {
227
227
; CHECK-LABEL: define i64 @test_mul_max_commuted(
228
228
; CHECK-SAME: i64 [[X:%.*]]) {
229
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
230
229
; CHECK-NEXT: [[MUL:%.*]] = mul nuw i64 [[X]], 3
231
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[X1]], i64 [[MUL]])
230
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
231
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[MUL]]
232
232
; CHECK-NEXT: ret i64 [[MAX]]
233
233
;
234
234
%x1 = add i64 %x , 1
@@ -343,9 +343,9 @@ define i64 @test_mul_multi_use_mul(i64 %x) {
343
343
define i64 @test_mul_multi_use_max (i64 %x ) {
344
344
; CHECK-LABEL: define i64 @test_mul_multi_use_max(
345
345
; CHECK-SAME: i64 [[X:%.*]]) {
346
- ; CHECK-NEXT: [[X1:%.*]] = add i64 [[X]], 1
347
346
; CHECK-NEXT: [[TMP2:%.*]] = mul nuw i64 [[X]], 3
348
- ; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP2]], i64 [[X1]])
347
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 [[X]], 0
348
+ ; CHECK-NEXT: [[MAX:%.*]] = select i1 [[TMP1]], i64 1, i64 [[TMP2]]
349
349
; CHECK-NEXT: call void @use(i64 [[MAX]])
350
350
; CHECK-NEXT: ret i64 [[MAX]]
351
351
;
0 commit comments