<div dir="ltr"><p dir="ltr"><br>
On Aug 24, 2014 5:43 PM, "Dylan Noblesmith" <<a href="mailto:nobled@dreamwidth.org" target="_blank">nobled@dreamwidth.org</a>> wrote:<br>
><br>
> Author: nobled<br>
> Date: Sun Aug 24 19:28:39 2014<br>
> New Revision: 216357<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=216357&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=216357&view=rev</a><br>
> Log:<br>
> Analysis: unique_ptr-ify DependenceAnalysis::depends<br>
><br>
> Modified:<br>
> llvm/trunk/include/llvm/Analysis/DependenceAnalysis.h<br>
> llvm/trunk/lib/Analysis/DependenceAnalysis.cpp<br>
><br>
> Modified: llvm/trunk/include/llvm/Analysis/DependenceAnalysis.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DependenceAnalysis.h?rev=216357&r1=216356&r2=216357&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DependenceAnalysis.h?rev=216357&r1=216356&r2=216357&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/Analysis/DependenceAnalysis.h (original)<br>
> +++ llvm/trunk/include/llvm/Analysis/DependenceAnalysis.h Sun Aug 24 19:28:39 2014<br>
> @@ -287,9 +287,9 @@ namespace llvm {<br>
> /// The flag PossiblyLoopIndependent should be set by the caller<br>
> /// if it appears that control flow can reach from Src to Dst<br>
> /// without traversing a loop back edge.<br>
> - Dependence *depends(Instruction *Src,<br>
> - Instruction *Dst,<br>
> - bool PossiblyLoopIndependent);<br>
> + std::unique_ptr<Dependence> depends(Instruction *Src,<br>
> + Instruction *Dst,<br>
> + bool PossiblyLoopIndependent);<br>
><br>
> /// getSplitIteration - Give a dependence that's splittable at some<br>
> /// particular level, return the iteration that should be used to split<br>
><br>
> Modified: llvm/trunk/lib/Analysis/DependenceAnalysis.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DependenceAnalysis.cpp?rev=216357&r1=216356&r2=216357&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DependenceAnalysis.cpp?rev=216357&r1=216356&r2=216357&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Analysis/DependenceAnalysis.cpp (original)<br>
> +++ llvm/trunk/lib/Analysis/DependenceAnalysis.cpp Sun Aug 24 19:28:39 2014<br>
> @@ -163,7 +163,7 @@ void dumpExampleDependence(raw_ostream &<br>
> DstI != DstE; ++DstI) {<br>
> if (isa<StoreInst>(*DstI) || isa<LoadInst>(*DstI)) {<br>
> OS << "da analyze - ";<br>
> - if (Dependence *D = DA->depends(&*SrcI, &*DstI, true)) {<br>
> + if (auto D = DA->depends(&*SrcI, &*DstI, true)) {<br>
> D->dump(OS);<br>
> for (unsigned Level = 1; Level <= D->getLevels(); Level++) {<br>
> if (D->isSplitable(Level)) {<br>
> @@ -172,7 +172,6 @@ void dumpExampleDependence(raw_ostream &<br>
> OS << "!\n";<br>
> }<br>
> }<br>
> - delete D;<br>
> }<br>
> else<br>
> OS << "none!\n";<br>
> @@ -3277,9 +3276,9 @@ static void dumpSmallBitVector(SmallBitV<br>
> //<br>
> // Care is required to keep the routine below, getSplitIteration(),<br>
> // up to date with respect to this routine.<br>
> -Dependence *DependenceAnalysis::depends(Instruction *Src,<br>
> - Instruction *Dst,<br>
> - bool PossiblyLoopIndependent) {<br>
> +std::unique_ptr<Dependence><br>
> +DependenceAnalysis::depends(Instruction *Src, Instruction *Dst,<br>
> + bool PossiblyLoopIndependent) {<br>
> if (Src == Dst)<br>
> PossiblyLoopIndependent = false;<br>
><br>
> @@ -3291,7 +3290,7 @@ Dependence *DependenceAnalysis::depends(<br>
> if (!isLoadOrStore(Src) || !isLoadOrStore(Dst)) {<br>
> // can only analyze simple loads and stores, i.e., no calls, invokes, etc.<br>
> DEBUG(dbgs() << "can only handle simple loads and stores\n");<br>
> - return new Dependence(Src, Dst);<br>
> + return make_unique<Dependence>(Src, Dst);<br>
> }<br>
><br>
> Value *SrcPtr = getPointerOperand(Src);<br>
> @@ -3302,7 +3301,7 @@ Dependence *DependenceAnalysis::depends(<br>
> case AliasAnalysis::PartialAlias:<br>
> // cannot analyse objects if we don't understand their aliasing.<br>
> DEBUG(dbgs() << "can't analyze may or partial alias\n");<br>
> - return new Dependence(Src, Dst);<br>
> + return make_unique<Dependence>(Src, Dst);<br>
> case AliasAnalysis::NoAlias:<br>
> // If the objects noalias, they are distinct, accesses are independent.<br>
> DEBUG(dbgs() << "no alias\n");<br>
> @@ -3675,7 +3674,8 @@ Dependence *DependenceAnalysis::depends(<br>
> return nullptr;<br>
> }<br>
><br>
> - FullDependence *Final = new FullDependence(Result);<br>
> + std::unique_ptr<Dependence> Final;<br>
> + Final.reset(new FullDependence(Result));</p>
<p dir="ltr">This might be more simply written as:<br>
<br>
auto Final = llvm::make_unique<FullDependence>(Result)<br> ...<br> return std::move(Final); // move not required in C++14, I believe<br><br>or:<br><br> std::unique_ptr<Dependence> Final(new FullDependence(Result));<br>
...<br> return Final;<br><br>It's a tradeoff either way, but either is a strict improvement over the explicit "reset" usage you have, I think.</p>
<p dir="ltr">> Result.DV = nullptr;<br>
> return Final;<br>
> }<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</p>
</div>