22; RUN: opt -S -passes=function-attrs < %s | FileCheck --check-prefixes=COMMON,FNATTRS %s
33; RUN: opt -S -passes=attributor-light < %s | FileCheck --check-prefixes=COMMON,ATTRIBUTOR %s
44
5+ ; Make sure norecurse is inferred on the calling functions
6+
57define internal void @sendmsg_is_norecurse () {
68; FNATTRS: Function Attrs: mustprogress norecurse nounwind willreturn
79; FNATTRS-LABEL: define internal void @sendmsg_is_norecurse(
@@ -12,7 +14,7 @@ define internal void @sendmsg_is_norecurse() {
1214; ATTRIBUTOR: Function Attrs: mustprogress norecurse nounwind willreturn
1315; ATTRIBUTOR-LABEL: define internal void @sendmsg_is_norecurse(
1416; ATTRIBUTOR-SAME: ) #[[ATTR0:[0-9]+]] {
15- ; ATTRIBUTOR-NEXT: call void @llvm.amdgcn.s.sendmsg(i32 1, i32 0) #[[ATTR7 :[0-9]+]]
17+ ; ATTRIBUTOR-NEXT: call void @llvm.amdgcn.s.sendmsg(i32 1, i32 0) #[[ATTR4 :[0-9]+]]
1618; ATTRIBUTOR-NEXT: ret void
1719;
1820 call void @llvm.amdgcn.s.sendmsg (i32 1 , i32 0 )
@@ -37,10 +39,10 @@ define internal i32 @sendmsg_rtn_is_norecurse() {
3739; FNATTRS-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 1)
3840; FNATTRS-NEXT: ret i32 [[RES]]
3941;
40- ; ATTRIBUTOR: Function Attrs: mustprogress nounwind willreturn
42+ ; ATTRIBUTOR: Function Attrs: mustprogress norecurse nounwind willreturn
4143; ATTRIBUTOR-LABEL: define internal i32 @sendmsg_rtn_is_norecurse(
42- ; ATTRIBUTOR-SAME: ) #[[ATTR2:[0-9]+ ]] {
43- ; ATTRIBUTOR-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 1) #[[ATTR7 ]]
44+ ; ATTRIBUTOR-SAME: ) #[[ATTR0 ]] {
45+ ; ATTRIBUTOR-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 1) #[[ATTR4 ]]
4446; ATTRIBUTOR-NEXT: ret i32 [[RES]]
4547;
4648 %res = call i32 @llvm.amdgcn.s.sendmsg.rtn (i32 1 )
@@ -54,12 +56,12 @@ define void @user() {
5456; FNATTRS-NEXT: call void @sendmsg_rtn_is_norecurse()
5557; FNATTRS-NEXT: ret void
5658;
57- ; ATTRIBUTOR: Function Attrs: nounwind
59+ ; ATTRIBUTOR: Function Attrs: norecurse nounwind
5860; ATTRIBUTOR-LABEL: define void @user(
59- ; ATTRIBUTOR-SAME: ) #[[ATTR3:[0-9]+ ]] {
60- ; ATTRIBUTOR-NEXT: call void @sendmsg_is_norecurse() #[[ATTR8 :[0-9]+]]
61- ; ATTRIBUTOR-NEXT: call void @sendmsghalt_is_norecurse() #[[ATTR3 ]]
62- ; ATTRIBUTOR-NEXT: call void @sendmsg_rtn_is_norecurse() #[[ATTR3 ]]
61+ ; ATTRIBUTOR-SAME: ) #[[ATTR1 ]] {
62+ ; ATTRIBUTOR-NEXT: call void @sendmsg_is_norecurse() #[[ATTR5 :[0-9]+]]
63+ ; ATTRIBUTOR-NEXT: call void @sendmsghalt_is_norecurse() #[[ATTR6:[0-9]+ ]]
64+ ; ATTRIBUTOR-NEXT: call void @sendmsg_rtn_is_norecurse() #[[ATTR6 ]]
6365; ATTRIBUTOR-NEXT: ret void
6466;
6567 call void @sendmsg_is_norecurse ()
@@ -71,16 +73,13 @@ define void @user() {
7173; FNATTRS: attributes #[[ATTR0]] = { mustprogress norecurse nounwind willreturn }
7274; FNATTRS: attributes #[[ATTR1]] = { norecurse nounwind }
7375; FNATTRS: attributes #[[ATTR2:[0-9]+]] = { nocallback nounwind willreturn }
74- ; FNATTRS: attributes #[[ATTR3:[0-9]+]] = { norecurse nounwind willreturn }
75- ; FNATTRS: attributes #[[ATTR4:[0-9]+]] = { nocallback nounwind }
76+ ; FNATTRS: attributes #[[ATTR3:[0-9]+]] = { nocallback nounwind }
7677;.
7778; ATTRIBUTOR: attributes #[[ATTR0]] = { mustprogress norecurse nounwind willreturn }
7879; ATTRIBUTOR: attributes #[[ATTR1]] = { norecurse nounwind }
79- ; ATTRIBUTOR: attributes #[[ATTR2]] = { mustprogress nounwind willreturn }
80- ; ATTRIBUTOR: attributes #[[ATTR3]] = { nounwind }
81- ; ATTRIBUTOR: attributes #[[ATTR4:[0-9]+]] = { nocallback nounwind willreturn }
82- ; ATTRIBUTOR: attributes #[[ATTR5:[0-9]+]] = { norecurse nounwind willreturn }
83- ; ATTRIBUTOR: attributes #[[ATTR6:[0-9]+]] = { nocallback nounwind }
84- ; ATTRIBUTOR: attributes #[[ATTR7]] = { willreturn }
85- ; ATTRIBUTOR: attributes #[[ATTR8]] = { nounwind willreturn }
80+ ; ATTRIBUTOR: attributes #[[ATTR2:[0-9]+]] = { nocallback nounwind willreturn }
81+ ; ATTRIBUTOR: attributes #[[ATTR3:[0-9]+]] = { nocallback nounwind }
82+ ; ATTRIBUTOR: attributes #[[ATTR4]] = { willreturn }
83+ ; ATTRIBUTOR: attributes #[[ATTR5]] = { nounwind willreturn }
84+ ; ATTRIBUTOR: attributes #[[ATTR6]] = { nounwind }
8685;.
0 commit comments