[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)
commitd2948cef705997c38799a2cc8cba15d809fbf364
tree66e0652d285b810c4eaf8f4ae173114b183d9616
parent6d279e8e98f83dc1ed8769b1be2a846daef2e33d
[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

llvm-svn: 286987
llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
llvm/test/Transforms/IndVarSimplify/iv-widen-elim-ext.ll
llvm/test/Transforms/IndVarSimplify/iv-widen.ll