Merge branch 'master' into msp430
[llvm/msp430.git] / test / Analysis / BasicAA / gcsetest.ll
blob1d55ca9a2a94caadee6a19fd902fdab49a0f4e2c
1 ; Test that GCSE uses basicaa to do alias analysis, which is capable of 
2 ; disambiguating some obvious cases.  All loads should be removable in 
3 ; this testcase.
5 ; RUN: llvm-as < %s | opt -basicaa -gvn -instcombine -dce \
6 ; RUN: | llvm-dis | not grep load
8 @A = global i32 7
9 @B = global i32 8
11 define i32 @test() {
12         %A1 = load i32* @A
14         store i32 123, i32* @B  ; Store cannot alias @A
16         %A2 = load i32* @A
17         %X = sub i32 %A1, %A2
18         ret i32 %X
21 define i32 @test2() {
22         %A1 = load i32* @A
23         br label %Loop
24 Loop:
25         %AP = phi i32 [0, %0], [%X, %Loop]
26         store i32 %AP, i32* @B  ; Store cannot alias @A
28         %A2 = load i32* @A
29         %X = sub i32 %A1, %A2
30         %c = icmp eq i32 %X, 0
31         br i1 %c, label %out, label %Loop
33 out:
34         ret i32 %X
37 declare void @external()
39 define i32 @test3() {
40         %X = alloca i32
41         store i32 7, i32* %X
42         call void @external()
43         %V = load i32* %X
44         ret i32 %V