From 2d3812af5da48afeb4d0a7bfdeb4de76d7dc98b8 Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Wed, 17 Sep 2014 16:35:09 +0000 Subject: [PATCH] [IndVarSimplify] Partially revert r217953 to see if this fixes the bots. Specifically, disable widening of unsigned compare instructions. llvm-svn: 217962 --- lib/Transforms/Scalar/IndVarSimplify.cpp | 5 +++- .../IndVarSimplify/widen-loop-comp.ll | 28 ------------------- 2 files changed, 4 insertions(+), 29 deletions(-) diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp index 532666ea7c1..7cc34e1ad86 100644 --- a/lib/Transforms/Scalar/IndVarSimplify.cpp +++ b/lib/Transforms/Scalar/IndVarSimplify.cpp @@ -936,6 +936,10 @@ bool WidenIV::WidenLoopCompare(NarrowIVDefUse DU) { if (!Cmp) return false; + bool IsSigned = CmpInst::isSigned(Cmp->getPredicate()); + if (!IsSigned) + return false; + Value *Op = Cmp->getOperand(Cmp->getOperand(0) == DU.NarrowDef ? 1 : 0); unsigned CastWidth = SE->getTypeSizeInBits(Op->getType()); unsigned IVWidth = SE->getTypeSizeInBits(WideType); @@ -947,7 +951,6 @@ bool WidenIV::WidenLoopCompare(NarrowIVDefUse DU) { // Widen the other operand of the compare, if necessary. if (CastWidth < IVWidth) { - bool IsSigned = CmpInst::isSigned(Cmp->getPredicate()); Value *ExtOp = getExtend(Op, WideType, IsSigned, Cmp); DU.NarrowUse->replaceUsesOfWith(Op, ExtOp); } diff --git a/test/Transforms/IndVarSimplify/widen-loop-comp.ll b/test/Transforms/IndVarSimplify/widen-loop-comp.ll index 84738ebe239..a6963948d8b 100644 --- a/test/Transforms/IndVarSimplify/widen-loop-comp.ll +++ b/test/Transforms/IndVarSimplify/widen-loop-comp.ll @@ -136,31 +136,3 @@ for.body: for.end: ret i32 %sum.0 } - -; CHECK-LABEL: @test4 -; CHECK: zext i32 %b -; CHECK: for.cond: -; CHECK: phi i64 -; CHECK: icmp ule i64 - -define i32 @test4(i32* %a, i32 %b) { -entry: - br label %for.cond - -for.cond: - %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.body ] - %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ] - %cmp = icmp ule i32 %i.0, %b - br i1 %cmp, label %for.body, label %for.end - -for.body: - %idxprom = sext i32 %i.0 to i64 - %arrayidx = getelementptr inbounds i32* %a, i64 %idxprom - %0 = load i32* %arrayidx, align 4 - %add = add nsw i32 %sum.0, %0 - %inc = add nsw i32 %i.0, 1 - br label %for.cond - -for.end: - ret i32 %sum.0 -}