Add a priority queue class, which is a wrapper around std::priority_queue
[oota-llvm.git] / test / Transforms / LoopStrengthReduce / share_code_in_preheader.ll
index 532fe820ac4fb6d305b7b1a9fd2bb83ee7796861..a78fa5f349fa34a676e3042b7c739b9d373d7d75 100644 (file)
@@ -1,28 +1,27 @@
-; RUN: llvm-as < %s | opt -loop-reduce | llvm-dis | grep mul | wc -l | grep 1
+; RUN: llvm-as < %s | opt -loop-reduce | llvm-dis | grep mul | count 1
 ; LSR should not make two copies of the Q*L expression in the preheader!
 
-sbyte %test(sbyte* %A, sbyte* %B, int %L, int %Q, int %N) {
+define i8 @test(i8* %A, i8* %B, i32 %L, i32 %Q, i32 %N.s) {
 entry:
-       %tmp.6 = mul int %Q, %L         ; <int> [#uses=1]
-       %N = cast int %N to uint                ; <uint> [#uses=1]
+       %tmp.6 = mul i32 %Q, %L         ; <i32> [#uses=1]
+       %N = bitcast i32 %N.s to i32            ; <i32> [#uses=1]
        br label %no_exit
-
-no_exit:               ; preds = %no_exit, %no_exit.preheader
-       %indvar = phi uint [ 0, %entry], [ %indvar.next, %no_exit ]             ; <uint> [#uses=2]
-       %Sum.0.0 = phi sbyte [ 0, %entry], [ %tmp.21, %no_exit ]                ; <sbyte> [#uses=1]
-       %indvar = cast uint %indvar to int              ; <int> [#uses=1]
-       %N_addr.0.0 = sub int %N, %indvar               ; <int> [#uses=1]
-       %tmp.8 = add int %N_addr.0.0, %tmp.6            ; <int> [#uses=2]
-       %tmp.9 = getelementptr sbyte* %A, int %tmp.8            ; <sbyte*> [#uses=1]
-       %tmp.10 = load sbyte* %tmp.9            ; <sbyte> [#uses=1]
-       %tmp.17 = getelementptr sbyte* %B, int %tmp.8           ; <sbyte*> [#uses=1]
-       %tmp.18 = load sbyte* %tmp.17           ; <sbyte> [#uses=1]
-       %tmp.19 = sub sbyte %tmp.10, %tmp.18            ; <sbyte> [#uses=1]
-       %tmp.21 = add sbyte %tmp.19, %Sum.0.0           ; <sbyte> [#uses=2]
-       %indvar.next = add uint %indvar, 1              ; <uint> [#uses=2]
-       %exitcond = seteq uint %indvar.next, %N         ; <bool> [#uses=1]
-       br bool %exitcond, label %loopexit, label %no_exit
-
-loopexit:
-       ret sbyte %tmp.21
+no_exit:               ; preds = %no_exit, %entry
+       %indvar.ui = phi i32 [ 0, %entry ], [ %indvar.next, %no_exit ]          ; <i32> [#uses=2]
+       %Sum.0.0 = phi i8 [ 0, %entry ], [ %tmp.21, %no_exit ]          ; <i8> [#uses=1]
+       %indvar = bitcast i32 %indvar.ui to i32         ; <i32> [#uses=1]
+       %N_addr.0.0 = sub i32 %N.s, %indvar             ; <i32> [#uses=1]
+       %tmp.8 = add i32 %N_addr.0.0, %tmp.6            ; <i32> [#uses=2]
+       %tmp.9 = getelementptr i8* %A, i32 %tmp.8               ; <i8*> [#uses=1]
+       %tmp.10 = load i8* %tmp.9               ; <i8> [#uses=1]
+       %tmp.17 = getelementptr i8* %B, i32 %tmp.8              ; <i8*> [#uses=1]
+       %tmp.18 = load i8* %tmp.17              ; <i8> [#uses=1]
+       %tmp.19 = sub i8 %tmp.10, %tmp.18               ; <i8> [#uses=1]
+       %tmp.21 = add i8 %tmp.19, %Sum.0.0              ; <i8> [#uses=2]
+       %indvar.next = add i32 %indvar.ui, 1            ; <i32> [#uses=2]
+       %exitcond = icmp eq i32 %indvar.next, %N                ; <i1> [#uses=1]
+       br i1 %exitcond, label %loopexit, label %no_exit
+loopexit:              ; preds = %no_exit
+       ret i8 %tmp.21
 }
+