blob: 4af5cc16db88be97720ba62a97a2c2c69bcd3081 [file] [log] [blame]
Chris Lattnerac39b4e2002-08-22 17:31:36 +00001; 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.
4
Misha Brukmane78760e2003-09-16 15:29:54 +00005; RUN: llvm-as < %s | opt -basicaa -load-vn -gcse -instcombine -dce | llvm-dis | not grep load
Chris Lattnerac39b4e2002-08-22 17:31:36 +00006
7%A = global int 7
8%B = global int 8
9implementation
10
11int %test() {
12 %A1 = load int* %A
13
14 store int 123, int* %B ; Store cannot alias %A
15
16 %A2 = load int* %A
17 %X = sub int %A1, %A2
18 ret int %X
19}
20
Chris Lattner8673e442002-08-22 20:22:55 +000021int %test2() {
22 %A1 = load int* %A
23 br label %Loop
24Loop:
25 %AP = phi int [0, %0], [%X, %Loop]
26 store int %AP, int* %B ; Store cannot alias %A
27
28 %A2 = load int* %A
29 %X = sub int %A1, %A2
30 %c = seteq int %X, 0
31 br bool %c, label %out, label %Loop
32
33out:
34 ret int %X
35}
36
Chris Lattner13060892004-03-12 22:38:31 +000037declare void %external()
38
39int %test3() {
40 %X = alloca int
41 store int 7, int* %X
42 call void %external()
43 %V = load int* %X
44 ret int %V
45}
46