summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorEli Friedman <efriedma@codeaurora.org>2018-06-22 22:58:55 +0000
committerEli Friedman <efriedma@codeaurora.org>2018-06-22 22:58:55 +0000
commit203eaaf5badb8f697d37c76aaff414846bf626c3 (patch)
tree3b5adb888c1afc029249b32ccca0980f605057b6 /llvm/test
parent2cbf9730b0201bd8545b7a6e2b087785f248418c (diff)
downloadbcm5719-llvm-203eaaf5badb8f697d37c76aaff414846bf626c3.tar.gz
bcm5719-llvm-203eaaf5badb8f697d37c76aaff414846bf626c3.zip
[LoopReroll] Rewrite induction variable rewriting.
This gets rid of a bunch of weird special cases; instead, just use SCEV rewriting for everything. In addition to being simpler, this fixes a bug where we would use the wrong stride in certain edge cases. The one bit I'm not quite sure about is the trip count handling, specifically the FIXME about overflow. In general, I think we need to widen the exit condition, but that's probably not profitable if the new type isn't legal, so we probably need a check somewhere. That said, I don't think I'm making the existing problem any worse. As a followup to this, a bunch of IV-related code in root-finding could be cleaned up; with SCEV-based rewriting, there isn't any reason to assume a loop will have exactly one or two PHI nodes. Differential Revision: https://reviews.llvm.org/D45191 llvm-svn: 335400
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/LoopReroll/basic.ll87
-rw-r--r--llvm/test/Transforms/LoopReroll/complex_reroll.ll41
-rw-r--r--llvm/test/Transforms/LoopReroll/indvar_with_ext.ll18
-rw-r--r--llvm/test/Transforms/LoopReroll/nonconst_lb.ll34
-rw-r--r--llvm/test/Transforms/LoopReroll/ptrindvar.ll4
-rw-r--r--llvm/test/Transforms/LoopReroll/reduction.ll12
6 files changed, 120 insertions, 76 deletions
diff --git a/llvm/test/Transforms/LoopReroll/basic.ll b/llvm/test/Transforms/LoopReroll/basic.ll
index 096b17b303c..6e2f2fcabf1 100644
--- a/llvm/test/Transforms/LoopReroll/basic.ll
+++ b/llvm/test/Transforms/LoopReroll/basic.ll
@@ -79,11 +79,12 @@ for.body: ; preds = %entry, %for.body
; CHECK: for.body:
; CHECK: %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %entry ]
+; CHECK: %0 = trunc i64 %indvar to i32
; CHECK: %call = tail call i32 @foo(i32 0) #1
; CHECK: %arrayidx = getelementptr inbounds i32, i32* %x, i64 %indvar
; CHECK: store i32 %call, i32* %arrayidx, align 4
; CHECK: %indvar.next = add i64 %indvar, 1
-; CHECK: %exitcond = icmp eq i64 %indvar, 1499
+; CHECK: %exitcond = icmp eq i32 %0, 1499
; CHECK: br i1 %exitcond, label %for.end, label %for.body
; CHECK: ret
@@ -205,15 +206,16 @@ for.body: ; preds = %entry, %for.body
; CHECK: for.body:
; CHECK: %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %entry ]
+; CHECK: %0 = trunc i64 %indvar to i32
; CHECK: %arrayidx = getelementptr inbounds float, float* %b, i64 %indvar
-; CHECK: %0 = load float, float* %arrayidx, align 4
-; CHECK: %mul = fmul float %0, %alpha
+; CHECK: %1 = load float, float* %arrayidx, align 4
+; CHECK: %mul = fmul float %1, %alpha
; CHECK: %arrayidx2 = getelementptr inbounds float, float* %a, i64 %indvar
-; CHECK: %1 = load float, float* %arrayidx2, align 4
-; CHECK: %add = fadd float %1, %mul
+; CHECK: %2 = load float, float* %arrayidx2, align 4
+; CHECK: %add = fadd float %2, %mul
; CHECK: store float %add, float* %arrayidx2, align 4
; CHECK: %indvar.next = add i64 %indvar, 1
-; CHECK: %exitcond = icmp eq i64 %indvar, 3199
+; CHECK: %exitcond = icmp eq i32 %0, 3199
; CHECK: br i1 %exitcond, label %for.end, label %for.body
; CHECK: ret
@@ -302,18 +304,19 @@ for.body: ; preds = %entry, %for.body
; CHECK: for.body:
; CHECK: %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %entry ]
+; CHECK: %0 = trunc i64 %indvar to i32
; CHECK: %arrayidx = getelementptr inbounds i32, i32* %ip, i64 %indvar
-; CHECK: %0 = load i32, i32* %arrayidx, align 4
-; CHECK: %idxprom1 = sext i32 %0 to i64
+; CHECK: %1 = load i32, i32* %arrayidx, align 4
+; CHECK: %idxprom1 = sext i32 %1 to i64
; CHECK: %arrayidx2 = getelementptr inbounds float, float* %b, i64 %idxprom1
-; CHECK: %1 = load float, float* %arrayidx2, align 4
-; CHECK: %mul = fmul float %1, %alpha
+; CHECK: %2 = load float, float* %arrayidx2, align 4
+; CHECK: %mul = fmul float %2, %alpha
; CHECK: %arrayidx4 = getelementptr inbounds float, float* %a, i64 %indvar
-; CHECK: %2 = load float, float* %arrayidx4, align 4
-; CHECK: %add = fadd float %2, %mul
+; CHECK: %3 = load float, float* %arrayidx4, align 4
+; CHECK: %add = fadd float %3, %mul
; CHECK: store float %add, float* %arrayidx4, align 4
; CHECK: %indvar.next = add i64 %indvar, 1
-; CHECK: %exitcond = icmp eq i64 %indvar, 3199
+; CHECK: %exitcond = icmp eq i32 %0, 3199
; CHECK: br i1 %exitcond, label %for.end, label %for.body
; CHECK: ret
@@ -374,8 +377,8 @@ for.body: ; preds = %for.body, %entry
; CHECK: %arrayidx6 = getelementptr inbounds i32, i32* %x, i64 %0
; CHECK: store i32 %call, i32* %arrayidx6, align 4
; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
-; CHECK: %exitcond2 = icmp eq i64 %0, 1505
-; CHECK: br i1 %exitcond2, label %for.end, label %for.body
+; CHECK: %exitcond1 = icmp eq i64 %indvars.iv, 1499
+; CHECK: br i1 %exitcond1, label %for.end, label %for.body
for.end: ; preds = %for.body
ret void
@@ -434,8 +437,8 @@ for.body: ; preds = %for.body, %entry
; CHECK: %arrayidx6 = getelementptr inbounds i32, i32* %x, i64 %0
; CHECK: store i32 %call, i32* %arrayidx6, align 4
; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
-; CHECK: %exitcond2 = icmp eq i64 %indvars.iv, 1499
-; CHECK: br i1 %exitcond2, label %for.end, label %for.body
+; CHECK: %exitcond1 = icmp eq i64 %indvars.iv, 1499
+; CHECK: br i1 %exitcond1, label %for.end, label %for.body
for.end: ; preds = %for.body
ret void
@@ -481,7 +484,7 @@ for.body: ; preds = %for.body, %entry
; CHECK: %arrayidx = getelementptr inbounds i32, i32* %x, i64 %0
; CHECK: store i32 %call, i32* %arrayidx, align 4
; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
-; CHECK: %exitcond1 = icmp eq i64 %0, 1502
+; CHECK: %exitcond1 = icmp eq i64 %indvars.iv, 1499
; CHECK: br i1 %exitcond1, label %for.end, label %for.body
for.end: ; preds = %for.body
@@ -599,8 +602,8 @@ for.body: ; preds = %for.body, %entry
; CHECK-NEXT: %scevgep = getelementptr i32, i32* %x, i64 %indvars.iv
; CHECK-NEXT: store i32 %call, i32* %scevgep, align 4
; CHECK-NEXT: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
-; CHECK-NEXT: %exitcond2 = icmp eq i32* %scevgep, %scevgep1
-; CHECK-NEXT: br i1 %exitcond2, label %for.end, label %for.body
+; CHECK-NEXT: %exitcond1 = icmp eq i64 %indvars.iv, 1499
+; CHECK-NEXT: br i1 %exitcond1, label %for.end, label %for.body
for.end: ; preds = %for.body
ret void
@@ -738,6 +741,50 @@ for.end:
ret void
}
+define void @pointer_bitcast_baseinst(i16* %arg, i8* %arg1, i64 %arg2) {
+; CHECK-LABEL: @pointer_bitcast_baseinst(
+; CHECK: bb3:
+; CHECK-NEXT: %indvar = phi i64 [ %indvar.next, %bb3 ], [ 0, %bb ]
+; CHECK-NEXT: %4 = shl i64 %indvar, 3
+; CHECK-NEXT: %5 = add i64 %4, 1
+; CHECK-NEXT: %tmp5 = shl nuw i64 %5, 1
+; CHECK-NEXT: %tmp6 = getelementptr i8, i8* %arg1, i64 %tmp5
+; CHECK-NEXT: %tmp7 = bitcast i8* %tmp6 to <8 x i16>*
+; CHECK-NEXT: %tmp8 = load <8 x i16>, <8 x i16>* %tmp7, align 2
+; CHECK-NEXT: %tmp13 = getelementptr i16, i16* %arg, i64 %5
+; CHECK-NEXT: %tmp14 = bitcast i16* %tmp13 to <8 x i16>*
+; CHECK-NEXT: store <8 x i16> %tmp8, <8 x i16>* %tmp14, align 2
+; CHECK-NEXT: %indvar.next = add i64 %indvar, 1
+; CHECK-NEXT: %exitcond = icmp eq i64 %indvar, %3
+; CHECK-NEXT: br i1 %exitcond, label %bb19, label %bb3
+bb:
+ br label %bb3
+
+bb3: ; preds = %bb3, %bb
+ %tmp = phi i64 [ 1, %bb ], [ %tmp17, %bb3 ]
+ %tmp4 = add nuw i64 %tmp, 8
+ %tmp5 = shl nuw i64 %tmp, 1
+ %tmp6 = getelementptr i8, i8* %arg1, i64 %tmp5
+ %tmp7 = bitcast i8* %tmp6 to <8 x i16>*
+ %tmp8 = load <8 x i16>, <8 x i16>* %tmp7, align 2
+ %tmp9 = shl i64 %tmp4, 1
+ %tmp10 = getelementptr i8, i8* %arg1, i64 %tmp9
+ %tmp11 = bitcast i8* %tmp10 to <8 x i16>*
+ %tmp12 = load <8 x i16>, <8 x i16>* %tmp11, align 2
+ %tmp13 = getelementptr i16, i16* %arg, i64 %tmp
+ %tmp14 = bitcast i16* %tmp13 to <8 x i16>*
+ store <8 x i16> %tmp8, <8 x i16>* %tmp14, align 2
+ %tmp15 = getelementptr i16, i16* %arg, i64 %tmp4
+ %tmp16 = bitcast i16* %tmp15 to <8 x i16>*
+ store <8 x i16> %tmp12, <8 x i16>* %tmp16, align 2
+ %tmp17 = add nuw nsw i64 %tmp, 16
+ %tmp18 = icmp eq i64 %tmp17, %arg2
+ br i1 %tmp18, label %bb19, label %bb3
+
+bb19: ; preds = %bb3
+ ret void
+}
+
attributes #0 = { nounwind uwtable }
attributes #1 = { nounwind }
diff --git a/llvm/test/Transforms/LoopReroll/complex_reroll.ll b/llvm/test/Transforms/LoopReroll/complex_reroll.ll
index 3a2c7221578..7dea5b7b3f8 100644
--- a/llvm/test/Transforms/LoopReroll/complex_reroll.ll
+++ b/llvm/test/Transforms/LoopReroll/complex_reroll.ll
@@ -10,15 +10,15 @@ entry:
while.body:
;CHECK-LABEL: while.body:
-;CHECK-NEXT: %indvar = phi i32 [ %indvar.next, %while.body ], [ 0, %entry ]
-;CHECK-NEXT: %buf.021 = phi i8* [ getelementptr inbounds ([16 x i8], [16 x i8]* @aaa, i64 0, i64 0), %entry ], [ %add.ptr, %while.body ]
+;CHECK-NEXT: %indvar = phi i64 [ %indvar.next, %while.body ], [ 0, %entry ]
;CHECK-NEXT: %sum44.020 = phi i64 [ 0, %entry ], [ %add, %while.body ]
-;CHECK-NEXT: [[T2:%[0-9]+]] = load i8, i8* %buf.021, align 1
+;CHECK-NEXT: %0 = trunc i64 %indvar to i32
+;CHECK-NEXT: %scevgep = getelementptr [16 x i8], [16 x i8]* @aaa, i64 0, i64 %indvar
+;CHECK-NEXT: [[T2:%[0-9]+]] = load i8, i8* %scevgep, align 1
;CHECK-NEXT: %conv = zext i8 [[T2]] to i64
;CHECK-NEXT: %add = add i64 %conv, %sum44.020
-;CHECK-NEXT: %add.ptr = getelementptr inbounds i8, i8* %buf.021, i64 1
-;CHECK-NEXT: %indvar.next = add i32 %indvar, 1
-;CHECK-NEXT: %exitcond = icmp eq i32 %indvar, 1
+;CHECK-NEXT: %indvar.next = add i64 %indvar, 1
+;CHECK-NEXT: %exitcond = icmp eq i32 %0, 15
;CHECK-NEXT: br i1 %exitcond, label %while.end, label %while.body
%dec22 = phi i32 [ 4, %entry ], [ %dec, %while.body ]
@@ -67,14 +67,14 @@ for.cond.cleanup:
for.body:
;CHECK-LABEL: for.body:
-;CHECK-NEXT: %indvar = phi i32 [ %indvar.next, %for.body ], [ 0, %for.body.lr.ph ]
+;CHECK-NEXT: %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %for.body.lr.ph ]
;CHECK-NEXT: %S.addr.011 = phi i32 [ %S, %for.body.lr.ph ], [ %add, %for.body ]
-;CHECK-NEXT: %a.addr.010 = phi i32* [ %a, %for.body.lr.ph ], [ %incdec.ptr1, %for.body ]
-;CHECK-NEXT: %4 = load i32, i32* %a.addr.010, align 4
-;CHECK-NEXT: %add = add nsw i32 %4, %S.addr.011
-;CHECK-NEXT: %incdec.ptr1 = getelementptr inbounds i32, i32* %a.addr.010, i64 1
-;CHECK-NEXT: %indvar.next = add i32 %indvar, 1
-;CHECK-NEXT: %exitcond = icmp eq i32 %indvar, %3
+;CHECK-NEXT: %4 = trunc i64 %indvar to i32
+;CHECK-NEXT: %scevgep = getelementptr i32, i32* %a, i64 %indvar
+;CHECK-NEXT: %5 = load i32, i32* %scevgep, align 4
+;CHECK-NEXT: %add = add nsw i32 %5, %S.addr.011
+;CHECK-NEXT: %indvar.next = add i64 %indvar, 1
+;CHECK-NEXT: %exitcond = icmp eq i32 %4, %3
;CHECK-NEXT: br i1 %exitcond, label %for.cond.for.cond.cleanup_crit_edge, label %for.body
%i.012 = phi i32 [ 0, %for.body.lr.ph ], [ %add3, %for.body ]
@@ -101,14 +101,15 @@ while.body.preheader: ; preds = %entry
while.body: ; preds = %while.body.preheader, %while.body
;CHECK-LABEL: while.body:
-;CHECK-NEXT: %indvar = phi i32 [ %indvar.next, %while.body ], [ 0, %while.body.preheader ]
+;CHECK-NEXT: %indvar = phi i64 [ %indvar.next, %while.body ], [ 0, %while.body.preheader ]
;CHECK-NEXT: %S.012 = phi i32 [ %add, %while.body ], [ undef, %while.body.preheader ]
-;CHECK-NEXT: %buf.addr.011 = phi i32* [ %add.ptr, %while.body ], [ %buf, %while.body.preheader ]
-;CHECK-NEXT: %4 = load i32, i32* %buf.addr.011, align 4
-;CHECK-NEXT: %add = add nsw i32 %4, %S.012
-;CHECK-NEXT: %add.ptr = getelementptr inbounds i32, i32* %buf.addr.011, i64 -1
-;CHECK-NEXT: %indvar.next = add i32 %indvar, 1
-;CHECK-NEXT: %exitcond = icmp eq i32 %indvar, %3
+;CHECK-NEXT: %4 = trunc i64 %indvar to i32
+;CHECK-NEXT: %5 = mul i64 %indvar, -1
+;CHECK-NEXT: %scevgep = getelementptr i32, i32* %buf, i64 %5
+;CHECK-NEXT: %6 = load i32, i32* %scevgep, align 4
+;CHECK-NEXT: %add = add nsw i32 %6, %S.012
+;CHECK-NEXT: %indvar.next = add i64 %indvar, 1
+;CHECK-NEXT: %exitcond = icmp eq i32 %4, %3
;CHECK-NEXT: br i1 %exitcond, label %while.end.loopexit, label %while.body
%i.013 = phi i32 [ %sub, %while.body ], [ %len, %while.body.preheader ]
diff --git a/llvm/test/Transforms/LoopReroll/indvar_with_ext.ll b/llvm/test/Transforms/LoopReroll/indvar_with_ext.ll
index 7aae61433ae..59d5ea5ff87 100644
--- a/llvm/test/Transforms/LoopReroll/indvar_with_ext.ll
+++ b/llvm/test/Transforms/LoopReroll/indvar_with_ext.ll
@@ -14,18 +14,16 @@ while.body.preheader:
while.body:
;CHECK-LABEL: while.body:
-;CHECK-NEXT: %indvars.iv.i423 = phi i64 [ %indvars.iv.next.i424, %while.body ], [ 0, %while.body.preheader ]
-;CHECK-NEXT: [[T1:%[0-9]+]] = trunc i64 %indvars.iv.i423 to i32
-;CHECK-NEXT: %arrayidx62.i = getelementptr inbounds float, float* %arrayidx200, i64 %indvars.iv.i423
+;CHECK-NEXT: %indvar = phi i64 [ %indvar.next, %while.body ], [ 0, %while.body.preheader ]
+;CHECK-NEXT: %arrayidx62.i = getelementptr inbounds float, float* %arrayidx200, i64 %indvar
;CHECK-NEXT: %t1 = load float, float* %arrayidx62.i, align 4
-;CHECK-NEXT: %arrayidx64.i = getelementptr inbounds float, float* %arrayidx164, i64 %indvars.iv.i423
+;CHECK-NEXT: %arrayidx64.i = getelementptr inbounds float, float* %arrayidx164, i64 %indvar
;CHECK-NEXT: %t2 = load float, float* %arrayidx64.i, align 4
;CHECK-NEXT: %mul65.i = fmul fast float %t2, %t22
;CHECK-NEXT: %add66.i = fadd fast float %mul65.i, %t1
;CHECK-NEXT: store float %add66.i, float* %arrayidx62.i, align 4
-;CHECK-NEXT: %indvars.iv.next.i424 = add i64 %indvars.iv.i423, 1
-;CHECK-NEXT: [[T2:%[0-9]+]] = sext i32 [[T1]] to i64
-;CHECK-NEXT: %exitcond = icmp eq i64 [[T2]], %{{[0-9]+}}
+;CHECK-NEXT: %indvar.next = add i64 %indvar, 1
+;CHECK-NEXT: %exitcond = icmp eq i64 %indvar, %{{[0-9]+}}
;CHECK-NEXT: br i1 %exitcond, label %while.end.loopexit, label %while.body
%indvars.iv.i423 = phi i64 [ %indvars.iv.next.i424, %while.body ], [ 0, %while.body.preheader ]
@@ -69,7 +67,7 @@ for.body.preheader: ; preds = %entry
for.body: ; preds = %for.body.preheader, %for.body
-;CHECK: for.body:
+;CHECK-LABEL: for.body:
;CHECK-NEXT: %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %for.body.preheader ]
;CHECK-NEXT: %arrayidx = getelementptr inbounds i32, i32* %y, i64 %indvar
;CHECK-NEXT: [[T1:%[0-9]+]] = load i32, i32* %arrayidx, align 4
@@ -111,7 +109,7 @@ for.body.preheader: ; preds = %entry
for.body: ; preds = %for.body.preheader, %for.body
-;CHECK: for.body:
+;CHECK-LABEL: for.body:
;CHECK: %add12 = add i8 %i.022, 2
;CHECK-NEXT: %conv = sext i8 %add12 to i32
;CHECK-NEXT: %cmp = icmp slt i32 %conv, %n
@@ -153,7 +151,7 @@ for.body.preheader: ; preds = %entry
for.body: ; preds = %for.body.preheader, %for.body
-;CHECK: for.body:
+;CHECK-LABEL: for.body:
;CHECK-NEXT: %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %for.body.preheader ]
;CHECK-NEXT: %arrayidx = getelementptr inbounds i32, i32* %y, i64 %indvar
;CHECK-NEXT: [[T1:%[0-9]+]] = load i32, i32* %arrayidx, align 4
diff --git a/llvm/test/Transforms/LoopReroll/nonconst_lb.ll b/llvm/test/Transforms/LoopReroll/nonconst_lb.ll
index d3c9385a33b..d52cc1211b8 100644
--- a/llvm/test/Transforms/LoopReroll/nonconst_lb.ll
+++ b/llvm/test/Transforms/LoopReroll/nonconst_lb.ll
@@ -53,20 +53,19 @@ for.end: ; preds = %for.body, %entry
; CHECK: %1 = sub i32 %0, %m
; CHECK: %2 = lshr i32 %1, 2
; CHECK: %3 = shl i32 %2, 2
-; CHECK: %4 = add i32 %m, %3
-; CHECK: %5 = add i32 %4, 3
+; CHECK: %4 = add i32 %3, 3
; CHECK: br label %for.body
; CHECK: for.body: ; preds = %for.body, %for.body.preheader
; CHECK: %indvar = phi i32 [ 0, %for.body.preheader ], [ %indvar.next, %for.body ]
-; CHECK: %6 = add i32 %m, %indvar
-; CHECK: %arrayidx = getelementptr inbounds i32, i32* %B, i32 %6
-; CHECK: %7 = load i32, i32* %arrayidx, align 4
-; CHECK: %mul = shl nsw i32 %7, 2
-; CHECK: %arrayidx2 = getelementptr inbounds i32, i32* %A, i32 %6
+; CHECK: %5 = add i32 %m, %indvar
+; CHECK: %arrayidx = getelementptr inbounds i32, i32* %B, i32 %5
+; CHECK: %6 = load i32, i32* %arrayidx, align 4
+; CHECK: %mul = shl nsw i32 %6, 2
+; CHECK: %arrayidx2 = getelementptr inbounds i32, i32* %A, i32 %5
; CHECK: store i32 %mul, i32* %arrayidx2, align 4
; CHECK: %indvar.next = add i32 %indvar, 1
-; CHECK: %exitcond = icmp eq i32 %6, %5
+; CHECK: %exitcond = icmp eq i32 %indvar, %4
; CHECK: br i1 %exitcond, label %for.end.loopexit, label %for.body
;void daxpy_ur(int n,float da,float *dx,float *dy)
@@ -133,20 +132,19 @@ for.end: ; preds = %for.body, %entry
; CHECK: %1 = sub i32 %0, %rem
; CHECK: %2 = lshr i32 %1, 2
; CHECK: %3 = shl i32 %2, 2
-; CHECK: %4 = add i32 %rem, %3
-; CHECK: %5 = add i32 %4, 3
+; CHECK: %4 = add i32 %3, 3
; CHECK: br label %for.body
; CHECK: for.body:
; CHECK: %indvar = phi i32 [ 0, %for.body.preheader ], [ %indvar.next, %for.body ]
-; CHECK: %6 = add i32 %rem, %indvar
-; CHECK: %arrayidx = getelementptr inbounds float, float* %dy, i32 %6
-; CHECK: %7 = load float, float* %arrayidx, align 4
-; CHECK: %arrayidx1 = getelementptr inbounds float, float* %dx, i32 %6
-; CHECK: %8 = load float, float* %arrayidx1, align 4
-; CHECK: %mul = fmul float %8, %da
-; CHECK: %add = fadd float %7, %mul
+; CHECK: %5 = add i32 %rem, %indvar
+; CHECK: %arrayidx = getelementptr inbounds float, float* %dy, i32 %5
+; CHECK: %6 = load float, float* %arrayidx, align 4
+; CHECK: %arrayidx1 = getelementptr inbounds float, float* %dx, i32 %5
+; CHECK: %7 = load float, float* %arrayidx1, align 4
+; CHECK: %mul = fmul float %7, %da
+; CHECK: %add = fadd float %6, %mul
; CHECK: store float %add, float* %arrayidx, align 4
; CHECK: %indvar.next = add i32 %indvar, 1
-; CHECK: %exitcond = icmp eq i32 %6, %5
+; CHECK: %exitcond = icmp eq i32 %indvar, %4
; CHECK: br i1 %exitcond, label %for.end.loopexit, label %for.body
diff --git a/llvm/test/Transforms/LoopReroll/ptrindvar.ll b/llvm/test/Transforms/LoopReroll/ptrindvar.ll
index 05852bdca9e..0a319ad3525 100644
--- a/llvm/test/Transforms/LoopReroll/ptrindvar.ll
+++ b/llvm/test/Transforms/LoopReroll/ptrindvar.ll
@@ -17,7 +17,7 @@ while.body:
;CHECK-NEXT: %4 = load i32, i32* %scevgep, align 4
;CHECK-NEXT: %add = add nsw i32 %4, %S.011
;CHECK-NEXT: %indvar.next = add i64 %indvar, 1
-;CHECK-NEXT: %exitcond = icmp eq i32* %scevgep, %scevgep5
+;CHECK-NEXT: %exitcond = icmp eq i64 %indvar, %3
;CHECK-NEXT: br i1 %exitcond, label %while.end.loopexit, label %while.body
%S.011 = phi i32 [ %add2, %while.body ], [ undef, %while.body.preheader ]
@@ -57,7 +57,7 @@ while.body:
;CHECK-NEXT: %5 = load i32, i32* %scevgep, align 4
;CHECK-NEXT: %add = add nsw i32 %5, %S.011
;CHECK-NEXT: %indvar.next = add i64 %indvar, 1
-;CHECK-NEXT: %exitcond = icmp eq i32* %scevgep, %scevgep5
+;CHECK-NEXT: %exitcond = icmp eq i64 %indvar, %3
;CHECK-NEXT: br i1 %exitcond, label %while.end.loopexit, label %while.body
%S.011 = phi i32 [ %add2, %while.body ], [ undef, %while.body.preheader ]
diff --git a/llvm/test/Transforms/LoopReroll/reduction.ll b/llvm/test/Transforms/LoopReroll/reduction.ll
index 191518514b8..b1e92478f26 100644
--- a/llvm/test/Transforms/LoopReroll/reduction.ll
+++ b/llvm/test/Transforms/LoopReroll/reduction.ll
@@ -35,10 +35,10 @@ for.body: ; preds = %entry, %for.body
; CHECK: %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %entry ]
; CHECK: %r.029 = phi i32 [ 0, %entry ], [ %add, %for.body ]
; CHECK: %arrayidx = getelementptr inbounds i32, i32* %x, i64 %indvar
-; CHECK: %0 = load i32, i32* %arrayidx, align 4
-; CHECK: %add = add nsw i32 %0, %r.029
+; CHECK: %1 = load i32, i32* %arrayidx, align 4
+; CHECK: %add = add nsw i32 %1, %r.029
; CHECK: %indvar.next = add i64 %indvar, 1
-; CHECK: %exitcond = icmp eq i64 %indvar, 399
+; CHECK: %exitcond = icmp eq i32 %0, 399
; CHECK: br i1 %exitcond, label %for.end, label %for.body
; CHECK: ret
@@ -80,10 +80,10 @@ for.body: ; preds = %entry, %for.body
; CHECK: %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %entry ]
; CHECK: %r.029 = phi float [ 0.000000e+00, %entry ], [ %add, %for.body ]
; CHECK: %arrayidx = getelementptr inbounds float, float* %x, i64 %indvar
-; CHECK: %0 = load float, float* %arrayidx, align 4
-; CHECK: %add = fadd float %0, %r.029
+; CHECK: %1 = load float, float* %arrayidx, align 4
+; CHECK: %add = fadd float %1, %r.029
; CHECK: %indvar.next = add i64 %indvar, 1
-; CHECK: %exitcond = icmp eq i64 %indvar, 399
+; CHECK: %exitcond = icmp eq i32 %0, 399
; CHECK: br i1 %exitcond, label %for.end, label %for.body
; CHECK: ret
OpenPOWER on IntegriCloud