Skip to content

Commit 5e06050

Browse files
committed
[SCCP] Add tests for #93096 (NFC)
1 parent 10dc3a8 commit 5e06050

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -passes=ipsccp < %s | FileCheck %s
3+
4+
; Make sure that constant ranges including undef are propagated correctly.
5+
; FIXME: All of the following are currently miscompiled.
6+
7+
define i8 @test_binop(i1 %cond, i8 %a) {
8+
; CHECK-LABEL: define i8 @test_binop(
9+
; CHECK-SAME: i1 [[COND:%.*]], i8 [[A:%.*]]) {
10+
; CHECK-NEXT: [[ENTRY:.*]]:
11+
; CHECK-NEXT: br i1 [[COND]], label %[[IF:.*]], label %[[JOIN:.*]]
12+
; CHECK: [[IF]]:
13+
; CHECK-NEXT: [[A_EXT:%.*]] = zext i8 [[A]] to i16
14+
; CHECK-NEXT: br label %[[JOIN]]
15+
; CHECK: [[JOIN]]:
16+
; CHECK-NEXT: [[PHI:%.*]] = phi i16 [ undef, %[[ENTRY]] ], [ [[A_EXT]], %[[IF]] ]
17+
; CHECK-NEXT: [[AND:%.*]] = and i16 [[PHI]], -1
18+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i16 [[AND]] to i8
19+
; CHECK-NEXT: ret i8 [[TRUNC]]
20+
;
21+
entry:
22+
br i1 %cond, label %if, label %join
23+
24+
if:
25+
%a.ext = zext i8 %a to i16
26+
br label %join
27+
28+
join:
29+
%phi = phi i16 [ undef, %entry ], [ %a.ext, %if ]
30+
%and = and i16 %phi, u0x0000ffff
31+
%trunc = trunc i16 %and to i8
32+
ret i8 %trunc
33+
}
34+
35+
define i8 @test_cast(i1 %cond, i8 %a) {
36+
; CHECK-LABEL: define i8 @test_cast(
37+
; CHECK-SAME: i1 [[COND:%.*]], i8 [[A:%.*]]) {
38+
; CHECK-NEXT: [[ENTRY:.*]]:
39+
; CHECK-NEXT: br i1 [[COND]], label %[[IF:.*]], label %[[JOIN:.*]]
40+
; CHECK: [[IF]]:
41+
; CHECK-NEXT: [[A_EXT:%.*]] = zext i8 [[A]] to i16
42+
; CHECK-NEXT: br label %[[JOIN]]
43+
; CHECK: [[JOIN]]:
44+
; CHECK-NEXT: [[PHI:%.*]] = phi i16 [ undef, %[[ENTRY]] ], [ [[A_EXT]], %[[IF]] ]
45+
; CHECK-NEXT: [[ZEXT:%.*]] = zext i16 [[PHI]] to i32
46+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i32 [[ZEXT]] to i8
47+
; CHECK-NEXT: ret i8 [[TRUNC]]
48+
;
49+
entry:
50+
br i1 %cond, label %if, label %join
51+
52+
if:
53+
%a.ext = zext i8 %a to i16
54+
br label %join
55+
56+
join:
57+
%phi = phi i16 [ undef, %entry ], [ %a.ext, %if ]
58+
%zext = zext i16 %phi to i32
59+
%trunc = trunc i32 %zext to i8
60+
ret i8 %trunc
61+
}
62+
63+
define i8 @test_intrin(i1 %cond, i8 %a) {
64+
; CHECK-LABEL: define range(i8 42, 0) i8 @test_intrin(
65+
; CHECK-SAME: i1 [[COND:%.*]], i8 [[A:%.*]]) {
66+
; CHECK-NEXT: [[ENTRY:.*]]:
67+
; CHECK-NEXT: br i1 [[COND]], label %[[IF:.*]], label %[[JOIN:.*]]
68+
; CHECK: [[IF]]:
69+
; CHECK-NEXT: [[A_EXT:%.*]] = zext i8 [[A]] to i16
70+
; CHECK-NEXT: br label %[[JOIN]]
71+
; CHECK: [[JOIN]]:
72+
; CHECK-NEXT: [[PHI:%.*]] = phi i16 [ undef, %[[ENTRY]] ], [ [[A_EXT]], %[[IF]] ]
73+
; CHECK-NEXT: [[UMAX:%.*]] = call i16 @llvm.umax.i16(i16 [[PHI]], i16 42)
74+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i16 [[UMAX]] to i8
75+
; CHECK-NEXT: ret i8 [[TRUNC]]
76+
;
77+
entry:
78+
br i1 %cond, label %if, label %join
79+
80+
if:
81+
%a.ext = zext i8 %a to i16
82+
br label %join
83+
84+
join:
85+
%phi = phi i16 [ undef, %entry ], [ %a.ext, %if ]
86+
%umax = call i16 @llvm.umax(i16 %phi, i16 42)
87+
%trunc = trunc i16 %umax to i8
88+
ret i8 %trunc
89+
}
90+
91+
define i9 @test_with_overflow(i1 %cond, i8 %a) {
92+
; CHECK-LABEL: define range(i9 1, -255) i9 @test_with_overflow(
93+
; CHECK-SAME: i1 [[COND:%.*]], i8 [[A:%.*]]) {
94+
; CHECK-NEXT: [[ENTRY:.*]]:
95+
; CHECK-NEXT: br i1 [[COND]], label %[[IF:.*]], label %[[JOIN:.*]]
96+
; CHECK: [[IF]]:
97+
; CHECK-NEXT: [[A_EXT:%.*]] = zext i8 [[A]] to i16
98+
; CHECK-NEXT: br label %[[JOIN]]
99+
; CHECK: [[JOIN]]:
100+
; CHECK-NEXT: [[PHI:%.*]] = phi i16 [ undef, %[[ENTRY]] ], [ [[A_EXT]], %[[IF]] ]
101+
; CHECK-NEXT: [[WO:%.*]] = call { i16, i1 } @llvm.uadd.with.overflow.i16(i16 [[PHI]], i16 1)
102+
; CHECK-NEXT: [[ADD:%.*]] = extractvalue { i16, i1 } [[WO]], 0
103+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc nuw i16 [[ADD]] to i9
104+
; CHECK-NEXT: ret i9 [[TRUNC]]
105+
;
106+
entry:
107+
br i1 %cond, label %if, label %join
108+
109+
if:
110+
%a.ext = zext i8 %a to i16
111+
br label %join
112+
113+
join:
114+
%phi = phi i16 [ undef, %entry ], [ %a.ext, %if ]
115+
%wo = call {i16, i1} @llvm.uadd.with.overflow(i16 %phi, i16 1)
116+
%add = extractvalue {i16, i1} %wo, 0
117+
%trunc = trunc i16 %add to i9
118+
ret i9 %trunc
119+
}

0 commit comments

Comments
 (0)