Move Mem2Reg/DifferingTypes.ll -> ScalarRepl/DifferingTypes.ll. -scalarrepl
[oota-llvm.git] / test / Transforms / Reassociate / backwards.ll
1 ; RUN:  llvm-as < %s | opt -reassociate -dce -gcse | llvm-dis | grep add | wc -l | grep 8
2 ; This test corresponds to GCC PR16157.  Reassociate should arrange for 4 additions to be
3 ; left in each function.
4
5 ; We currently don't implement this.  This would require looking globally to 
6 ; find out which expressions are available, which we currently do not do.
7
8 ; XFAIL: *
9
10 %a4 = external global int
11 %a3 = external global int
12 %a2 = external global int
13 %a1 = external global int
14 %a0 = external global int
15 %b4 = external global int
16 %b3 = external global int
17 %b2 = external global int
18 %b1 = external global int
19
20 implementation   ; Functions:
21
22 void %test1() {
23         %tmp.0 = load int* %a4          ; <int> [#uses=1]
24         %tmp.1 = load int* %a3          ; <int> [#uses=2]
25         %tmp.2 = add int %tmp.0, %tmp.1         ; <int> [#uses=1]
26         %tmp.3 = load int* %a2          ; <int> [#uses=3]
27         %tmp.4 = add int %tmp.2, %tmp.3         ; <int> [#uses=1]
28         %tmp.5 = load int* %a1          ; <int> [#uses=4]
29         %tmp.6 = add int %tmp.4, %tmp.5         ; <int> [#uses=1]
30         %tmp.7 = load int* %a0          ; <int> [#uses=4]
31         %tmp.8 = add int %tmp.6, %tmp.7         ; <int> [#uses=1]
32         store int %tmp.8, int* %a4
33         %tmp.11 = add int %tmp.1, %tmp.3                ; <int> [#uses=1]
34         %tmp.13 = add int %tmp.11, %tmp.5               ; <int> [#uses=1]
35         %tmp.15 = add int %tmp.13, %tmp.7               ; <int> [#uses=1]
36         store int %tmp.15, int* %a3
37         %tmp.18 = add int %tmp.3, %tmp.5                ; <int> [#uses=1]
38         %tmp.20 = add int %tmp.18, %tmp.7               ; <int> [#uses=1]
39         store int %tmp.20, int* %a2
40         %tmp.23 = add int %tmp.5, %tmp.7                ; <int> [#uses=1]
41         store int %tmp.23, int* %a1
42         ret void
43 }
44
45 void %test2() {
46         %tmp.0 = load int* %a4          ; <int> [#uses=1]
47         %tmp.1 = load int* %a3          ; <int> [#uses=2]
48         %tmp.2 = add int %tmp.0, %tmp.1         ; <int> [#uses=1]
49         %tmp.3 = load int* %a2          ; <int> [#uses=3]
50         %tmp.4 = add int %tmp.2, %tmp.3         ; <int> [#uses=1]
51         %tmp.5 = load int* %a1          ; <int> [#uses=4]
52         %tmp.6 = add int %tmp.4, %tmp.5         ; <int> [#uses=1]
53         %tmp.7 = load int* %a0          ; <int> [#uses=4]
54         %tmp.8 = add int %tmp.6, %tmp.7         ; <int> [#uses=1]
55         store int %tmp.8, int* %b4
56         %tmp.11 = add int %tmp.1, %tmp.3                ; <int> [#uses=1]
57         %tmp.13 = add int %tmp.11, %tmp.5               ; <int> [#uses=1]
58         %tmp.15 = add int %tmp.13, %tmp.7               ; <int> [#uses=1]
59         store int %tmp.15, int* %b3
60         %tmp.18 = add int %tmp.3, %tmp.5                ; <int> [#uses=1]
61         %tmp.20 = add int %tmp.18, %tmp.7               ; <int> [#uses=1]
62         store int %tmp.20, int* %b2
63         %tmp.23 = add int %tmp.5, %tmp.7                ; <int> [#uses=1]
64         store int %tmp.23, int* %b1
65         ret void
66 }