[llvm] r231335 - Revert r231103, "FullDependenceAnalysis: Avoid using the (deprecated in C++11) copy ctor"

David Blaikie dblaikie at gmail.com
Wed Mar 4 17:50:00 PST 2015


On Wed, Mar 4, 2015 at 5:25 PM, NAKAMURA Takumi <geek4civic at gmail.com>
wrote:

> Author: chapuni
> Date: Wed Mar  4 19:25:12 2015
> New Revision: 231335
>
> URL: http://llvm.org/viewvc/llvm-project?rev=231335&view=rev
> Log:
> Revert r231103, "FullDependenceAnalysis: Avoid using the (deprecated in
> C++11) copy ctor"
>
> It is miscompiled on msc18.
>

Any ideas on what the miscompile was? Or workarounds that avoid tickling
it? It'd probably be handy to know what tickles this sort of thing so we
can recognize/avoid it in the future in other places.


>
> Modified:
>     llvm/trunk/lib/Analysis/DependenceAnalysis.cpp
>
> Modified: llvm/trunk/lib/Analysis/DependenceAnalysis.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DependenceAnalysis.cpp?rev=231335&r1=231334&r2=231335&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/DependenceAnalysis.cpp (original)
> +++ llvm/trunk/lib/Analysis/DependenceAnalysis.cpp Wed Mar  4 19:25:12 2015
> @@ -3334,8 +3334,7 @@ DependenceAnalysis::depends(Instruction
>    DEBUG(dbgs() << "    common nesting levels = " << CommonLevels << "\n");
>    DEBUG(dbgs() << "    maximum nesting levels = " << MaxLevels << "\n");
>
> -  auto Result = llvm::make_unique<FullDependence>(
> -      Src, Dst, PossiblyLoopIndependent, CommonLevels);
> +  FullDependence Result(Src, Dst, PossiblyLoopIndependent, CommonLevels);
>    ++TotalArrayPairs;
>
>    // See if there are GEPs we can use.
> @@ -3473,7 +3472,7 @@ DependenceAnalysis::depends(Instruction
>        collectCommonLoops(Pair[SI].Dst,
>                           LI->getLoopFor(Dst->getParent()),
>                           Pair[SI].Loops);
> -      Result->Consistent = false;
> +      Result.Consistent = false;
>      }
>      else if (Pair[SI].Classification == Subscript::ZIV) {
>        // always separable
> @@ -3520,26 +3519,26 @@ DependenceAnalysis::depends(Instruction
>      switch (Pair[SI].Classification) {
>      case Subscript::ZIV:
>        DEBUG(dbgs() << ", ZIV\n");
> -      if (testZIV(Pair[SI].Src, Pair[SI].Dst, *Result))
> +      if (testZIV(Pair[SI].Src, Pair[SI].Dst, Result))
>          return nullptr;
>        break;
>      case Subscript::SIV: {
>        DEBUG(dbgs() << ", SIV\n");
>        unsigned Level;
>        const SCEV *SplitIter = nullptr;
> -      if (testSIV(Pair[SI].Src, Pair[SI].Dst, Level, *Result,
> NewConstraint,
> -                  SplitIter))
> +      if (testSIV(Pair[SI].Src, Pair[SI].Dst, Level,
> +                  Result, NewConstraint, SplitIter))
>          return nullptr;
>        break;
>      }
>      case Subscript::RDIV:
>        DEBUG(dbgs() << ", RDIV\n");
> -      if (testRDIV(Pair[SI].Src, Pair[SI].Dst, *Result))
> +      if (testRDIV(Pair[SI].Src, Pair[SI].Dst, Result))
>          return nullptr;
>        break;
>      case Subscript::MIV:
>        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;
>        break;
>      default:
> @@ -3576,8 +3575,8 @@ DependenceAnalysis::depends(Instruction
>            unsigned Level;
>            const SCEV *SplitIter = nullptr;
>            DEBUG(dbgs() << "SIV\n");
> -          if (testSIV(Pair[SJ].Src, Pair[SJ].Dst, Level, *Result,
> NewConstraint,
> -                      SplitIter))
> +          if (testSIV(Pair[SJ].Src, Pair[SJ].Dst, Level,
> +                      Result, NewConstraint, SplitIter))
>              return nullptr;
>            ConstrainedLevels.set(Level);
>            if (intersectConstraints(&Constraints[Level], &NewConstraint)) {
> @@ -3598,7 +3597,7 @@ DependenceAnalysis::depends(Instruction
>              // SJ is an MIV subscript that's part of the current coupled
> group
>              DEBUG(dbgs() << "\tSJ = " << SJ << "\n");
>              if (propagate(Pair[SJ].Src, Pair[SJ].Dst, Pair[SJ].Loops,
> -                          Constraints, Result->Consistent)) {
> +                          Constraints, Result.Consistent)) {
>                DEBUG(dbgs() << "\t    Changed\n");
>                ++DeltaPropagations;
>                Pair[SJ].Classification =
> @@ -3608,7 +3607,7 @@ DependenceAnalysis::depends(Instruction
>                switch (Pair[SJ].Classification) {
>                case Subscript::ZIV:
>                  DEBUG(dbgs() << "ZIV\n");
> -                if (testZIV(Pair[SJ].Src, Pair[SJ].Dst, *Result))
> +                if (testZIV(Pair[SJ].Src, Pair[SJ].Dst, Result))
>                    return nullptr;
>                  Mivs.reset(SJ);
>                  break;
> @@ -3631,7 +3630,7 @@ DependenceAnalysis::depends(Instruction
>        for (int SJ = Mivs.find_first(); SJ >= 0; SJ = Mivs.find_next(SJ)) {
>          if (Pair[SJ].Classification == Subscript::RDIV) {
>            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;
>            // I don't yet understand how to propagate RDIV results
>            Mivs.reset(SJ);
> @@ -3644,19 +3643,19 @@ DependenceAnalysis::depends(Instruction
>        for (int SJ = Mivs.find_first(); SJ >= 0; SJ = Mivs.find_next(SJ)) {
>          if (Pair[SJ].Classification == Subscript::MIV) {
>            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;
>          }
>          else
>            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");
>        for (int SJ = ConstrainedLevels.find_first();
>             SJ >= 0; SJ = ConstrainedLevels.find_next(SJ)) {
> -        updateDirection(Result->DV[SJ - 1], Constraints[SJ]);
> -        if (Result->DV[SJ - 1].Direction == Dependence::DVEntry::NONE)
> +        updateDirection(Result.DV[SJ - 1], Constraints[SJ]);
> +        if (Result.DV[SJ - 1].Direction == Dependence::DVEntry::NONE)
>            return nullptr;
>        }
>      }
> @@ -3668,15 +3667,15 @@ DependenceAnalysis::depends(Instruction
>      CompleteLoops |= Pair[SI].Loops;
>    for (unsigned II = 1; II <= CommonLevels; ++II)
>      if (CompleteLoops[II])
> -      Result->DV[II - 1].Scalar = false;
> +      Result.DV[II - 1].Scalar = false;
>
>    if (PossiblyLoopIndependent) {
>      // Make sure the LoopIndependent flag is set correctly.
>      // All directions must include equal, otherwise no
>      // loop-independent dependence is possible.
>      for (unsigned II = 1; II <= CommonLevels; ++II) {
> -      if (!(Result->getDirection(II) & Dependence::DVEntry::EQ)) {
> -        Result->LoopIndependent = false;
> +      if (!(Result.getDirection(II) & Dependence::DVEntry::EQ)) {
> +        Result.LoopIndependent = false;
>          break;
>        }
>      }
> @@ -3686,7 +3685,7 @@ DependenceAnalysis::depends(Instruction
>      // loop-independent dependence possible, then no dependence exists.
>      bool AllEqual = true;
>      for (unsigned II = 1; II <= CommonLevels; ++II) {
> -      if (Result->getDirection(II) != Dependence::DVEntry::EQ) {
> +      if (Result.getDirection(II) != Dependence::DVEntry::EQ) {
>          AllEqual = false;
>          break;
>        }
> @@ -3695,7 +3694,9 @@ DependenceAnalysis::depends(Instruction
>        return nullptr;
>    }
>
> -  return std::move(Result);
> +  auto Final = make_unique<FullDependence>(Result);
> +  Result.DV = nullptr;
> +  return std::move(Final);
>  }
>
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150304/6cb3a089/attachment.html>


More information about the llvm-commits mailing list