[llvm-commits] [llvm] r105480 - in /llvm/trunk: lib/Analysis/ScalarEvolutionNormalization.cpp test/CodeGen/X86/lsr-nonaffine.ll
Dan Gohman
gohman at apple.com
Fri Jun 4 12:16:34 PDT 2010
Author: djg
Date: Fri Jun 4 14:16:34 2010
New Revision: 105480
URL: http://llvm.org/viewvc/llvm-project?rev=105480&view=rev
Log:
Fix normalization and de-normalization of non-affine SCEVs.
Added:
llvm/trunk/test/CodeGen/X86/lsr-nonaffine.ll
Modified:
llvm/trunk/lib/Analysis/ScalarEvolutionNormalization.cpp
Modified: llvm/trunk/lib/Analysis/ScalarEvolutionNormalization.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolutionNormalization.cpp?rev=105480&r1=105479&r2=105480&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/ScalarEvolutionNormalization.cpp (original)
+++ llvm/trunk/lib/Analysis/ScalarEvolutionNormalization.cpp Fri Jun 4 14:16:34 2010
@@ -105,22 +105,25 @@
case NormalizeAutodetect:
if (Instruction *OI = dyn_cast<Instruction>(OperandValToReplace))
if (IVUseShouldUsePostIncValue(User, OI, L, &DT)) {
- Result = SE.getMinusSCEV(Result, AR->getStepRecurrence(SE));
+ const SCEV *TransformedStep =
+ TransformForPostIncUse(Kind, AR->getStepRecurrence(SE),
+ User, OperandValToReplace, Loops, SE, DT);
+ Result = SE.getMinusSCEV(Result, TransformedStep);
Loops.insert(L);
}
break;
case Normalize:
- if (Loops.count(L))
- Result = SE.getMinusSCEV(Result, AR->getStepRecurrence(SE));
- break;
- case Denormalize:
if (Loops.count(L)) {
const SCEV *TransformedStep =
TransformForPostIncUse(Kind, AR->getStepRecurrence(SE),
User, OperandValToReplace, Loops, SE, DT);
- Result = SE.getAddExpr(Result, TransformedStep);
+ Result = SE.getMinusSCEV(Result, TransformedStep);
}
break;
+ case Denormalize:
+ if (Loops.count(L))
+ Result = SE.getAddExpr(Result, AR->getStepRecurrence(SE));
+ break;
}
return Result;
}
Added: llvm/trunk/test/CodeGen/X86/lsr-nonaffine.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/lsr-nonaffine.ll?rev=105480&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/lsr-nonaffine.ll (added)
+++ llvm/trunk/test/CodeGen/X86/lsr-nonaffine.ll Fri Jun 4 14:16:34 2010
@@ -0,0 +1,23 @@
+; RUN: llc -march=x86-64 < %s | FileCheck %s
+
+; LSR should compute the correct starting values for this loop. Note that
+; it's not necessarily LSR's job to compute loop exit expressions; that's
+; indvars' job.
+; CHECK: movl $12
+; CHECK: movl $42
+
+define i32 @real_symmetric_eigen(i32 %n) nounwind {
+while.body127: ; preds = %while.cond122
+ br label %while.cond141
+
+while.cond141: ; preds = %while.cond141, %while.body127
+ %0 = phi i32 [ 7, %while.body127 ], [ %indvar.next67, %while.cond141 ] ; <i32> [#uses=3]
+ %indvar.next67 = add i32 %0, 1 ; <i32> [#uses=1]
+ %t = icmp slt i32 %indvar.next67, %n
+ br i1 %t, label %if.then171, label %while.cond141
+
+if.then171: ; preds = %while.cond141
+ %mul150 = mul i32 %0, %0 ; <i32> [#uses=1]
+ %add174 = add i32 %mul150, %0 ; <i32> [#uses=1]
+ ret i32 %add174
+}
More information about the llvm-commits
mailing list