In some rare cases, the register allocator can spill registers but end up not utilizi...
[llvm/msp430.git] / test / Transforms / Reassociate / basictest4.ll
blob608becd9c3a9e98e90dfc7761f3f28a1f2e11c64
1 ; RUN: llvm-as < %s | opt -reassociate -gvn -instcombine | llvm-dis | not grep add
3 @a = weak global i32 0          ; <i32*> [#uses=1]
4 @b = weak global i32 0          ; <i32*> [#uses=1]
5 @c = weak global i32 0          ; <i32*> [#uses=1]
6 @d = weak global i32 0          ; <i32*> [#uses=0]
8 define i32 @foo() {
9         %tmp.0 = load i32* @a           ; <i32> [#uses=2]
10         %tmp.1 = load i32* @b           ; <i32> [#uses=2]
11         ; (a+b)
12         %tmp.2 = add i32 %tmp.0, %tmp.1         ; <i32> [#uses=1]
13         %tmp.4 = load i32* @c           ; <i32> [#uses=2]
14         ; (a+b)+c
15         %tmp.5 = add i32 %tmp.2, %tmp.4         ; <i32> [#uses=1]
16         ; (a+c)
17         %tmp.8 = add i32 %tmp.0, %tmp.4         ; <i32> [#uses=1]
18         ; (a+c)+b
19         %tmp.11 = add i32 %tmp.8, %tmp.1                ; <i32> [#uses=1]
20         ; X ^ X = 0
21         %RV = xor i32 %tmp.5, %tmp.11           ; <i32> [#uses=1]
22         ret i32 %RV