mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-23 17:24:48 +00:00
Added SCEV::NoWrapFlags to manage unsigned, signed, and self wrap
properties. Added the self-wrap flag for SCEV::AddRecExpr. A slew of temporary FIXMEs indicate the intention of the no-self-wrap flag without changing behavior in this revision. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127590 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -253,7 +253,8 @@ static void DoInitialMatch(const SCEV *S, Loop *L,
|
||||
DoInitialMatch(AR->getStart(), L, Good, Bad, SE);
|
||||
DoInitialMatch(SE.getAddRecExpr(SE.getConstant(AR->getType(), 0),
|
||||
AR->getStepRecurrence(SE),
|
||||
AR->getLoop()),
|
||||
// FIXME: AR->getNoWrapFlags()
|
||||
AR->getLoop(), SCEV::FlagAnyWrap),
|
||||
L, Good, Bad, SE);
|
||||
return;
|
||||
}
|
||||
@ -455,7 +456,10 @@ static const SCEV *getExactSDiv(const SCEV *LHS, const SCEV *RHS,
|
||||
const SCEV *Start = getExactSDiv(AR->getStart(), RHS, SE,
|
||||
IgnoreSignificantBits);
|
||||
if (!Start) return 0;
|
||||
return SE.getAddRecExpr(Start, Step, AR->getLoop());
|
||||
// FlagNW is independent of the start value, step direction, and is
|
||||
// preserved with smaller magnitude steps.
|
||||
// FIXME: AR->getNoWrapFlags(SCEV::FlagNW)
|
||||
return SE.getAddRecExpr(Start, Step, AR->getLoop(), SCEV::FlagAnyWrap);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -520,7 +524,9 @@ static int64_t ExtractImmediate(const SCEV *&S, ScalarEvolution &SE) {
|
||||
SmallVector<const SCEV *, 8> NewOps(AR->op_begin(), AR->op_end());
|
||||
int64_t Result = ExtractImmediate(NewOps.front(), SE);
|
||||
if (Result != 0)
|
||||
S = SE.getAddRecExpr(NewOps, AR->getLoop());
|
||||
S = SE.getAddRecExpr(NewOps, AR->getLoop(),
|
||||
// FIXME: AR->getNoWrapFlags(SCEV::FlagNW)
|
||||
SCEV::FlagAnyWrap);
|
||||
return Result;
|
||||
}
|
||||
return 0;
|
||||
@ -545,7 +551,9 @@ static GlobalValue *ExtractSymbol(const SCEV *&S, ScalarEvolution &SE) {
|
||||
SmallVector<const SCEV *, 8> NewOps(AR->op_begin(), AR->op_end());
|
||||
GlobalValue *Result = ExtractSymbol(NewOps.front(), SE);
|
||||
if (Result)
|
||||
S = SE.getAddRecExpr(NewOps, AR->getLoop());
|
||||
S = SE.getAddRecExpr(NewOps, AR->getLoop(),
|
||||
// FIXME: AR->getNoWrapFlags(SCEV::FlagNW)
|
||||
SCEV::FlagAnyWrap);
|
||||
return Result;
|
||||
}
|
||||
return 0;
|
||||
@ -2236,7 +2244,9 @@ static void CollectSubexprs(const SCEV *S, const SCEVConstant *C,
|
||||
if (!AR->getStart()->isZero()) {
|
||||
CollectSubexprs(SE.getAddRecExpr(SE.getConstant(AR->getType(), 0),
|
||||
AR->getStepRecurrence(SE),
|
||||
AR->getLoop()),
|
||||
AR->getLoop(),
|
||||
//FIXME: AR->getNoWrapFlags(SCEV::FlagNW)
|
||||
SCEV::FlagAnyWrap),
|
||||
C, Ops, L, SE);
|
||||
CollectSubexprs(AR->getStart(), C, Ops, L, SE);
|
||||
return;
|
||||
@ -3047,7 +3057,7 @@ void LSRInstance::NarrowSearchSpaceByCollapsingUnrolledCode() {
|
||||
}
|
||||
}
|
||||
|
||||
/// NarrowSearchSpaceByRefilteringUndesirableDedicatedRegisters - Call
|
||||
/// NarrowSearchSpaceByRefilteringUndesirableDedicatedRegisters - Call
|
||||
/// FilterOutUndesirableDedicatedRegisters again, if necessary, now that
|
||||
/// we've done more filtering, as it may be able to find more formulae to
|
||||
/// eliminate.
|
||||
|
Reference in New Issue
Block a user