1; RUN: opt -S -o - -function-attrs %s | FileCheck %s 2; RUN: opt -S -o - -passes=function-attrs %s | FileCheck %s 3 4; Verify we remove argmemonly/inaccessiblememonly/inaccessiblemem_or_argmemonly 5; function attributes when we derive readnone. 6 7; Function Attrs: argmemonly 8define i32* @given_argmem_infer_readnone(i32* %p) #0 { 9; CHECK: define i32* @given_argmem_infer_readnone(i32* readnone returned %p) #0 { 10entry: 11 ret i32* %p 12} 13 14; Function Attrs: inaccessiblememonly 15define i32* @given_inaccessible_infer_readnone(i32* %p) #1 { 16; CHECK: define i32* @given_inaccessible_infer_readnone(i32* readnone returned %p) #0 { 17entry: 18 ret i32* %p 19} 20 21; Function Attrs: inaccessiblemem_or_argmemonly 22define i32* @given_inaccessible_or_argmem_infer_readnone(i32* %p) #2 { 23; CHECK: define i32* @given_inaccessible_or_argmem_infer_readnone(i32* readnone returned %p) #0 { 24entry: 25 ret i32* %p 26} 27 28attributes #0 = { argmemonly } 29attributes #1 = { inaccessiblememonly } 30attributes #2 = { inaccessiblemem_or_argmemonly } 31; CHECK: attributes #0 = { norecurse nounwind readnone } 32; CHECK-NOT: attributes 33