<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>