blob: 221b539655a9a4a5a8da262bcc1a2a3dbcc6eaa7 [file] [log] [blame]
Chandler Carruth1926b702016-01-08 10:55:52 +00001; RUN: opt < %s -basicaa -functionattrs -rpo-functionattrs -S | FileCheck %s
James Molloy7e9bdd52015-11-12 10:55:20 +00002
3; CHECK: define i32 @leaf() #0
4define i32 @leaf() {
5 ret i32 1
6}
7
8; CHECK: define i32 @self_rec() #1
9define i32 @self_rec() {
10 %a = call i32 @self_rec()
11 ret i32 4
12}
13
14; CHECK: define i32 @indirect_rec() #1
15define i32 @indirect_rec() {
16 %a = call i32 @indirect_rec2()
17 ret i32 %a
18}
19; CHECK: define i32 @indirect_rec2() #1
20define i32 @indirect_rec2() {
21 %a = call i32 @indirect_rec()
22 ret i32 %a
23}
24
25; CHECK: define i32 @extern() #1
26define i32 @extern() {
27 %a = call i32 @k()
28 ret i32 %a
29}
30declare i32 @k() readnone
31
Chandler Carruth632d2082016-02-13 08:47:51 +000032; CHECK: define void @intrinsic(i8* nocapture %dest, i8* nocapture readonly %src, i32 %len) {
33define void @intrinsic(i8* %dest, i8* %src, i32 %len) {
34 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* %src, i32 %len, i32 1, i1 false)
35 ret void
36}
37declare void @llvm.memcpy.p0i8.p0i8.i32(i8*, i8*, i32, i32, i1)
38
James Molloy7e9bdd52015-11-12 10:55:20 +000039; CHECK: define internal i32 @called_by_norecurse() #0
40define internal i32 @called_by_norecurse() {
41 %a = call i32 @k()
42 ret i32 %a
43}
44define void @m() norecurse {
45 %a = call i32 @called_by_norecurse()
46 ret void
47}
48
49; CHECK: define internal i32 @called_by_norecurse_indirectly() #0
50define internal i32 @called_by_norecurse_indirectly() {
51 %a = call i32 @k()
52 ret i32 %a
53}
54define internal void @o() {
55 %a = call i32 @called_by_norecurse_indirectly()
56 ret void
57}
58define void @p() norecurse {
59 call void @o()
60 ret void
61}
62
63; CHECK: attributes #0 = { norecurse readnone }
64; CHECK: attributes #1 = { readnone }