Skip to content

Commit 16bb8c1

Browse files
committed
[SCCP] Use poison instead of undef when zapping returns
1 parent 4acc8ee commit 16bb8c1

23 files changed

+69
-69
lines changed

llvm/lib/Transforms/IPO/SCCP.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ static bool runIPSCCP(
316316
SmallSetVector<Function *, 8> FuncZappedReturn;
317317
for (ReturnInst *RI : ReturnsToZap) {
318318
Function *F = RI->getParent()->getParent();
319-
RI->setOperand(0, UndefValue::get(F->getReturnType()));
319+
RI->setOperand(0, PoisonValue::get(F->getReturnType()));
320320
// Record all functions that are zapped.
321321
FuncZappedReturn.insert(F);
322322
}

llvm/test/Transforms/FunctionSpecialization/track-return.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ define internal i64 @foo(i1 %flag, i64 %m, i64 %n) {
2424
; CHECK-NEXT: [[RES0:%.*]] = call i64 @bar.specialized.6(i64 4)
2525
; CHECK-NEXT: br label %merge
2626
; CHECK: merge:
27-
; CHECK-NEXT: ret i64 undef
27+
; CHECK-NEXT: ret i64 poison
2828
;
2929
; CHECK: define internal i64 @foo.specialized.2
3030
; CHECK-NEXT: entry:
@@ -34,7 +34,7 @@ define internal i64 @foo(i1 %flag, i64 %m, i64 %n) {
3434
; CHECK-NEXT: [[RES1:%.*]] = call i64 @bar.specialized.5(i64 3)
3535
; CHECK-NEXT: br label %merge
3636
; CHECK: merge:
37-
; CHECK-NEXT: ret i64 undef
37+
; CHECK-NEXT: ret i64 poison
3838
;
3939
entry:
4040
br i1 %flag, label %plus, label %minus
@@ -58,11 +58,11 @@ define internal i64 @binop(i64 %x, i64 %y) {
5858
;
5959
; CHECK: define internal i64 @binop.specialized.3
6060
; CHECK-NEXT: entry:
61-
; CHECK-NEXT: ret i64 undef
61+
; CHECK-NEXT: ret i64 poison
6262
;
6363
; CHECK: define internal i64 @binop.specialized.4
6464
; CHECK-NEXT: entry:
65-
; CHECK-NEXT: ret i64 undef
65+
; CHECK-NEXT: ret i64 poison
6666
;
6767
entry:
6868
%z = add i64 %x, %y
@@ -77,15 +77,15 @@ define internal i64 @bar(i64 %n) {
7777
; CHECK: if.else:
7878
; CHECK-NEXT: br label %if.end
7979
; CHECK: if.end:
80-
; CHECK-NEXT: ret i64 undef
80+
; CHECK-NEXT: ret i64 poison
8181
;
8282
; CHECK: define internal i64 @bar.specialized.6
8383
; CHECK-NEXT: entry:
8484
; CHECK-NEXT: br label %if.then
8585
; CHECK: if.then:
8686
; CHECK-NEXT: br label %if.end
8787
; CHECK: if.end:
88-
; CHECK-NEXT: ret i64 undef
88+
; CHECK-NEXT: ret i64 poison
8989
;
9090
entry:
9191
%cmp = icmp sgt i64 %n, 3

llvm/test/Transforms/SCCP/2009-01-14-IPSCCP-Invoke.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ UnifiedReturnBlock:
2727

2828
define internal i32 @f() {
2929
; CHECK-LABEL: define internal i32 @f() {
30-
; CHECK-NEXT: ret i32 undef
30+
; CHECK-NEXT: ret i32 poison
3131
;
3232
ret i32 42
3333
}

llvm/test/Transforms/SCCP/apint-ipsccp2.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ define internal i101 @bar(i101 %A) {
77
; CHECK-NEXT: br label %[[T:.*]]
88
; CHECK: [[T]]:
99
; CHECK-NEXT: [[B:%.*]] = call i101 @bar(i101 0)
10-
; CHECK-NEXT: ret i101 undef
10+
; CHECK-NEXT: ret i101 poison
1111
;
1212
%x = icmp eq i101 %A, 0
1313
br i1 %x, label %T, label %F

llvm/test/Transforms/SCCP/arg-count-mismatch.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ define internal i16 @bar(i16 %p1, i16 %p2) {
5656
define internal i16 @vararg_prop(i16 %p1, ...) {
5757
; CHECK-LABEL: define {{[^@]+}}@vararg_prop
5858
; CHECK-SAME: (i16 [[P1:%.*]], ...) {
59-
; CHECK-NEXT: ret i16 undef
59+
; CHECK-NEXT: ret i16 poison
6060
;
6161
ret i16 %p1
6262
}

llvm/test/Transforms/SCCP/indirectbr.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ define internal i32 @indbrtest5(i1 %c) {
104104
; CHECK: target1:
105105
; CHECK-NEXT: br label [[TARGET2]]
106106
; CHECK: target2:
107-
; CHECK-NEXT: ret i32 undef
107+
; CHECK-NEXT: ret i32 poison
108108
;
109109
entry:
110110
br i1 %c, label %bb1, label %bb2

llvm/test/Transforms/SCCP/ip-constant-ranges.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ define internal i32 @f1(i32 %a, i32 %b) {
66
; CHECK-LABEL: define {{[^@]+}}@f1
77
; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) {
88
; CHECK-NEXT: entry:
9-
; CHECK-NEXT: ret i32 undef
9+
; CHECK-NEXT: ret i32 poison
1010
;
1111
entry:
1212
%cmp.a = icmp sgt i32 %a, 300
@@ -81,7 +81,7 @@ define internal i32 @f3(i32 %x) {
8181
; CHECK-LABEL: define {{[^@]+}}@f3
8282
; CHECK-SAME: (i32 [[X:%.*]]) {
8383
; CHECK-NEXT: entry:
84-
; CHECK-NEXT: ret i32 undef
84+
; CHECK-NEXT: ret i32 poison
8585
;
8686
entry:
8787
%cmp = icmp sgt i32 %x, 300
@@ -118,7 +118,7 @@ define internal i32 @f4(i32 %x) {
118118
; CHECK-LABEL: define {{[^@]+}}@f4
119119
; CHECK-SAME: (i32 [[X:%.*]]) {
120120
; CHECK-NEXT: entry:
121-
; CHECK-NEXT: ret i32 undef
121+
; CHECK-NEXT: ret i32 poison
122122
;
123123
entry:
124124
%cmp = icmp sgt i32 %x, 300
@@ -172,7 +172,7 @@ define internal i1 @test_unreachable_callee(i32 %a) {
172172
; CHECK-LABEL: define {{[^@]+}}@test_unreachable_callee
173173
; CHECK-SAME: (i32 [[A:%.*]]) {
174174
; CHECK-NEXT: entry:
175-
; CHECK-NEXT: ret i1 undef
175+
; CHECK-NEXT: ret i1 poison
176176
;
177177
entry:
178178
ret i1 true
@@ -284,7 +284,7 @@ define internal i32 @callee6.1(i32 %i) {
284284
; CHECK-LABEL: define {{[^@]+}}@callee6.1
285285
; CHECK-SAME: (i32 [[I:%.*]]) {
286286
; CHECK-NEXT: [[RES:%.*]] = call i32 @callee6.2(i32 [[I]])
287-
; CHECK-NEXT: ret i32 undef
287+
; CHECK-NEXT: ret i32 poison
288288
;
289289
%res = call i32 @callee6.2(i32 %i)
290290
ret i32 %res
@@ -295,7 +295,7 @@ define internal i32 @callee6.2(i32 %i) {
295295
; CHECK-SAME: (i32 [[I:%.*]]) {
296296
; CHECK-NEXT: br label [[IF_THEN:%.*]]
297297
; CHECK: if.then:
298-
; CHECK-NEXT: ret i32 undef
298+
; CHECK-NEXT: ret i32 poison
299299
;
300300

301301
%cmp = icmp ne i32 %i, 0

llvm/test/Transforms/SCCP/ip-ranges-phis.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
define internal i32 @f1(i32 %x) {
55
; CHECK-LABEL: define {{[^@]+}}@f1
66
; CHECK-SAME: (i32 [[X:%.*]]) {
7-
; CHECK-NEXT: ret i32 undef
7+
; CHECK-NEXT: ret i32 poison
88
;
99
%cmp = icmp sgt i32 %x, 300
1010
%res = select i1 %cmp, i32 1, i32 2

llvm/test/Transforms/SCCP/ip-ranges-select.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ define internal i32 @callee.1(i32 %arg) {
2222
; CHECK-NEXT: [[SEL:%.*]] = select i1 false, i32 16, i32 [[ARG]]
2323
; CHECK-NEXT: br label [[BB10:%.*]]
2424
; CHECK: bb10:
25-
; CHECK-NEXT: ret i32 undef
25+
; CHECK-NEXT: ret i32 poison
2626
;
2727
%c.1 = icmp slt i32 %arg, 0
2828
%sel = select i1 %c.1, i32 16, i32 %arg

llvm/test/Transforms/SCCP/ipsccp-basic.ll

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
define internal i32 @test1a(i32 %A) {
99
; CHECK-LABEL: define internal i32 @test1a
1010
; CHECK-SAME: (i32 [[A:%.*]]) {
11-
; CHECK-NEXT: ret i32 undef
11+
; CHECK-NEXT: ret i32 poison
1212
;
1313
%X = add i32 1, 2
1414
ret i32 %A
@@ -34,7 +34,7 @@ define internal i32 @test2a(i32 %A) {
3434
; CHECK-NEXT: br label [[T:%.*]]
3535
; CHECK: T:
3636
; CHECK-NEXT: [[B:%.*]] = call i32 @test2a(i32 0)
37-
; CHECK-NEXT: ret i32 undef
37+
; CHECK-NEXT: ret i32 poison
3838
;
3939
%C = icmp eq i32 %A, 0
4040
br i1 %C, label %T, label %F
@@ -97,7 +97,7 @@ F:
9797

9898
define internal {i64,i64} @test4a() {
9999
; CHECK-LABEL: define internal { i64, i64 } @test4a() {
100-
; CHECK-NEXT: ret { i64, i64 } undef
100+
; CHECK-NEXT: ret { i64, i64 } poison
101101
;
102102
%a = insertvalue {i64,i64} undef, i64 4, 1
103103
%b = insertvalue {i64,i64} %a, i64 5, 0
@@ -107,13 +107,13 @@ define internal {i64,i64} @test4a() {
107107
define i64 @test4b() personality ptr @__gxx_personality_v0 {
108108
; CHECK-LABEL: define range(i64 0, 6) i64 @test4b() personality ptr @__gxx_personality_v0 {
109109
; CHECK-NEXT: [[A:%.*]] = invoke { i64, i64 } @test4a()
110-
; CHECK-NEXT: to label [[A:%.*]] unwind label [[B:%.*]]
110+
; CHECK-NEXT: to label [[A:%.*]] unwind label [[B:%.*]]
111111
; CHECK: A:
112112
; CHECK-NEXT: [[C:%.*]] = call i64 @test4c(i64 5)
113113
; CHECK-NEXT: ret i64 5
114114
; CHECK: B:
115115
; CHECK-NEXT: [[VAL:%.*]] = landingpad { ptr, i32 }
116-
; CHECK-NEXT: catch ptr null
116+
; CHECK-NEXT: catch ptr null
117117
; CHECK-NEXT: ret i64 0
118118
;
119119
%a = invoke {i64,i64} @test4a()
@@ -131,7 +131,7 @@ B:
131131
define internal i64 @test4c(i64 %a) {
132132
; CHECK-LABEL: define internal i64 @test4c
133133
; CHECK-SAME: (i64 [[A:%.*]]) {
134-
; CHECK-NEXT: ret i64 undef
134+
; CHECK-NEXT: ret i64 poison
135135
;
136136
ret i64 %a
137137
}
@@ -141,7 +141,7 @@ define internal i64 @test4c(i64 %a) {
141141
; PR4313
142142
define internal {i64,i64} @test5a() {
143143
; CHECK-LABEL: define internal { i64, i64 } @test5a() {
144-
; CHECK-NEXT: ret { i64, i64 } undef
144+
; CHECK-NEXT: ret { i64, i64 } poison
145145
;
146146
%a = insertvalue {i64,i64} undef, i64 4, 1
147147
%b = insertvalue {i64,i64} %a, i64 5, 0
@@ -151,13 +151,13 @@ define internal {i64,i64} @test5a() {
151151
define i64 @test5b() personality ptr @__gxx_personality_v0 {
152152
; CHECK-LABEL: define range(i64 0, 6) i64 @test5b() personality ptr @__gxx_personality_v0 {
153153
; CHECK-NEXT: [[A:%.*]] = invoke { i64, i64 } @test5a()
154-
; CHECK-NEXT: to label [[A:%.*]] unwind label [[B:%.*]]
154+
; CHECK-NEXT: to label [[A:%.*]] unwind label [[B:%.*]]
155155
; CHECK: A:
156156
; CHECK-NEXT: [[C:%.*]] = call i64 @test5c({ i64, i64 } { i64 5, i64 4 })
157157
; CHECK-NEXT: ret i64 5
158158
; CHECK: B:
159159
; CHECK-NEXT: [[VAL:%.*]] = landingpad { ptr, i32 }
160-
; CHECK-NEXT: catch ptr null
160+
; CHECK-NEXT: catch ptr null
161161
; CHECK-NEXT: ret i64 0
162162
;
163163
%a = invoke {i64,i64} @test5a()
@@ -174,7 +174,7 @@ B:
174174
define internal i64 @test5c({i64,i64} %a) {
175175
; CHECK-LABEL: define internal i64 @test5c
176176
; CHECK-SAME: ({ i64, i64 } [[A:%.*]]) {
177-
; CHECK-NEXT: ret i64 undef
177+
; CHECK-NEXT: ret i64 poison
178178
;
179179
%b = extractvalue {i64,i64} %a, 0
180180
ret i64 %b
@@ -206,7 +206,7 @@ define i64 @test6b() {
206206
define internal %T @test7a(i32 %A) {
207207
; CHECK-LABEL: define internal %T @test7a
208208
; CHECK-SAME: (i32 [[A:%.*]]) {
209-
; CHECK-NEXT: ret [[T:%.*]] undef
209+
; CHECK-NEXT: ret [[T:%.*]] poison
210210
;
211211
%X = add i32 1, %A
212212
%mrv0 = insertvalue %T undef, i32 %X, 0
@@ -216,7 +216,7 @@ define internal %T @test7a(i32 %A) {
216216

217217
define i32 @test7b() {
218218
; CHECK-LABEL: define i32 @test7b() {
219-
; CHECK-NEXT: [[X:%.*]] = call [[T:%.*]] @test7a(i32 17)
219+
; CHECK-NEXT: [[X:%.*]] = call [[T:%.*]] @[[TEST7A:[a-zA-Z0-9_$\"\\.-]*[a-zA-Z_$\"\\.-][a-zA-Z0-9_$\"\\.-]*]](i32 17)
220220
; CHECK-NEXT: ret i32 36
221221
;
222222
%X = call %T @test7a(i32 17)
@@ -232,7 +232,7 @@ define internal {} @test8a(i32 %A, ptr %P) {
232232
; CHECK-LABEL: define internal {} @test8a
233233
; CHECK-SAME: (i32 [[A:%.*]], ptr [[P:%.*]]) {
234234
; CHECK-NEXT: store i32 5, ptr [[P]], align 4
235-
; CHECK-NEXT: ret {} undef
235+
; CHECK-NEXT: ret {} poison
236236
;
237237
store i32 %A, ptr %P
238238
ret {} {}

llvm/test/Transforms/SCCP/ipsccp-clear-returned.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ define internal i32 @func_return_undef(i32 returned %arg) {
2020
; CHECK-LABEL: define internal i32 @func_return_undef(
2121
; CHECK-SAME: i32 [[ARG:%.*]]) {
2222
; CHECK-NEXT: [[ENTRY:.*:]]
23-
; CHECK-NEXT: ret i32 undef
23+
; CHECK-NEXT: ret i32 poison
2424
;
2525
entry:
2626
ret i32 %arg
@@ -44,7 +44,7 @@ define internal i32 @blockaddr_user(i1 %c, i32 returned %d) {
4444
; CHECK: [[TARGET1]]:
4545
; CHECK-NEXT: br label %[[TARGET2]]
4646
; CHECK: [[TARGET2]]:
47-
; CHECK-NEXT: ret i32 undef
47+
; CHECK-NEXT: ret i32 poison
4848
;
4949
entry:
5050
br i1 %c, label %bb1, label %bb2

llvm/test/Transforms/SCCP/ipsccp-noundef.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,36 @@
44

55
define internal noundef i32 @ret_noundef() {
66
; CHECK-LABEL: define internal i32 @ret_noundef() {
7-
; CHECK-NEXT: ret i32 undef
7+
; CHECK-NEXT: ret i32 poison
88
;
99
ret i32 0
1010
}
1111

1212
define internal dereferenceable(1) ptr @ret_dereferenceable() {
1313
; CHECK-LABEL: define internal ptr @ret_dereferenceable() {
14-
; CHECK-NEXT: ret ptr undef
14+
; CHECK-NEXT: ret ptr poison
1515
;
1616
ret ptr @g
1717
}
1818

1919
define internal dereferenceable_or_null(1) ptr @ret_dereferenceable_or_null() {
2020
; CHECK-LABEL: define internal ptr @ret_dereferenceable_or_null() {
21-
; CHECK-NEXT: ret ptr undef
21+
; CHECK-NEXT: ret ptr poison
2222
;
2323
ret ptr @g
2424
}
2525

2626
; Non-null is fine, because it does not cause immediate UB.
2727
define internal nonnull ptr @ret_nonnull() {
2828
; CHECK-LABEL: define internal nonnull ptr @ret_nonnull() {
29-
; CHECK-NEXT: ret ptr undef
29+
; CHECK-NEXT: ret ptr poison
3030
;
3131
ret ptr @g
3232
}
3333

3434
define internal nonnull ptr @ret_nonnull_noundef() {
3535
; CHECK-LABEL: define internal nonnull ptr @ret_nonnull_noundef() {
36-
; CHECK-NEXT: ret ptr undef
36+
; CHECK-NEXT: ret ptr poison
3737
;
3838
ret ptr @g
3939
}

llvm/test/Transforms/SCCP/ipsccp-preserve-analysis.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ define internal i32 @f1() readnone {
2525
; IR-NEXT: [[ENTRY:.*:]]
2626
; IR-NEXT: br label %[[BB2:.*]]
2727
; IR: [[BB2]]:
28-
; IR-NEXT: ret i32 undef
28+
; IR-NEXT: ret i32 poison
2929
;
3030
entry:
3131
br i1 false, label %bb1, label %bb2

llvm/test/Transforms/SCCP/issue59602-assume-like-call-users.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ define internal i32 @assume_self_user() {
2020
; CHECK-LABEL: define {{[^@]+}}@assume_self_user() {
2121
; CHECK-NEXT: [[OBJSIZE:%.*]] = call i32 @llvm.objectsize.i32.p0(ptr @assume_self_user, i1 false, i1 false, i1 false)
2222
; CHECK-NEXT: store i32 [[OBJSIZE]], ptr @extern, align 4
23-
; CHECK-NEXT: ret i32 undef
23+
; CHECK-NEXT: ret i32 poison
2424
;
2525
%objsize = call i32 @llvm.objectsize.i32.p0(ptr @assume_self_user, i1 false, i1 false, i1 false)
2626
store i32 %objsize, ptr @extern
@@ -50,7 +50,7 @@ define internal i32 @constexpr_self_user(i32 %arg0) addrspace(1) {
5050
; CHECK-SAME: (i32 [[ARG0:%.*]]) addrspace(1) {
5151
; CHECK-NEXT: [[OBJSIZE:%.*]] = call i32 @llvm.objectsize.i32.p0(ptr addrspacecast (ptr addrspace(1) @constexpr_self_user to ptr), i1 false, i1 false, i1 false)
5252
; CHECK-NEXT: store i32 [[OBJSIZE]], ptr @extern, align 4
53-
; CHECK-NEXT: ret i32 undef
53+
; CHECK-NEXT: ret i32 poison
5454
;
5555
%objsize = call i32 @llvm.objectsize.i32.p0(ptr addrspacecast (ptr addrspace(1) @constexpr_self_user to ptr), i1 false, i1 false, i1 false)
5656
store i32 %objsize, ptr @extern

0 commit comments

Comments
 (0)