Skip to content

Commit 72eb14a

Browse files
committed
[InstCombine] New test (#157524)
1 parent 6e5d008 commit 72eb14a

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
2+
3+
define i32 @test_smin(i32 %arg0, i32 %arg1) {
4+
; CHECK-LABEL: define i32 @test_smin(
5+
; CHECK-NEXT: %v0 = tail call i32 @llvm.smin.i32(i32 %arg0, i32 %arg1)
6+
; CHECK-NEXT: %v1 = add nsw i32 %arg0, 1
7+
; CHECK-NEXT: %v2 = tail call i32 @llvm.smin.i32(i32 %v1, i32 %arg1)
8+
; CHECK-NEXT: %v3 = sub i32 %v2, %v0
9+
; CHECK-NEXT: ret i32 %v3
10+
;
11+
%v0 = tail call i32 @llvm.smin.i32(i32 %arg0, i32 %arg1)
12+
%v1 = add nsw i32 %arg0, 1
13+
%v2 = tail call i32 @llvm.smin.i32(i32 %v1, i32 %arg1)
14+
%v3 = sub i32 %v2, %v0
15+
ret i32 %v3
16+
}
17+
18+
define i32 @test_umin(i32 %arg0, i32 %arg1) {
19+
; CHECK-LABEL: define i32 @test_umin(
20+
; CHECK-NEXT: %v0 = tail call i32 @llvm.umin.i32(i32 %arg0, i32 %arg1)
21+
; CHECK-NEXT: %v1 = add nuw i32 %arg0, 1
22+
; CHECK-NEXT: %v2 = tail call i32 @llvm.umin.i32(i32 %v1, i32 %arg1)
23+
; CHECK-NEXT: %v3 = sub i32 %v2, %v0
24+
; CHECK-NEXT: ret i32 %v3
25+
;
26+
%v0 = tail call i32 @llvm.umin.i32(i32 %arg0, i32 %arg1)
27+
%v1 = add nuw i32 %arg0, 1
28+
%v2 = tail call i32 @llvm.umin.i32(i32 %v1, i32 %arg1)
29+
%v3 = sub i32 %v2, %v0
30+
ret i32 %v3
31+
}
32+
33+
define i1 @test_smin_i1(i1 %arg0, i1 %arg1) {
34+
; CHECK-LABEL: define i1 @test_smin_i1(
35+
; CHECK-NEXT: %v0 = or i1 %arg0, %arg1
36+
; CHECK-NEXT: %v3 = xor i1 %v0, true
37+
; CHECK-NEXT: ret i1 %v3
38+
;
39+
%v0 = tail call i1 @llvm.smin.i1(i1 %arg0, i1 %arg1)
40+
%v1 = add nsw i1 %arg0, 1
41+
%v2 = tail call i1 @llvm.smin.i1(i1 %v1, i1 %arg1)
42+
%v3 = sub i1 %v2, %v0
43+
ret i1 %v3
44+
}
45+
46+
declare void @use(i2)
47+
48+
define i2 @test_smin_use_operands(i2 %arg0, i2 %arg1) {
49+
; CHECK-LABEL: define i2 @test_smin_use_operands(
50+
; CHECK-NEXT: %v0 = tail call i2 @llvm.smin.i2(i2 %arg0, i2 %arg1)
51+
; CHECK-NEXT: %v1 = add nsw i2 %arg0, 1
52+
; CHECK-NEXT: %v2 = tail call i2 @llvm.smin.i2(i2 %v1, i2 %arg1)
53+
; CHECK-NEXT: %v3 = sub i2 %v2, %v0
54+
; CHECK-NEXT: call void @use(i2 %v2)
55+
; CHECK-NEXT: call void @use(i2 %v0)
56+
; CHECK-NEXT: ret i2 %v3
57+
;
58+
%v0 = tail call i2 @llvm.smin.i2(i2 %arg0, i2 %arg1)
59+
%v1 = add nsw i2 %arg0, 1
60+
%v2 = tail call i2 @llvm.smin.i2(i2 %v1, i2 %arg1)
61+
%v3 = sub i2 %v2, %v0
62+
call void @use(i2 %v2)
63+
call void @use(i2 %v0)
64+
ret i2 %v3
65+
}
66+
67+
define i2 @test_smin_use_operand(i2 %arg0, i2 %arg1) {
68+
; CHECK-LABEL: define i2 @test_smin_use_operand(
69+
; CHECK-NEXT: %v0 = tail call i2 @llvm.smin.i2(i2 %arg0, i2 %arg1)
70+
; CHECK-NEXT: %v1 = add nsw i2 %arg0, 1
71+
; CHECK-NEXT: %v2 = tail call i2 @llvm.smin.i2(i2 %v1, i2 %arg1)
72+
; CHECK-NEXT: %v3 = sub i2 %v2, %v0
73+
; CHECK-NEXT: call void @use(i2 %v2)
74+
; CHECK-NEXT: ret i2 %v3
75+
;
76+
%v0 = tail call i2 @llvm.smin.i2(i2 %arg0, i2 %arg1)
77+
%v1 = add nsw i2 %arg0, 1
78+
%v2 = tail call i2 @llvm.smin.i2(i2 %v1, i2 %arg1)
79+
%v3 = sub i2 %v2, %v0
80+
call void @use(i2 %v2)
81+
ret i2 %v3
82+
}
83+
84+
define i32 @test_smin_missing_nsw(i32 %arg0, i32 %arg1) {
85+
; CHECK-LABEL: define i32 @test_smin_missing_nsw(
86+
; CHECK-NEXT: %v0 = tail call i32 @llvm.smin.i32(i32 %arg0, i32 %arg1)
87+
; CHECK-NEXT: %v1 = add i32 %arg0, 1
88+
; CHECK-NEXT: %v2 = tail call i32 @llvm.smin.i32(i32 %v1, i32 %arg1)
89+
; CHECK-NEXT: %v3 = sub i32 %v2, %v0
90+
; CHECK-NEXT: ret i32 %v3
91+
;
92+
%v0 = tail call i32 @llvm.smin.i32(i32 %arg0, i32 %arg1)
93+
%v1 = add i32 %arg0, 1
94+
%v2 = tail call i32 @llvm.smin.i32(i32 %v1, i32 %arg1)
95+
%v3 = sub i32 %v2, %v0
96+
ret i32 %v3
97+
}
98+
99+
define i32 @test_umin_missing_nuw(i32 %arg0, i32 %arg1) {
100+
; CHECK-LABEL: define i32 @test_umin_missing_nuw(
101+
; CHECK-NEXT: %v0 = tail call i32 @llvm.umin.i32(i32 %arg0, i32 %arg1)
102+
; CHECK-NEXT: %v1 = add i32 %arg0, 1
103+
; CHECK-NEXT: %v2 = tail call i32 @llvm.umin.i32(i32 %v1, i32 %arg1)
104+
; CHECK-NEXT: %v3 = sub i32 %v2, %v0
105+
; CHECK-NEXT: ret i32 %v3
106+
;
107+
%v0 = tail call i32 @llvm.umin.i32(i32 %arg0, i32 %arg1)
108+
%v1 = add i32 %arg0, 1
109+
%v2 = tail call i32 @llvm.umin.i32(i32 %v1, i32 %arg1)
110+
%v3 = sub i32 %v2, %v0
111+
ret i32 %v3
112+
}

0 commit comments

Comments
 (0)