1 ; RUN: opt < %s -basicaa -globals-aa -gvn -S | FileCheck %s 2 3 @X = internal global i32 4 ; <i32*> [#uses=2] 4 5 define i32 @test(i32* %P) { 6 ; CHECK: @test 7 ; CHECK-NEXT: store i32 12, i32* @X 8 ; CHECK-NEXT: call void @doesnotmodX() 9 ; CHECK-NEXT: ret i32 12 10 store i32 12, i32* @X 11 call void @doesnotmodX( ) 12 %V = load i32, i32* @X ; <i32> [#uses=1] 13 ret i32 %V 14 } 15 16 define void @doesnotmodX() { 17 ret void 18 } 19 20 declare void @InaccessibleMemOnlyFunc( ) #0 21 declare void @InaccessibleMemOrArgMemOnlyFunc( ) #1 22 23 define i32 @test2(i32* %P) { 24 ; CHECK: @test2 25 ; CHECK-NEXT: store i32 12, i32* @X 26 ; CHECK-NEXT: call void @InaccessibleMemOnlyFunc() 27 ; CHECK-NEXT: call void @InaccessibleMemOrArgMemOnlyFunc() 28 ; CHECK-NOT: load i32 29 ; CHECK-NEXT: ret i32 12 30 store i32 12, i32* @X 31 call void @InaccessibleMemOnlyFunc( ) 32 call void @InaccessibleMemOrArgMemOnlyFunc( ) 33 %V = load i32, i32* @X ; <i32> [#uses=1] 34 ret i32 %V 35 } 36 37 attributes #0 = { inaccessiblememonly } 38 attributes #1 = { inaccessiblemem_or_argmemonly } 39