Move a DenseMap's declaration outside of a loop, and just call
[oota-llvm.git] / test / Transforms / LICM / sink_multiple_exits.ll
1 ; This testcase ensures that we can sink instructions from loops with
2 ; multiple exits.
3 ;
4 ; RUN: llvm-as < %s | opt -licm | llvm-dis | \
5 ; RUN:    %prcontext mul 1 | grep {Out\[12\]:}
6
7 define i32 @test(i32 %N, i1 %C) {
8 Entry:
9         br label %Loop
10 Loop:           ; preds = %ContLoop, %Entry
11         %N_addr.0.pn = phi i32 [ %dec, %ContLoop ], [ %N, %Entry ]              ; <i32> [#uses=3]
12         %tmp.6 = mul i32 %N, %N_addr.0.pn               ; <i32> [#uses=1]
13         %tmp.7 = sub i32 %tmp.6, %N             ; <i32> [#uses=2]
14         %dec = add i32 %N_addr.0.pn, -1         ; <i32> [#uses=1]
15         br i1 %C, label %ContLoop, label %Out1
16 ContLoop:               ; preds = %Loop
17         %tmp.1 = icmp ne i32 %N_addr.0.pn, 1            ; <i1> [#uses=1]
18         br i1 %tmp.1, label %Loop, label %Out2
19 Out1:           ; preds = %Loop
20         ret i32 %tmp.7
21 Out2:           ; preds = %ContLoop
22         ret i32 %tmp.7
23 }
24