forked from OSchip/llvm-project
FullDependenceAnalysis: Avoid using the (deprecated in C++11) copy ctor
llvm-svn: 231103
This commit is contained in:
parent
9107a1bc27
commit
c5771c214e
|
@ -3334,7 +3334,8 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
DEBUG(dbgs() << " common nesting levels = " << CommonLevels << "\n");
|
DEBUG(dbgs() << " common nesting levels = " << CommonLevels << "\n");
|
||||||
DEBUG(dbgs() << " maximum nesting levels = " << MaxLevels << "\n");
|
DEBUG(dbgs() << " maximum nesting levels = " << MaxLevels << "\n");
|
||||||
|
|
||||||
FullDependence Result(Src, Dst, PossiblyLoopIndependent, CommonLevels);
|
auto Result = llvm::make_unique<FullDependence>(
|
||||||
|
Src, Dst, PossiblyLoopIndependent, CommonLevels);
|
||||||
++TotalArrayPairs;
|
++TotalArrayPairs;
|
||||||
|
|
||||||
// See if there are GEPs we can use.
|
// See if there are GEPs we can use.
|
||||||
|
@ -3472,7 +3473,7 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
collectCommonLoops(Pair[SI].Dst,
|
collectCommonLoops(Pair[SI].Dst,
|
||||||
LI->getLoopFor(Dst->getParent()),
|
LI->getLoopFor(Dst->getParent()),
|
||||||
Pair[SI].Loops);
|
Pair[SI].Loops);
|
||||||
Result.Consistent = false;
|
Result->Consistent = false;
|
||||||
}
|
}
|
||||||
else if (Pair[SI].Classification == Subscript::ZIV) {
|
else if (Pair[SI].Classification == Subscript::ZIV) {
|
||||||
// always separable
|
// always separable
|
||||||
|
@ -3519,26 +3520,26 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
switch (Pair[SI].Classification) {
|
switch (Pair[SI].Classification) {
|
||||||
case Subscript::ZIV:
|
case Subscript::ZIV:
|
||||||
DEBUG(dbgs() << ", ZIV\n");
|
DEBUG(dbgs() << ", ZIV\n");
|
||||||
if (testZIV(Pair[SI].Src, Pair[SI].Dst, Result))
|
if (testZIV(Pair[SI].Src, Pair[SI].Dst, *Result))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
break;
|
break;
|
||||||
case Subscript::SIV: {
|
case Subscript::SIV: {
|
||||||
DEBUG(dbgs() << ", SIV\n");
|
DEBUG(dbgs() << ", SIV\n");
|
||||||
unsigned Level;
|
unsigned Level;
|
||||||
const SCEV *SplitIter = nullptr;
|
const SCEV *SplitIter = nullptr;
|
||||||
if (testSIV(Pair[SI].Src, Pair[SI].Dst, Level,
|
if (testSIV(Pair[SI].Src, Pair[SI].Dst, Level, *Result, NewConstraint,
|
||||||
Result, NewConstraint, SplitIter))
|
SplitIter))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Subscript::RDIV:
|
case Subscript::RDIV:
|
||||||
DEBUG(dbgs() << ", RDIV\n");
|
DEBUG(dbgs() << ", RDIV\n");
|
||||||
if (testRDIV(Pair[SI].Src, Pair[SI].Dst, Result))
|
if (testRDIV(Pair[SI].Src, Pair[SI].Dst, *Result))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
break;
|
break;
|
||||||
case Subscript::MIV:
|
case Subscript::MIV:
|
||||||
DEBUG(dbgs() << ", MIV\n");
|
DEBUG(dbgs() << ", MIV\n");
|
||||||
if (testMIV(Pair[SI].Src, Pair[SI].Dst, Pair[SI].Loops, Result))
|
if (testMIV(Pair[SI].Src, Pair[SI].Dst, Pair[SI].Loops, *Result))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -3575,8 +3576,8 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
unsigned Level;
|
unsigned Level;
|
||||||
const SCEV *SplitIter = nullptr;
|
const SCEV *SplitIter = nullptr;
|
||||||
DEBUG(dbgs() << "SIV\n");
|
DEBUG(dbgs() << "SIV\n");
|
||||||
if (testSIV(Pair[SJ].Src, Pair[SJ].Dst, Level,
|
if (testSIV(Pair[SJ].Src, Pair[SJ].Dst, Level, *Result, NewConstraint,
|
||||||
Result, NewConstraint, SplitIter))
|
SplitIter))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
ConstrainedLevels.set(Level);
|
ConstrainedLevels.set(Level);
|
||||||
if (intersectConstraints(&Constraints[Level], &NewConstraint)) {
|
if (intersectConstraints(&Constraints[Level], &NewConstraint)) {
|
||||||
|
@ -3597,7 +3598,7 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
// SJ is an MIV subscript that's part of the current coupled group
|
// SJ is an MIV subscript that's part of the current coupled group
|
||||||
DEBUG(dbgs() << "\tSJ = " << SJ << "\n");
|
DEBUG(dbgs() << "\tSJ = " << SJ << "\n");
|
||||||
if (propagate(Pair[SJ].Src, Pair[SJ].Dst, Pair[SJ].Loops,
|
if (propagate(Pair[SJ].Src, Pair[SJ].Dst, Pair[SJ].Loops,
|
||||||
Constraints, Result.Consistent)) {
|
Constraints, Result->Consistent)) {
|
||||||
DEBUG(dbgs() << "\t Changed\n");
|
DEBUG(dbgs() << "\t Changed\n");
|
||||||
++DeltaPropagations;
|
++DeltaPropagations;
|
||||||
Pair[SJ].Classification =
|
Pair[SJ].Classification =
|
||||||
|
@ -3607,7 +3608,7 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
switch (Pair[SJ].Classification) {
|
switch (Pair[SJ].Classification) {
|
||||||
case Subscript::ZIV:
|
case Subscript::ZIV:
|
||||||
DEBUG(dbgs() << "ZIV\n");
|
DEBUG(dbgs() << "ZIV\n");
|
||||||
if (testZIV(Pair[SJ].Src, Pair[SJ].Dst, Result))
|
if (testZIV(Pair[SJ].Src, Pair[SJ].Dst, *Result))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
Mivs.reset(SJ);
|
Mivs.reset(SJ);
|
||||||
break;
|
break;
|
||||||
|
@ -3630,7 +3631,7 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
for (int SJ = Mivs.find_first(); SJ >= 0; SJ = Mivs.find_next(SJ)) {
|
for (int SJ = Mivs.find_first(); SJ >= 0; SJ = Mivs.find_next(SJ)) {
|
||||||
if (Pair[SJ].Classification == Subscript::RDIV) {
|
if (Pair[SJ].Classification == Subscript::RDIV) {
|
||||||
DEBUG(dbgs() << "RDIV test\n");
|
DEBUG(dbgs() << "RDIV test\n");
|
||||||
if (testRDIV(Pair[SJ].Src, Pair[SJ].Dst, Result))
|
if (testRDIV(Pair[SJ].Src, Pair[SJ].Dst, *Result))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
// I don't yet understand how to propagate RDIV results
|
// I don't yet understand how to propagate RDIV results
|
||||||
Mivs.reset(SJ);
|
Mivs.reset(SJ);
|
||||||
|
@ -3643,19 +3644,19 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
for (int SJ = Mivs.find_first(); SJ >= 0; SJ = Mivs.find_next(SJ)) {
|
for (int SJ = Mivs.find_first(); SJ >= 0; SJ = Mivs.find_next(SJ)) {
|
||||||
if (Pair[SJ].Classification == Subscript::MIV) {
|
if (Pair[SJ].Classification == Subscript::MIV) {
|
||||||
DEBUG(dbgs() << "MIV test\n");
|
DEBUG(dbgs() << "MIV test\n");
|
||||||
if (testMIV(Pair[SJ].Src, Pair[SJ].Dst, Pair[SJ].Loops, Result))
|
if (testMIV(Pair[SJ].Src, Pair[SJ].Dst, Pair[SJ].Loops, *Result))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
llvm_unreachable("expected only MIV subscripts at this point");
|
llvm_unreachable("expected only MIV subscripts at this point");
|
||||||
}
|
}
|
||||||
|
|
||||||
// update Result.DV from constraint vector
|
// update Result->DV from constraint vector
|
||||||
DEBUG(dbgs() << " updating\n");
|
DEBUG(dbgs() << " updating\n");
|
||||||
for (int SJ = ConstrainedLevels.find_first();
|
for (int SJ = ConstrainedLevels.find_first();
|
||||||
SJ >= 0; SJ = ConstrainedLevels.find_next(SJ)) {
|
SJ >= 0; SJ = ConstrainedLevels.find_next(SJ)) {
|
||||||
updateDirection(Result.DV[SJ - 1], Constraints[SJ]);
|
updateDirection(Result->DV[SJ - 1], Constraints[SJ]);
|
||||||
if (Result.DV[SJ - 1].Direction == Dependence::DVEntry::NONE)
|
if (Result->DV[SJ - 1].Direction == Dependence::DVEntry::NONE)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3667,15 +3668,15 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
CompleteLoops |= Pair[SI].Loops;
|
CompleteLoops |= Pair[SI].Loops;
|
||||||
for (unsigned II = 1; II <= CommonLevels; ++II)
|
for (unsigned II = 1; II <= CommonLevels; ++II)
|
||||||
if (CompleteLoops[II])
|
if (CompleteLoops[II])
|
||||||
Result.DV[II - 1].Scalar = false;
|
Result->DV[II - 1].Scalar = false;
|
||||||
|
|
||||||
if (PossiblyLoopIndependent) {
|
if (PossiblyLoopIndependent) {
|
||||||
// Make sure the LoopIndependent flag is set correctly.
|
// Make sure the LoopIndependent flag is set correctly.
|
||||||
// All directions must include equal, otherwise no
|
// All directions must include equal, otherwise no
|
||||||
// loop-independent dependence is possible.
|
// loop-independent dependence is possible.
|
||||||
for (unsigned II = 1; II <= CommonLevels; ++II) {
|
for (unsigned II = 1; II <= CommonLevels; ++II) {
|
||||||
if (!(Result.getDirection(II) & Dependence::DVEntry::EQ)) {
|
if (!(Result->getDirection(II) & Dependence::DVEntry::EQ)) {
|
||||||
Result.LoopIndependent = false;
|
Result->LoopIndependent = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3685,7 +3686,7 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
// loop-independent dependence possible, then no dependence exists.
|
// loop-independent dependence possible, then no dependence exists.
|
||||||
bool AllEqual = true;
|
bool AllEqual = true;
|
||||||
for (unsigned II = 1; II <= CommonLevels; ++II) {
|
for (unsigned II = 1; II <= CommonLevels; ++II) {
|
||||||
if (Result.getDirection(II) != Dependence::DVEntry::EQ) {
|
if (Result->getDirection(II) != Dependence::DVEntry::EQ) {
|
||||||
AllEqual = false;
|
AllEqual = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3694,9 +3695,7 @@ DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Final = make_unique<FullDependence>(Result);
|
return std::move(Result);
|
||||||
Result.DV = nullptr;
|
|
||||||
return std::move(Final);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue