Skip to content

Commit 4acc8ee

Browse files
committed
[SCCP] Generate test checks (NFC)
Some of these are just old, while others previously did not use UTC due to missing features that have since been implemented (such as signature matching).
1 parent cc8fdd6 commit 4acc8ee

8 files changed

+156
-74
lines changed

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

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,35 @@
1-
; RUN: opt < %s -passes=ipsccp -S | grep "ret i32 42"
2-
; RUN: opt < %s -passes=ipsccp -S | grep "ret i32 undef"
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
33
; PR3325
44

55
define i32 @main() personality ptr @__gxx_personality_v0 {
6-
%tmp1 = invoke i32 @f()
7-
to label %UnifiedReturnBlock unwind label %lpad
6+
; CHECK-LABEL: define i32 @main() personality ptr @__gxx_personality_v0 {
7+
; CHECK-NEXT: [[TMP1:%.*]] = invoke i32 @f()
8+
; CHECK-NEXT: to label %[[UNIFIEDRETURNBLOCK:.*]] unwind label %[[LPAD:.*]]
9+
; CHECK: [[LPAD]]:
10+
; CHECK-NEXT: [[VAL:%.*]] = landingpad { ptr, i32 }
11+
; CHECK-NEXT: cleanup
12+
; CHECK-NEXT: unreachable
13+
; CHECK: [[UNIFIEDRETURNBLOCK]]:
14+
; CHECK-NEXT: ret i32 42
15+
;
16+
%tmp1 = invoke i32 @f()
17+
to label %UnifiedReturnBlock unwind label %lpad
818

919
lpad:
10-
%val = landingpad { ptr, i32 }
11-
cleanup
12-
unreachable
20+
%val = landingpad { ptr, i32 }
21+
cleanup
22+
unreachable
1323

1424
UnifiedReturnBlock:
15-
ret i32 %tmp1
25+
ret i32 %tmp1
1626
}
1727

1828
define internal i32 @f() {
19-
ret i32 42
29+
; CHECK-LABEL: define internal i32 @f() {
30+
; CHECK-NEXT: ret i32 undef
31+
;
32+
ret i32 42
2033
}
2134

2235
declare ptr @__cxa_begin_catch(ptr) nounwind
Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
1-
; RUN: opt < %s -passes=ipsccp -S | grep -v "ret i101 0" | \
2-
; RUN: grep -v "ret i101 undef" | not grep ret
3-
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
43

54
define internal i101 @bar(i101 %A) {
6-
%x = icmp eq i101 %A, 0
7-
br i1 %x, label %T, label %F
5+
; CHECK-LABEL: define internal i101 @bar(
6+
; CHECK-SAME: i101 [[A:%.*]]) {
7+
; CHECK-NEXT: br label %[[T:.*]]
8+
; CHECK: [[T]]:
9+
; CHECK-NEXT: [[B:%.*]] = call i101 @bar(i101 0)
10+
; CHECK-NEXT: ret i101 undef
11+
;
12+
%x = icmp eq i101 %A, 0
13+
br i1 %x, label %T, label %F
814
T:
9-
%B = call i101 @bar(i101 0)
10-
ret i101 0
15+
%B = call i101 @bar(i101 0)
16+
ret i101 0
1117
F: ; unreachable
12-
%C = call i101 @bar(i101 1)
13-
ret i101 %C
18+
%C = call i101 @bar(i101 1)
19+
ret i101 %C
1420
}
1521

1622
define i101 @foo() {
17-
%X = call i101 @bar(i101 0)
18-
ret i101 %X
23+
; CHECK-LABEL: define i101 @foo() {
24+
; CHECK-NEXT: [[X:%.*]] = call i101 @bar(i101 0)
25+
; CHECK-NEXT: ret i101 0
26+
;
27+
%X = call i101 @bar(i101 0)
28+
ret i101 %X
1929
}
Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,51 @@
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+
14
; if IPSCCP determines a function returns undef,
25
; then the "returned" attribute of input arguments
36
; should be cleared.
47

5-
; RUN: opt < %s -passes=ipsccp -S | FileCheck %s
68
define i32 @main() {
7-
; CHECK-LABEL: @main
9+
; CHECK-LABEL: define i32 @main() {
10+
; CHECK-NEXT: [[ENTRY:.*:]]
11+
; CHECK-NEXT: [[CALL:%.*]] = call i32 @func_return_undef(i32 1)
12+
; CHECK-NEXT: ret i32 1
13+
;
814
entry:
9-
; CHECK-NEXT: entry:
1015
%call = call i32 @func_return_undef(i32 returned 1)
11-
; CHECK: call i32 @func_return_undef(i32 1)
12-
; CHECK-NOT: returned
1316
ret i32 %call
14-
; CHECK: ret i32 1
1517
}
1618

1719
define internal i32 @func_return_undef(i32 returned %arg) {
18-
; CHECK: {{define.*@func_return_undef}}
19-
; CHECK-NOT: returned
20+
; CHECK-LABEL: define internal i32 @func_return_undef(
21+
; CHECK-SAME: i32 [[ARG:%.*]]) {
22+
; CHECK-NEXT: [[ENTRY:.*:]]
23+
; CHECK-NEXT: ret i32 undef
24+
;
2025
entry:
21-
; CHECK-NEXT: entry:
22-
; CHECK-NEXT: {{ret.*undef}}
2326
ret i32 %arg
2427
}
2528

26-
2729
; The only case that users of zapped functions are non-call site
2830
; users is that they are blockaddr users. Skip them because we
2931
; want to remove the returned attribute for call sites
30-
31-
; CHECK: {{define.*@blockaddr_user}}
32-
; CHECK-NOT: returned
3332
define internal i32 @blockaddr_user(i1 %c, i32 returned %d) {
33+
; CHECK-LABEL: define internal i32 @blockaddr_user(
34+
; CHECK-SAME: i1 [[C:%.*]], i32 [[D:%.*]]) {
35+
; CHECK-NEXT: [[ENTRY:.*:]]
36+
; CHECK-NEXT: br i1 [[C]], label %[[BB1:.*]], label %[[BB2:.*]]
37+
; CHECK: [[BB1]]:
38+
; CHECK-NEXT: br label %[[BRANCH_BLOCK:.*]]
39+
; CHECK: [[BB2]]:
40+
; CHECK-NEXT: br label %[[BRANCH_BLOCK]]
41+
; CHECK: [[BRANCH_BLOCK]]:
42+
; CHECK-NEXT: [[ADDR:%.*]] = phi ptr [ blockaddress(@blockaddr_user, %[[TARGET1:.*]]), %[[BB1]] ], [ blockaddress(@blockaddr_user, %[[TARGET2:.*]]), %[[BB2]] ]
43+
; CHECK-NEXT: indirectbr ptr [[ADDR]], [label %[[TARGET1]], label %target2]
44+
; CHECK: [[TARGET1]]:
45+
; CHECK-NEXT: br label %[[TARGET2]]
46+
; CHECK: [[TARGET2]]:
47+
; CHECK-NEXT: ret i32 undef
48+
;
3449
entry:
3550
br i1 %c, label %bb1, label %bb2
3651

@@ -47,16 +62,16 @@ branch.block:
4762
target1:
4863
br label %target2
4964

50-
; CHECK: ret i32 undef
5165
target2:
5266
ret i32 %d
5367
}
5468

5569
define i32 @call_blockaddr_user(i1 %c) {
5670
; CHECK-LABEL: define i32 @call_blockaddr_user(
57-
; CHECK-NEXT: %r = call i32 @blockaddr_user(i1 %c
58-
; CHECK-NOT: returned
59-
; CHECK-NEXT: ret i32 10
71+
; CHECK-SAME: i1 [[C:%.*]]) {
72+
; CHECK-NEXT: [[R:%.*]] = call i32 @blockaddr_user(i1 [[C]], i32 10)
73+
; CHECK-NEXT: ret i32 10
74+
;
6075
%r = call i32 @blockaddr_user(i1 %c, i32 returned 10)
6176
ret i32 %r
6277
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
12
; RUN: opt -S -passes=ipsccp < %s | FileCheck %s
23
@g = external global i8
34

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
12
; Basic test to check that DominatorTreeAnalysis is preserved by IPSCCP and
23
; the following analysis can re-use it. The test contains two trivial functions
34
; IPSCCP can simplify, so we can test the case where IPSCCP makes changes.
45

56
; RUN: opt -disable-verify -debug-pass-manager \
67
; RUN: -passes='function(require<domtree>,require<postdomtree>),ipsccp,function(require<domtree>,require<postdomtree>)' -S %s 2>&1 \
7-
; RUN: | FileCheck -check-prefixes='IR,NEW-PM' %s
8+
; RUN: | FileCheck -check-prefixes=IR,NEW-PM %s
89

9-
; RUN: opt -passes='function(require<postdomtree>),ipsccp,function(verify<domtree>)' -S %s | FileCheck -check-prefixes='IR' %s
10+
; RUN: opt -passes='function(require<postdomtree>),ipsccp,function(verify<domtree>)' -S %s | FileCheck -check-prefixes=IR %s
1011

1112
; NEW-PM: Running analysis: DominatorTreeAnalysis on f1
1213
; NEW-PM: Running analysis: PostDominatorTreeAnalysis on f1
@@ -17,18 +18,15 @@
1718
; NEW-PM-DAG: Running analysis: AssumptionAnalysis on f2
1819
; NEW-PM-NOT: Running analysis: AssumptionAnalysis
1920

20-
; IR-LABEL: @f1
21-
; IR-LABEL: entry:
22-
; IR-NEXT: br label %bb2
23-
; IR-LABEL: bb2:
24-
; IR-NEXT: undef
25-
26-
; IR-LABEL: @f2
27-
; IR-NOT: icmp
28-
; IR: br label %bbtrue
29-
; IR-LABEL: bbtrue:
30-
; IR-NEXT: ret i32 0
21+
3122
define internal i32 @f1() readnone {
23+
; IR-LABEL: define internal i32 @f1(
24+
; IR-SAME: ) #[[ATTR0:[0-9]+]] {
25+
; IR-NEXT: [[ENTRY:.*:]]
26+
; IR-NEXT: br label %[[BB2:.*]]
27+
; IR: [[BB2]]:
28+
; IR-NEXT: ret i32 undef
29+
;
3230
entry:
3331
br i1 false, label %bb1, label %bb2
3432
bb1:
@@ -38,6 +36,13 @@ bb2:
3836
}
3937

4038
define i32 @f2(i32 %n) {
39+
; IR-LABEL: define i32 @f2(
40+
; IR-SAME: i32 [[N:%.*]]) {
41+
; IR-NEXT: [[I:%.*]] = call i32 @f1()
42+
; IR-NEXT: br label %[[BBTRUE:.*]]
43+
; IR: [[BBTRUE]]:
44+
; IR-NEXT: ret i32 0
45+
;
4146
%i = call i32 @f1()
4247
%cmp = icmp eq i32 %i, 10
4348
br i1 %cmp, label %bbtrue, label %bbfalse
@@ -49,3 +54,5 @@ bbfalse:
4954
%res = add i32 %n, %i
5055
ret i32 %res
5156
}
57+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
58+
; NEW-PM: {{.*}}

llvm/test/Transforms/SCCP/range-and-ip.ll

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
22
; RUN: opt -S -passes=ipsccp %s | FileCheck %s
33

44
; Make sure IPSCCP does not assume %r < 256 for @f1. Undef is passed at a call
55
; site, which won't be eliminated.
66

77
define i1 @constant_and_undef(i64 %a) {
8-
; CHECK-LABEL: @constant_and_undef(
8+
; CHECK-LABEL: define i1 @constant_and_undef(
9+
; CHECK-SAME: i64 [[A:%.*]]) {
910
; CHECK-NEXT: [[C_1:%.*]] = call i1 @f1(i64 undef)
10-
; CHECK-NEXT: br label [[BB1:%.*]]
11-
; CHECK: bb1:
11+
; CHECK-NEXT: br label %[[BB1:.*]]
12+
; CHECK: [[BB1]]:
1213
; CHECK-NEXT: [[C_2:%.*]] = call i1 @f1(i64 10)
13-
; CHECK-NEXT: br label [[BB2:%.*]]
14-
; CHECK: bb2:
15-
; CHECK-NEXT: [[RANGE:%.*]] = and i64 [[A:%.*]], 255
14+
; CHECK-NEXT: br label %[[BB2:.*]]
15+
; CHECK: [[BB2]]:
16+
; CHECK-NEXT: [[RANGE:%.*]] = and i64 [[A]], 255
1617
; CHECK-NEXT: [[C_3:%.*]] = call i1 @f1(i64 [[RANGE]])
1718
; CHECK-NEXT: ret i1 true
1819
;
@@ -34,8 +35,9 @@ bb2:
3435
declare void @sideeffect(i1, i64 %a)
3536

3637
define internal i1 @f1(i64 %r) {
37-
; CHECK-LABEL: define {{.*}} @f1(
38-
; CHECK-NEXT: call void @sideeffect(i1 true, i64 [[R:%.*]])
38+
; CHECK-LABEL: define internal i1 @f1(
39+
; CHECK-SAME: i64 [[R:%.*]]) {
40+
; CHECK-NEXT: call void @sideeffect(i1 true, i64 [[R]])
3941
; CHECK-NEXT: ret i1 undef
4042
;
4143
%c = icmp ult i64 %r, 256

llvm/test/Transforms/SCCP/solve-after-each-resolving-undefs-for-function.ll

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
12
; RUN: opt < %s -passes=ipsccp -S | FileCheck %s
23

3-
; CHECK-LABEL: @testf(
4-
; CHECK: ret i32 undef
54
;
65
define internal i32 @testf(i1 %c) {
6+
; CHECK-LABEL: define internal i32 @testf(
7+
; CHECK-SAME: i1 [[C:%.*]]) {
8+
; CHECK-NEXT: [[ENTRY:.*:]]
9+
; CHECK-NEXT: br i1 [[C]], label %[[IF_COND:.*]], label %[[IF_END:.*]]
10+
; CHECK: [[IF_COND]]:
11+
; CHECK-NEXT: unreachable
12+
; CHECK: [[IF_END]]:
13+
; CHECK-NEXT: ret i32 undef
14+
;
715
entry:
816
br i1 %c, label %if.cond, label %if.end
917

@@ -17,10 +25,18 @@ if.end: ; preds = %if.then1, %entry
1725
ret i32 10
1826
}
1927

20-
; CHECK-LABEL: @test1(
21-
; CHECK: ret i32 undef
2228
;
2329
define internal i32 @test1(i1 %c) {
30+
; CHECK-LABEL: define internal i32 @test1(
31+
; CHECK-SAME: i1 [[C:%.*]]) {
32+
; CHECK-NEXT: [[ENTRY:.*:]]
33+
; CHECK-NEXT: br label %[[IF_THEN:.*]]
34+
; CHECK: [[IF_THEN]]:
35+
; CHECK-NEXT: [[CALL:%.*]] = call i32 @testf(i1 [[C]])
36+
; CHECK-NEXT: br label %[[RET1:.*]]
37+
; CHECK: [[RET1]]:
38+
; CHECK-NEXT: ret i32 undef
39+
;
2440
entry:
2541
br label %if.then
2642

@@ -36,11 +52,13 @@ ret2: ; preds = %if.then, %entry
3652
ret i32 0
3753
}
3854

39-
; CHECK-LABEL: @main(
40-
; CHECK-NEXT: %res = call i32 @test1(
41-
; CHECK-NEXT: ret i32 99
4255
;
4356
define i32 @main(i1 %c) {
57+
; CHECK-LABEL: define i32 @main(
58+
; CHECK-SAME: i1 [[C:%.*]]) {
59+
; CHECK-NEXT: [[RES:%.*]] = call i32 @test1(i1 [[C]])
60+
; CHECK-NEXT: ret i32 99
61+
;
4462
%res = call i32 @test1(i1 %c)
4563
ret i32 %res
4664
}

llvm/test/Transforms/SCCP/struct-arg-resolve-undefs.ll

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
12
; RUN: opt -passes=ipsccp -S %s | FileCheck %s
23

34
%struct.S = type { i32 }
45

56

67
define void @main() {
7-
; CHECK-LABEL: void @main() {
8-
; CHECK-NEXT: %r = call i32 @f(%struct.S { i32 100 })
8+
; CHECK-LABEL: define void @main() {
9+
; CHECK-NEXT: [[R:%.*]] = call i32 @f([[STRUCT_S:%.*]] { i32 100 })
910
; CHECK-NEXT: call void @do_report(i32 123)
11+
; CHECK-NEXT: ret void
12+
;
1013
%r = call i32 @f(%struct.S { i32 100 })
1114
call void @do_report(i32 %r)
1215
ret void
@@ -15,11 +18,19 @@ define void @main() {
1518
declare void @do_report(i32)
1619

1720
define internal i32 @f(%struct.S %s.coerce) {
18-
; CHECK-LABEL: define internal i32 @f(%struct.S %s.coerce)
19-
; CHECK-LABEL: entry:
20-
; CHECK-NEXT: %call = call i8 @lsh(i8 1, i32 100)
21-
; CHECK-LABEL: if.end:
22-
; CHECK-NEXT: ret i32 undef
21+
; CHECK-LABEL: define internal i32 @f(
22+
; CHECK-SAME: [[STRUCT_S:%.*]] [[S_COERCE:%.*]]) {
23+
; CHECK-NEXT: [[ENTRY:.*]]:
24+
; CHECK-NEXT: [[CALL:%.*]] = call i8 @lsh(i8 1, i32 100)
25+
; CHECK-NEXT: br label %[[FOR_COND:.*]]
26+
; CHECK: [[FOR_COND]]:
27+
; CHECK-NEXT: [[I_0:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[INC:%.*]], %[[FOR_COND]] ]
28+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[I_0]], 1
29+
; CHECK-NEXT: [[INC]] = add nsw i32 [[I_0]], 1
30+
; CHECK-NEXT: br i1 [[CMP]], label %[[FOR_COND]], label %[[IF_END:.*]]
31+
; CHECK: [[IF_END]]:
32+
; CHECK-NEXT: ret i32 undef
33+
;
2334
entry:
2435
%ev = extractvalue %struct.S %s.coerce, 0
2536
%call = call i8 @lsh(i8 1, i32 %ev)
@@ -37,6 +48,11 @@ if.end: ; preds = %for.cond, %entry
3748
}
3849

3950
define internal i8 @lsh(i8 %l, i32 %r) {
51+
; CHECK-LABEL: define internal i8 @lsh(
52+
; CHECK-SAME: i8 [[L:%.*]], i32 [[R:%.*]]) {
53+
; CHECK-NEXT: [[ENTRY:.*:]]
54+
; CHECK-NEXT: ret i8 undef
55+
;
4056
entry:
4157
%conv = sext i8 %l to i32
4258
%cmp = icmp slt i32 %conv, 0

0 commit comments

Comments
 (0)