From: Chris Lattner Date: Tue, 4 Dec 2001 08:12:47 +0000 (+0000) Subject: Fix a pessimization due to sucky LI testing X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=621c9920c7343d2a74e2541871a1e56da41781dc;p=oota-llvm.git Fix a pessimization due to sucky LI testing git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1412 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/InductionVariable.cpp b/lib/Analysis/InductionVariable.cpp index 339bc3862ae..a340a771963 100644 --- a/lib/Analysis/InductionVariable.cpp +++ b/lib/Analysis/InductionVariable.cpp @@ -127,6 +127,21 @@ InductionVariable::InductionVariable(PHINode *P, cfg::LoopInfo *LoopInfo) { if (StepE.ExprTy != ExprType::Linear || StepE.Var != Phi) return; + const Type *ETy = Phi->getType(); + if (ETy->isPointerType()) ETy = Type::ULongTy; + Step = (Value*)(StepE.Offset ? StepE.Offset : ConstantInt::get(ETy, 0)); + } else { // We were able to get a step value, simplify with expr analysis + ExprType StepE = analysis::ClassifyExpression(Step); + if (StepE.ExprTy == ExprType::Linear && StepE.Offset == 0) { + // No offset from variable? Grab the variable + Step = StepE.Var; + } else if (StepE.ExprTy == ExprType::Constant) { + if (StepE.Offset) + Step = (Value*)StepE.Offset; + else + Step = Constant::getNullConstant(Step->getType()); + } + const Type *ETy = Phi->getType(); if (ETy->isPointerType()) ETy = Type::ULongTy; Step = (Value*)(StepE.Offset ? StepE.Offset : ConstantInt::get(ETy, 0));