mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-13 15:11:39 +00:00
Reformat the loop that does AddRecExpr * AddRecExpr reduction.
No functionality. llvm-svn: 157672
This commit is contained in:
parent
a46443d6db
commit
0fda877fa8
@ -2037,7 +2037,9 @@ const SCEV *ScalarEvolution::getMulExpr(SmallVectorImpl<const SCEV *> &Ops,
|
||||
for (unsigned OtherIdx = Idx+1;
|
||||
OtherIdx < Ops.size() && isa<SCEVAddRecExpr>(Ops[OtherIdx]);
|
||||
++OtherIdx) {
|
||||
if (AddRecLoop == cast<SCEVAddRecExpr>(Ops[OtherIdx])->getLoop()) {
|
||||
if (AddRecLoop != cast<SCEVAddRecExpr>(Ops[OtherIdx])->getLoop())
|
||||
continue;
|
||||
|
||||
// {A1,+,A2,+,...,+,An}<L> * {B1,+,B2,+,...,+,Bn}<L>
|
||||
// = {x=1 in [ sum y=x..2x [ sum z=max(y-x, y-n)..min(x,n) [
|
||||
// choose(x, 2x)*choose(2x-y, x-z)*A_{y-z}*B_z
|
||||
@ -2050,17 +2052,18 @@ const SCEV *ScalarEvolution::getMulExpr(SmallVectorImpl<const SCEV *> &Ops,
|
||||
// an infinite stream of zeros on the right).
|
||||
bool OpsModified = false;
|
||||
for (; OtherIdx != Ops.size() && isa<SCEVAddRecExpr>(Ops[OtherIdx]);
|
||||
++OtherIdx)
|
||||
if (const SCEVAddRecExpr *OtherAddRec =
|
||||
dyn_cast<SCEVAddRecExpr>(Ops[OtherIdx]))
|
||||
if (OtherAddRec->getLoop() == AddRecLoop) {
|
||||
++OtherIdx) {
|
||||
const SCEVAddRecExpr *OtherAddRec =
|
||||
dyn_cast<SCEVAddRecExpr>(Ops[OtherIdx]);
|
||||
if (!OtherAddRec || OtherAddRec->getLoop() != AddRecLoop)
|
||||
continue;
|
||||
|
||||
bool Overflow = false;
|
||||
Type *Ty = AddRec->getType();
|
||||
bool LargerThan64Bits = getTypeSizeInBits(Ty) > 64;
|
||||
SmallVector<const SCEV*, 7> AddRecOps;
|
||||
for (int x = 0, xe = AddRec->getNumOperands() +
|
||||
OtherAddRec->getNumOperands() - 1;
|
||||
x != xe && !Overflow; ++x) {
|
||||
OtherAddRec->getNumOperands() - 1; x != xe && !Overflow; ++x) {
|
||||
const SCEV *Term = getConstant(Ty, 0);
|
||||
for (int y = x, ye = 2*x+1; y != ye && !Overflow; ++y) {
|
||||
uint64_t Coeff1 = Choose(x, 2*x - y, Overflow);
|
||||
@ -2082,8 +2085,7 @@ const SCEV *ScalarEvolution::getMulExpr(SmallVectorImpl<const SCEV *> &Ops,
|
||||
AddRecOps.push_back(Term);
|
||||
}
|
||||
if (!Overflow) {
|
||||
const SCEV *NewAddRec = getAddRecExpr(AddRecOps,
|
||||
AddRec->getLoop(),
|
||||
const SCEV *NewAddRec = getAddRecExpr(AddRecOps, AddRec->getLoop(),
|
||||
SCEV::FlagAnyWrap);
|
||||
if (Ops.size() == 2) return NewAddRec;
|
||||
Ops[Idx] = AddRec = cast<SCEVAddRecExpr>(NewAddRec);
|
||||
@ -2094,7 +2096,6 @@ const SCEV *ScalarEvolution::getMulExpr(SmallVectorImpl<const SCEV *> &Ops,
|
||||
if (OpsModified)
|
||||
return getMulExpr(Ops);
|
||||
}
|
||||
}
|
||||
|
||||
// Otherwise couldn't fold anything into this recurrence. Move onto the
|
||||
// next one.
|
||||
|
Loading…
x
Reference in New Issue
Block a user