11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --version 5
2- ; RUN: opt < %s -passes=" lto<O2>" -S | FileCheck %s
2+ ; RUN: opt < %s -passes=function-attrs -force- lto-funcattrs -S | FileCheck %s
33
44; This test includes a call graph with multiple SCCs. The purpose of this is
55; to check that norecurse is not added when a function is part of non-singular
66; SCC.
77; There are three different SCCs in this test:
8- ; SCC#1: main , foo, bar, foo1, bar1
8+ ; SCC#1: f1 , foo, bar, foo1, bar1
99; SCC#2: bar2, bar3, bar4
1010; SCC#3: baz, fun
1111; None of these functions should be marked as norecurse
1212
1313; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
14- define internal void @bar1 () local_unnamed_addr #0 {
14+ define internal void @bar1 () #0 {
1515; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
16- ; CHECK-LABEL: define internal fastcc void @bar1(
17- ; CHECK-SAME: ) unnamed_addr #[[ATTR0:[0-9]+]] {
16+ ; CHECK-LABEL: define internal void @bar1(
17+ ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
1818; CHECK-NEXT: [[ENTRY:.*:]]
19- ; CHECK-NEXT: [[CALL:%.*]] = tail call i32 @main ()
19+ ; CHECK-NEXT: tail call void @f1 ()
2020; CHECK-NEXT: ret void
2121;
2222entry:
23- %call = tail call i32 @main ()
23+ tail call void @f1 ()
2424 ret void
2525}
2626
2727; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
28- define dso_local noundef i32 @main () local_unnamed_addr #0 {
28+ define internal void @f1 () #0 {
2929; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
30- ; CHECK-LABEL: define dso_local noundef i32 @main (
31- ; CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
30+ ; CHECK-LABEL: define internal void @f1 (
31+ ; CHECK-SAME: ) #[[ATTR0]] {
3232; CHECK-NEXT: [[ENTRY:.*:]]
33- ; CHECK-NEXT: tail call fastcc void @foo()
34- ; CHECK-NEXT: tail call fastcc void @bar2()
35- ; CHECK-NEXT: tail call fastcc void @baz()
36- ; CHECK-NEXT: ret i32 0
33+ ; CHECK-NEXT: tail call void @foo()
34+ ; CHECK-NEXT: tail call void @bar2()
35+ ; CHECK-NEXT: tail call void @baz()
36+ ; CHECK-NEXT: ret void
3737;
3838entry:
3939 tail call void @foo ()
4040 tail call void @bar2 ()
4141 tail call void @baz ()
42+ ret void
43+ }
44+
45+ ; Function Attrs: nofree noinline norecurse nosync nounwind memory(none) uwtable
46+ define dso_local noundef i32 @main () #1 {
47+ ; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind memory(none) uwtable
48+ ; CHECK-LABEL: define dso_local noundef i32 @main(
49+ ; CHECK-SAME: ) #[[ATTR1:[0-9]+]] {
50+ ; CHECK-NEXT: [[ENTRY:.*:]]
51+ ; CHECK-NEXT: tail call void @f1()
52+ ; CHECK-NEXT: ret i32 0
53+ ;
54+ entry:
55+ tail call void @f1 ()
4256 ret i32 0
4357}
4458
4559; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
46- define internal void @foo1 () local_unnamed_addr #0 {
60+ define internal void @foo1 () #0 {
4761; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
48- ; CHECK-LABEL: define internal fastcc void @foo1(
49- ; CHECK-SAME: ) unnamed_addr #[[ATTR0]] {
62+ ; CHECK-LABEL: define internal void @foo1(
63+ ; CHECK-SAME: ) #[[ATTR0]] {
5064; CHECK-NEXT: [[ENTRY:.*:]]
51- ; CHECK-NEXT: tail call fastcc void @bar1()
65+ ; CHECK-NEXT: tail call void @bar1()
5266; CHECK-NEXT: ret void
5367;
5468entry:
@@ -57,12 +71,12 @@ entry:
5771}
5872
5973; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
60- define internal void @bar () local_unnamed_addr #0 {
74+ define internal void @bar () #0 {
6175; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
62- ; CHECK-LABEL: define internal fastcc void @bar(
63- ; CHECK-SAME: ) unnamed_addr #[[ATTR0]] {
76+ ; CHECK-LABEL: define internal void @bar(
77+ ; CHECK-SAME: ) #[[ATTR0]] {
6478; CHECK-NEXT: [[ENTRY:.*:]]
65- ; CHECK-NEXT: tail call fastcc void @foo1()
79+ ; CHECK-NEXT: tail call void @foo1()
6680; CHECK-NEXT: ret void
6781;
6882entry:
@@ -71,12 +85,12 @@ entry:
7185}
7286
7387; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
74- define internal void @foo () local_unnamed_addr #0 {
88+ define internal void @foo () #0 {
7589; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
76- ; CHECK-LABEL: define internal fastcc void @foo(
77- ; CHECK-SAME: ) unnamed_addr #[[ATTR0]] {
90+ ; CHECK-LABEL: define internal void @foo(
91+ ; CHECK-SAME: ) #[[ATTR0]] {
7892; CHECK-NEXT: [[ENTRY:.*:]]
79- ; CHECK-NEXT: tail call fastcc void @bar()
93+ ; CHECK-NEXT: tail call void @bar()
8094; CHECK-NEXT: ret void
8195;
8296entry:
@@ -85,12 +99,12 @@ entry:
8599}
86100
87101; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
88- define internal void @bar4 () local_unnamed_addr #0 {
102+ define internal void @bar4 () #0 {
89103; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
90- ; CHECK-LABEL: define internal fastcc void @bar4(
91- ; CHECK-SAME: ) unnamed_addr #[[ATTR0]] {
104+ ; CHECK-LABEL: define internal void @bar4(
105+ ; CHECK-SAME: ) #[[ATTR0]] {
92106; CHECK-NEXT: [[ENTRY:.*:]]
93- ; CHECK-NEXT: tail call fastcc void @bar2()
107+ ; CHECK-NEXT: tail call void @bar2()
94108; CHECK-NEXT: ret void
95109;
96110entry:
@@ -99,12 +113,12 @@ entry:
99113}
100114
101115; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
102- define internal void @bar2 () local_unnamed_addr #0 {
116+ define internal void @bar2 () #0 {
103117; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
104- ; CHECK-LABEL: define internal fastcc void @bar2(
105- ; CHECK-SAME: ) unnamed_addr #[[ATTR0]] {
118+ ; CHECK-LABEL: define internal void @bar2(
119+ ; CHECK-SAME: ) #[[ATTR0]] {
106120; CHECK-NEXT: [[ENTRY:.*:]]
107- ; CHECK-NEXT: tail call fastcc void @bar3()
121+ ; CHECK-NEXT: tail call void @bar3()
108122; CHECK-NEXT: ret void
109123;
110124entry:
@@ -113,12 +127,12 @@ entry:
113127}
114128
115129; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
116- define internal void @bar3 () local_unnamed_addr #0 {
130+ define internal void @bar3 () #0 {
117131; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
118- ; CHECK-LABEL: define internal fastcc void @bar3(
119- ; CHECK-SAME: ) unnamed_addr #[[ATTR0]] {
132+ ; CHECK-LABEL: define internal void @bar3(
133+ ; CHECK-SAME: ) #[[ATTR0]] {
120134; CHECK-NEXT: [[ENTRY:.*:]]
121- ; CHECK-NEXT: tail call fastcc void @bar4()
135+ ; CHECK-NEXT: tail call void @bar4()
122136; CHECK-NEXT: ret void
123137;
124138entry:
@@ -127,12 +141,12 @@ entry:
127141}
128142
129143; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
130- define internal void @fun () local_unnamed_addr #0 {
144+ define internal void @fun () #0 {
131145; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
132- ; CHECK-LABEL: define internal fastcc void @fun(
133- ; CHECK-SAME: ) unnamed_addr #[[ATTR0]] {
146+ ; CHECK-LABEL: define internal void @fun(
147+ ; CHECK-SAME: ) #[[ATTR0]] {
134148; CHECK-NEXT: [[ENTRY:.*:]]
135- ; CHECK-NEXT: tail call fastcc void @baz()
149+ ; CHECK-NEXT: tail call void @baz()
136150; CHECK-NEXT: ret void
137151;
138152entry:
@@ -141,12 +155,12 @@ entry:
141155}
142156
143157; Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
144- define internal void @baz () local_unnamed_addr #0 {
158+ define internal void @baz () #0 {
145159; CHECK: Function Attrs: nofree noinline nosync nounwind memory(none) uwtable
146- ; CHECK-LABEL: define internal fastcc void @baz(
147- ; CHECK-SAME: ) unnamed_addr #[[ATTR0]] {
160+ ; CHECK-LABEL: define internal void @baz(
161+ ; CHECK-SAME: ) #[[ATTR0]] {
148162; CHECK-NEXT: [[ENTRY:.*:]]
149- ; CHECK-NEXT: tail call fastcc void @fun()
163+ ; CHECK-NEXT: tail call void @fun()
150164; CHECK-NEXT: ret void
151165;
152166entry:
@@ -155,3 +169,4 @@ entry:
155169}
156170
157171attributes #0 = { nofree noinline nosync nounwind memory(none) uwtable }
172+ attributes #1 = { nofree noinline norecurse nosync nounwind memory(none) uwtable }
0 commit comments