blob: d451ed5017e28d71133df97db91f008819877fcc [file] [log] [blame]
Chris Lattner8d621882003-02-03 21:31:43 +00001; Test that GCSE uses ds-aa to do alias analysis, which is capable of
2; disambiguating some cases.
3
4; RUN: if as < %s | opt -ds-aa -load-vn -gcse -instcombine -dce | dis | grep ELIM
5; RUN: then exit 1
6; RUN: else exit 0
7; RUN: fi
8
9%intpair = type {int*, int*}
10implementation
11
12%intpair *%alloc_pair() {
13 %Ap = malloc int
14 %Bp = malloc int
15 %C = malloc {int*, int*}
16 %C1p = getelementptr {int*, int*}* %C, long 0, ubyte 0
17 store int* %Ap, int** %C1p
18 %C2p = getelementptr {int*, int*}* %C, long 0, ubyte 1
19 store int* %Bp, int** %C2p
20 ret %intpair* %C
21}
22
23int %test() {
24 %C = call %intpair* %alloc_pair()
25 %C1p = getelementptr %intpair* %C, long 0, ubyte 0
26 %C2p = getelementptr %intpair* %C, long 0, ubyte 1
27 %A = load int** %C1p
28 %B = load int** %C2p
29 %A1 = load int* %A
30
31 store int 123, int* %B ; Store cannot alias %A
32
33 %A2 = load int* %A
34 %ELIM_x = sub int %A1, %A2
35 ret int %ELIM_x
36}
37
38int* %getp(%intpair* %P) {
39 %pp = getelementptr %intpair* %P, long 0, ubyte 0
40 %V = load int** %pp
41 ret int *%V
42}
43
44int %test2() { ; Test context sensitivity
45 %C1 = call %intpair* %alloc_pair()
46 %C2 = call %intpair* %alloc_pair()
47 %P1 = call int* %getp(%intpair* %C1)
48 %P2 = call int* %getp(%intpair* %C2)
49 %X = load int* %P1
50 store int 7, int* %P2
51 %Y = load int* %P1
52 %ELIM_x = sub int %X, %Y
53 ret int %ELIM_x
54}
55