40 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes2; RUN: opt -S -o - -passes=function-attrs < %s | FileCheck %s3 4; Verify we remove argmemonly/inaccessiblememonly/inaccessiblemem_or_argmemonly5; function attributes when we derive readnone.6 7define ptr @given_argmem_infer_readnone(ptr %p) #0 {8; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)9; CHECK-LABEL: @given_argmem_infer_readnone(10; CHECK-NEXT: entry:11; CHECK-NEXT: ret ptr [[P:%.*]]12;13entry:14 ret ptr %p15}16 17define ptr @given_inaccessible_infer_readnone(ptr %p) #1 {18; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)19; CHECK-LABEL: @given_inaccessible_infer_readnone(20; CHECK-NEXT: entry:21; CHECK-NEXT: ret ptr [[P:%.*]]22;23entry:24 ret ptr %p25}26 27define ptr @given_inaccessible_or_argmem_infer_readnone(ptr %p) #2 {28; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)29; CHECK-LABEL: @given_inaccessible_or_argmem_infer_readnone(30; CHECK-NEXT: entry:31; CHECK-NEXT: ret ptr [[P:%.*]]32;33entry:34 ret ptr %p35}36 37attributes #0 = { argmemonly }38attributes #1 = { inaccessiblememonly }39attributes #2 = { inaccessiblemem_or_argmemonly }40