[llvm] r277135 - Cleanup TransferDbgValues

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 29 09:26:21 PDT 2016


Merged to 3.9 in r277164.

Thanks,
Hans

On Fri, Jul 29, 2016 at 4:49 AM, Nirav Dave via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: niravd
> Date: Fri Jul 29 06:49:32 2016
> New Revision: 277135
>
> URL: http://llvm.org/viewvc/llvm-project?rev=277135&view=rev
> Log:
> Cleanup TransferDbgValues
>
> [DAG] Check debug values for invalidation before transferring and mark
> old debug values invalid when transferring to another SDValue.
>
> This fixes PR28613.
>
> Reviewers: jyknight, hans, dblaikie, echristo
>
> Subscribers: yaron.keren, ismail, llvm-commits
>
> Differential Revision: https://reviews.llvm.org/D22858
>
> Modified:
>     llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=277135&r1=277134&r2=277135&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Fri Jul 29 06:49:32 2016
> @@ -6640,19 +6640,26 @@ void SelectionDAG::TransferDbgValues(SDV
>    SDNode *FromNode = From.getNode();
>    SDNode *ToNode = To.getNode();
>    ArrayRef<SDDbgValue *> DVs = GetDbgValues(FromNode);
> +  SmallVector<SDDbgValue *, 2> ClonedDVs;
>    for (ArrayRef<SDDbgValue *>::iterator I = DVs.begin(), E = DVs.end();
>         I != E; ++I) {
>      SDDbgValue *Dbg = *I;
>      // Only add Dbgvalues attached to same ResNo.
>      if (Dbg->getKind() == SDDbgValue::SDNODE &&
> -        Dbg->getResNo() == From.getResNo()) {
> +        Dbg->getSDNode() == From.getNode() &&
> +        Dbg->getResNo() == From.getResNo() && !Dbg->isInvalidated()) {
> +      assert(FromNode != ToNode &&
> +             "Should not transfer Debug Values intranode");
>        SDDbgValue *Clone =
>            getDbgValue(Dbg->getVariable(), Dbg->getExpression(), ToNode,
>                        To.getResNo(), Dbg->isIndirect(), Dbg->getOffset(),
>                        Dbg->getDebugLoc(), Dbg->getOrder());
> -      AddDbgValue(Clone, ToNode, false);
> +      ClonedDVs.push_back(Clone);
> +      Dbg->setIsInvalidated();
>      }
>    }
> +  for (SDDbgValue *I : ClonedDVs)
> +    AddDbgValue(I, ToNode, false);
>  }
>
>  //===----------------------------------------------------------------------===//
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list