Use the llvm-upgrade program to upgrade llvm assembly.
[oota-llvm.git] / test / Transforms / LoopStrengthReduce / share_code_in_preheader.ll
1 ; RUN: llvm-upgrade < %s | llvm-as | opt -loop-reduce | llvm-dis | grep mul | wc -l | grep 1
2 ; LSR should not make two copies of the Q*L expression in the preheader!
3
4 sbyte %test(sbyte* %A, sbyte* %B, int %L, int %Q, int %N) {
5 entry:
6         %tmp.6 = mul int %Q, %L         ; <int> [#uses=1]
7         %N = cast int %N to uint                ; <uint> [#uses=1]
8         br label %no_exit
9
10 no_exit:                ; preds = %no_exit, %no_exit.preheader
11         %indvar = phi uint [ 0, %entry], [ %indvar.next, %no_exit ]             ; <uint> [#uses=2]
12         %Sum.0.0 = phi sbyte [ 0, %entry], [ %tmp.21, %no_exit ]                ; <sbyte> [#uses=1]
13         %indvar = cast uint %indvar to int              ; <int> [#uses=1]
14         %N_addr.0.0 = sub int %N, %indvar               ; <int> [#uses=1]
15         %tmp.8 = add int %N_addr.0.0, %tmp.6            ; <int> [#uses=2]
16         %tmp.9 = getelementptr sbyte* %A, int %tmp.8            ; <sbyte*> [#uses=1]
17         %tmp.10 = load sbyte* %tmp.9            ; <sbyte> [#uses=1]
18         %tmp.17 = getelementptr sbyte* %B, int %tmp.8           ; <sbyte*> [#uses=1]
19         %tmp.18 = load sbyte* %tmp.17           ; <sbyte> [#uses=1]
20         %tmp.19 = sub sbyte %tmp.10, %tmp.18            ; <sbyte> [#uses=1]
21         %tmp.21 = add sbyte %tmp.19, %Sum.0.0           ; <sbyte> [#uses=2]
22         %indvar.next = add uint %indvar, 1              ; <uint> [#uses=2]
23         %exitcond = seteq uint %indvar.next, %N         ; <bool> [#uses=1]
24         br bool %exitcond, label %loopexit, label %no_exit
25
26 loopexit:
27         ret sbyte %tmp.21
28 }