62 lines · plain
1; Test that GCSE uses basicaa to do alias analysis, which is capable of2; disambiguating some obvious cases. All loads should be removable in3; this testcase.4 5; RUN: opt < %s -aa-pipeline=basic-aa -passes=gvn,instcombine,dce -S | FileCheck %s6 7@A = global i32 78@B = global i32 89 10; CHECK: define i32 @test()11; CHECK-NEXT: store i32 123, ptr @B12; CHECK-NEXT: ret i32 013 14define i32 @test() {15 %A1 = load i32, ptr @A16 17 store i32 123, ptr @B ; Store cannot alias @A18 19 %A2 = load i32, ptr @A20 %X = sub i32 %A1, %A221 ret i32 %X22}23 24; CHECK: define i32 @test2()25; CHECK-NEXT: br label %Loop26; CHECK: Loop:27; CHECK-NEXT: store i32 0, ptr @B28; CHECK-NEXT: br i1 true, label %out, label %Loop29; CHECK: out:30; CHECK-NEXT: ret i32 031 32define i32 @test2() {33 %A1 = load i32, ptr @A34 br label %Loop35Loop:36 %AP = phi i32 [0, %0], [%X, %Loop]37 store i32 %AP, ptr @B ; Store cannot alias @A38 39 %A2 = load i32, ptr @A40 %X = sub i32 %A1, %A241 %c = icmp eq i32 %X, 042 br i1 %c, label %out, label %Loop43 44out:45 ret i32 %X46}47 48declare void @external()49 50; CHECK: define i32 @test3()51; CHECK-NEXT: call void @external()52; CHECK-NEXT: ret i32 753 54define i32 @test3() {55 %X = alloca i3256 store i32 7, ptr %X57 call void @external()58 %V = load i32, ptr %X59 ret i32 %V60}61 62