2
2
; RUN: opt -S -passes=function-attrs < %s | FileCheck --check-prefixes=COMMON,FNATTRS %s
3
3
; RUN: opt -S -passes=attributor-light < %s | FileCheck --check-prefixes=COMMON,ATTRIBUTOR %s
4
4
5
+ ; Make sure norecurse is inferred on the calling functions
6
+
5
7
define internal void @sendmsg_is_norecurse () {
6
8
; FNATTRS: Function Attrs: mustprogress norecurse nounwind willreturn
7
9
; FNATTRS-LABEL: define internal void @sendmsg_is_norecurse(
@@ -12,7 +14,7 @@ define internal void @sendmsg_is_norecurse() {
12
14
; ATTRIBUTOR: Function Attrs: mustprogress norecurse nounwind willreturn
13
15
; ATTRIBUTOR-LABEL: define internal void @sendmsg_is_norecurse(
14
16
; 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]+]]
16
18
; ATTRIBUTOR-NEXT: ret void
17
19
;
18
20
call void @llvm.amdgcn.s.sendmsg (i32 1 , i32 0 )
@@ -37,10 +39,10 @@ define internal i32 @sendmsg_rtn_is_norecurse() {
37
39
; FNATTRS-NEXT: [[RES:%.*]] = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 1)
38
40
; FNATTRS-NEXT: ret i32 [[RES]]
39
41
;
40
- ; ATTRIBUTOR: Function Attrs: mustprogress nounwind willreturn
42
+ ; ATTRIBUTOR: Function Attrs: mustprogress norecurse nounwind willreturn
41
43
; 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 ]]
44
46
; ATTRIBUTOR-NEXT: ret i32 [[RES]]
45
47
;
46
48
%res = call i32 @llvm.amdgcn.s.sendmsg.rtn (i32 1 )
@@ -54,12 +56,12 @@ define void @user() {
54
56
; FNATTRS-NEXT: call void @sendmsg_rtn_is_norecurse()
55
57
; FNATTRS-NEXT: ret void
56
58
;
57
- ; ATTRIBUTOR: Function Attrs: nounwind
59
+ ; ATTRIBUTOR: Function Attrs: norecurse nounwind
58
60
; 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 ]]
63
65
; ATTRIBUTOR-NEXT: ret void
64
66
;
65
67
call void @sendmsg_is_norecurse ()
@@ -71,16 +73,13 @@ define void @user() {
71
73
; FNATTRS: attributes #[[ATTR0]] = { mustprogress norecurse nounwind willreturn }
72
74
; FNATTRS: attributes #[[ATTR1]] = { norecurse nounwind }
73
75
; 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 }
76
77
;.
77
78
; ATTRIBUTOR: attributes #[[ATTR0]] = { mustprogress norecurse nounwind willreturn }
78
79
; 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 }
86
85
;.
0 commit comments