1; RUN: opt < %s -basicaa -globals-aa -gvn -S | FileCheck %s 2 3@X = internal global i32 4 ; <i32*> [#uses=2] 4 5define 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 16define void @doesnotmodX() { 17 ret void 18} 19 20declare void @InaccessibleMemOnlyFunc( ) #0 21declare void @InaccessibleMemOrArgMemOnlyFunc( ) #1 22 23define 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 37attributes #0 = { inaccessiblememonly } 38attributes #1 = { inaccessiblemem_or_argmemonly } 39