1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

FullDependenceAnalysis: Avoid using the (deprecated in C++11) copy ctor

llvm-svn: 231103
This commit is contained in:
David Blaikie 2015-03-03 19:20:16 +00:00
parent ad269f6b2c
commit 202b6bec64

View File

@ -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);
} }