mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 07:29:55 +00:00
A few minor micro-optimizations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106764 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d42819a07b
commit
2ea09e0546
@ -449,6 +449,7 @@ static const SCEV *getExactSDiv(const SCEV *LHS, const SCEV *RHS,
|
||||
if (!Step) return 0;
|
||||
return SE.getAddRecExpr(Start, Step, AR->getLoop());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Distribute the sdiv over add operands, if the add doesn't overflow.
|
||||
@ -464,10 +465,11 @@ static const SCEV *getExactSDiv(const SCEV *LHS, const SCEV *RHS,
|
||||
}
|
||||
return SE.getAddExpr(Ops);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check for a multiply operand that we can pull RHS out of.
|
||||
if (const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(LHS))
|
||||
if (const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(LHS)) {
|
||||
if (IgnoreSignificantBits || isMulSExtable(Mul, SE)) {
|
||||
SmallVector<const SCEV *, 4> Ops;
|
||||
bool Found = false;
|
||||
@ -484,6 +486,8 @@ static const SCEV *getExactSDiv(const SCEV *LHS, const SCEV *RHS,
|
||||
}
|
||||
return Found ? SE.getMulExpr(Ops) : 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Otherwise we don't know.
|
||||
return 0;
|
||||
@ -2397,13 +2401,12 @@ void LSRInstance::GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx,
|
||||
for (SmallSetVector<int64_t, 8>::const_iterator
|
||||
I = Factors.begin(), E = Factors.end(); I != E; ++I) {
|
||||
int64_t Factor = *I;
|
||||
Formula F = Base;
|
||||
|
||||
// Check that the multiplication doesn't overflow.
|
||||
if (F.AM.BaseOffs == INT64_MIN && Factor == -1)
|
||||
if (Base.AM.BaseOffs == INT64_MIN && Factor == -1)
|
||||
continue;
|
||||
F.AM.BaseOffs = (uint64_t)Base.AM.BaseOffs * Factor;
|
||||
if (F.AM.BaseOffs / Factor != Base.AM.BaseOffs)
|
||||
int64_t NewBaseOffs = (uint64_t)Base.AM.BaseOffs * Factor;
|
||||
if (NewBaseOffs / Factor != Base.AM.BaseOffs)
|
||||
continue;
|
||||
|
||||
// Check that multiplying with the use offset doesn't overflow.
|
||||
@ -2414,6 +2417,9 @@ void LSRInstance::GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx,
|
||||
if (Offset / Factor != LU.MinOffset)
|
||||
continue;
|
||||
|
||||
Formula F = Base;
|
||||
F.AM.BaseOffs = NewBaseOffs;
|
||||
|
||||
// Check that this scale is legal.
|
||||
if (!isLegalUse(F.AM, Offset, Offset, LU.Kind, LU.AccessTy, TLI))
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user