mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-23 17:28:54 +00:00
[indvars] Fix PR10946: SCEV cannot handle Vector IVs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140026 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -85,6 +85,8 @@ namespace {
|
||||
/// foldIVUser - Fold an IV operand into its use. This removes increments of an
|
||||
/// aligned IV when used by a instruction that ignores the low bits.
|
||||
///
|
||||
/// IVOperand is guaranteed SCEVable, but UseInst may not be.
|
||||
///
|
||||
/// Return the operand of IVOperand for this induction variable if IVOperand can
|
||||
/// be folded (in case more folding opportunities have been exposed).
|
||||
/// Otherwise return null.
|
||||
@@ -241,6 +243,7 @@ void SimplifyIndvar::eliminateIVRemainder(BinaryOperator *Rem,
|
||||
|
||||
/// eliminateIVUser - Eliminate an operation that consumes a simple IV and has
|
||||
/// no observable side-effect given the range of IV values.
|
||||
/// IVOperand is guaranteed SCEVable, but UseInst may not be.
|
||||
bool SimplifyIndvar::eliminateIVUser(Instruction *UseInst,
|
||||
Instruction *IVOperand) {
|
||||
if (ICmpInst *ICmp = dyn_cast<ICmpInst>(UseInst)) {
|
||||
@@ -324,6 +327,9 @@ static bool isSimpleIVUser(Instruction *I, const Loop *L, ScalarEvolution *SE) {
|
||||
/// Once DisableIVRewrite is default, LSR will be the only client of IVUsers.
|
||||
///
|
||||
void SimplifyIndvar::simplifyUsers(PHINode *CurrIV, IVVisitor *V) {
|
||||
if (!SE->isSCEVable(CurrIV->getType()))
|
||||
return;
|
||||
|
||||
// Instructions processed by SimplifyIndvar for CurrIV.
|
||||
SmallPtrSet<Instruction*,16> Simplified;
|
||||
|
||||
|
Reference in New Issue
Block a user