brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 04575e4 Raw
88 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals all --version 52; RUN: opt -S -passes=function-attrs < %s | FileCheck --check-prefixes=COMMON,FNATTRS %s3; RUN: opt -S -passes=attributor-light < %s | FileCheck --check-prefixes=COMMON,ATTRIBUTOR %s4 5; Make sure norecurse is inferred on the calling functions6 7define internal void @sendmsg_is_norecurse() {8; FNATTRS: Function Attrs: mustprogress norecurse nounwind willreturn9; FNATTRS-LABEL: define internal void @sendmsg_is_norecurse(10; FNATTRS-SAME: ) #[[ATTR0:[0-9]+]] {11; FNATTRS-NEXT:    call void @llvm.amdgcn.s.sendmsg(i32 1, i32 0)12; FNATTRS-NEXT:    ret void13;14; ATTRIBUTOR: Function Attrs: mustprogress norecurse nounwind willreturn15; ATTRIBUTOR-LABEL: define internal void @sendmsg_is_norecurse(16; ATTRIBUTOR-SAME: ) #[[ATTR0:[0-9]+]] {17; ATTRIBUTOR-NEXT:    call void @llvm.amdgcn.s.sendmsg(i32 1, i32 0) #[[ATTR4:[0-9]+]]18; ATTRIBUTOR-NEXT:    ret void19;20  call void @llvm.amdgcn.s.sendmsg(i32 1, i32 0)21  ret void22}23 24define internal void @sendmsghalt_is_norecurse() {25; COMMON: Function Attrs: norecurse nounwind26; COMMON-LABEL: define internal void @sendmsghalt_is_norecurse(27; COMMON-SAME: ) #[[ATTR1:[0-9]+]] {28; COMMON-NEXT:    call void @llvm.amdgcn.s.sendmsghalt(i32 1, i32 0)29; COMMON-NEXT:    ret void30;31  call void @llvm.amdgcn.s.sendmsghalt(i32 1, i32 0)32  ret void33}34 35define internal i32 @sendmsg_rtn_is_norecurse() {36; FNATTRS: Function Attrs: mustprogress norecurse nounwind willreturn37; FNATTRS-LABEL: define internal i32 @sendmsg_rtn_is_norecurse(38; FNATTRS-SAME: ) #[[ATTR0]] {39; FNATTRS-NEXT:    [[RES:%.*]] = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 1)40; FNATTRS-NEXT:    ret i32 [[RES]]41;42; ATTRIBUTOR: Function Attrs: mustprogress norecurse nounwind willreturn43; ATTRIBUTOR-LABEL: define internal i32 @sendmsg_rtn_is_norecurse(44; ATTRIBUTOR-SAME: ) #[[ATTR0]] {45; ATTRIBUTOR-NEXT:    [[RES:%.*]] = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 1) #[[ATTR4]]46; ATTRIBUTOR-NEXT:    ret i32 [[RES]]47;48  %res = call i32 @llvm.amdgcn.s.sendmsg.rtn(i32 1)49  ret i32 %res50}51 52define void @user() {53; FNATTRS: Function Attrs: norecurse nounwind54; FNATTRS-LABEL: define void @user(55; FNATTRS-SAME: ) #[[ATTR1]] {56; FNATTRS-NEXT:    call void @sendmsg_is_norecurse()57; FNATTRS-NEXT:    call void @sendmsghalt_is_norecurse()58; FNATTRS-NEXT:    [[TMP1:%.*]] = call i32 @sendmsg_rtn_is_norecurse()59; FNATTRS-NEXT:    ret void60;61; ATTRIBUTOR: Function Attrs: norecurse nounwind62; ATTRIBUTOR-LABEL: define void @user(63; ATTRIBUTOR-SAME: ) #[[ATTR1]] {64; ATTRIBUTOR-NEXT:    call void @sendmsg_is_norecurse() #[[ATTR5:[0-9]+]]65; ATTRIBUTOR-NEXT:    call void @sendmsghalt_is_norecurse() #[[ATTR6:[0-9]+]]66; ATTRIBUTOR-NEXT:    [[TMP1:%.*]] = call i32 @sendmsg_rtn_is_norecurse() #[[ATTR6]]67; ATTRIBUTOR-NEXT:    ret void68;69  call void @sendmsg_is_norecurse()70  call void @sendmsghalt_is_norecurse()71  call i32 @sendmsg_rtn_is_norecurse()72  ret void73}74;.75; FNATTRS: attributes #[[ATTR0]] = { mustprogress norecurse nounwind willreturn }76; FNATTRS: attributes #[[ATTR1]] = { norecurse nounwind }77; FNATTRS: attributes #[[ATTR2:[0-9]+]] = { nocallback nounwind willreturn }78; FNATTRS: attributes #[[ATTR3:[0-9]+]] = { nocallback nounwind }79;.80; ATTRIBUTOR: attributes #[[ATTR0]] = { mustprogress norecurse nounwind willreturn }81; ATTRIBUTOR: attributes #[[ATTR1]] = { norecurse nounwind }82; ATTRIBUTOR: attributes #[[ATTR2:[0-9]+]] = { nocallback nounwind willreturn }83; ATTRIBUTOR: attributes #[[ATTR3:[0-9]+]] = { nocallback nounwind }84; ATTRIBUTOR: attributes #[[ATTR4]] = { willreturn }85; ATTRIBUTOR: attributes #[[ATTR5]] = { nounwind willreturn }86; ATTRIBUTOR: attributes #[[ATTR6]] = { nounwind }87;.88