OSDN Git Service

[IndVars] Change the order to compute WidenAddRec in widenIVUse.
authorWei Mi <wmi@google.com>
Tue, 15 Nov 2016 17:34:52 +0000 (17:34 +0000)
committerWei Mi <wmi@google.com>
Tue, 15 Nov 2016 17:34:52 +0000 (17:34 +0000)
commit334f714ef907100cd28c4a62a6585601da12298f
treec853c2b9d127f34b6f94a0e27cd16fabb0991dc4
parent2e14486c474f2e105ff188eeb4de465fe5660412
[IndVars] Change the order to compute WidenAddRec in widenIVUse.

When both WidenIV::getWideRecurrence and WidenIV::getExtendedOperandRecurrence
return non-null but different WideAddRec, if getWideRecurrence is called
before getExtendedOperandRecurrence, we won't bother to call
getExtendedOperandRecurrence again. But As we know it is possible that after
SCEV folding, we cannot prove the legality using the SCEVAddRecExpr returned
by getWideRecurrence. Meanwhile if getExtendedOperandRecurrence returns non-null
WideAddRec, we know for sure that it is legal to do widening for current instruction.
So it is better to put getExtendedOperandRecurrence before getWideRecurrence, which
will increase the chance of successful widening.

Differential Revision: https://reviews.llvm.org/D26059

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286987 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/IndVarSimplify.cpp
test/Transforms/IndVarSimplify/iv-widen-elim-ext.ll
test/Transforms/IndVarSimplify/iv-widen.ll