<div dir="ltr">This change caused <a href="https://llvm.org/bugs/show_bug.cgi?id=28270" target="_blank">https://llvm.org/bugs/show_bug.cgi?id=28270</a> which broke our chromium bots. Reverting.<div><br></div><div>Peter</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 22, 2016 at 12:03 PM, Nirav Dave via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: niravd<br>
Date: Wed Jun 22 14:03:26 2016<br>
New Revision: 273456<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=273456&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=273456&view=rev</a><br>
Log:<br>
Preserve DebugInfo when replacing values in DAGCombiner<br>
<br>
Recommiting after fixing over-aggressive assertion<br>
<br>
[DAG] Previously debug values would transfer debuginfo for the selected<br>
start node for a replacement which allows for debug to be dropped.<br>
<br>
Push debug value transfer to occur with node/value replacement in<br>
SelectionDAG, remove now extraneous transfers of debug values.<br>
<br>
This refixes PR9817 which was being incompletely checked in the<br>
testsuite.<br>
<br>
Reviewers: jyknight<br>
<br>
Subscribers: dblaikie, llvm-commits<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D21037" rel="noreferrer" target="_blank">http://reviews.llvm.org/D21037</a><br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/CodeGen/SelectionDAG.h<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp<br>
    llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp<br>
    llvm/trunk/lib/Target/Hexagon/HexagonISelLowering.cpp<br>
    llvm/trunk/test/DebugInfo/X86/dbg-value-dag-combine.ll<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=273456&r1=273455&r2=273456&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=273456&r1=273455&r2=273456&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/SelectionDAG.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Wed Jun 22 14:03:26 2016<br>
@@ -1221,9 +1221,11 @@ public:<br>
     return DbgInfo->getSDDbgValues(SD);<br>
   }<br>
<br>
-  /// Transfer SDDbgValues.<br>
+private:<br>
+  /// Transfer SDDbgValues. Called via ReplaceAllUses{OfValue}?With<br>
   void TransferDbgValues(SDValue From, SDValue To);<br>
<br>
+public:<br>
   /// Return true if there are any SDDbgValue nodes associated<br>
   /// with this SelectionDAG.<br>
   bool hasDebugValues() const { return !DbgInfo->empty(); }<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=273456&r1=273455&r2=273456&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=273456&r1=273455&r2=273456&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Wed Jun 22 14:03:26 2016<br>
@@ -1333,8 +1333,6 @@ void DAGCombiner::Run(CombineLevel AtLev<br>
     DEBUG(dbgs() << " ... into: ";<br>
           RV.getNode()->dump(&DAG));<br>
<br>
-    // Transfer debug value.<br>
-    DAG.TransferDbgValues(SDValue(N, 0), RV);<br>
     if (N->getNumValues() == RV.getNode()->getNumValues())<br>
       DAG.ReplaceAllUsesWith(N, RV.getNode());<br>
     else {<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp?rev=273456&r1=273455&r2=273456&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp?rev=273456&r1=273455&r2=273456&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/InstrEmitter.cpp Wed Jun 22 14:03:26 2016<br>
@@ -320,7 +320,6 @@ InstrEmitter::AddRegisterOperand(Machine<br>
          "Chain and glue operands should occur at end of operand list!");<br>
   // Get/emit the operand.<br>
   unsigned VReg = getVR(Op, VRBaseMap);<br>
-  assert(TargetRegisterInfo::isVirtualRegister(VReg) && "Not a vreg?");<br>
<br>
   const MCInstrDesc &MCID = MIB->getDesc();<br>
   bool isOptDef = IIOpNum < MCID.getNumOperands() &&<br>
@@ -334,6 +333,8 @@ InstrEmitter::AddRegisterOperand(Machine<br>
     const TargetRegisterClass *DstRC = nullptr;<br>
     if (IIOpNum < II->getNumOperands())<br>
       DstRC = TRI->getAllocatableClass(TII->getRegClass(*II,IIOpNum,TRI,*MF));<br>
+    assert((!DstRC || TargetRegisterInfo::isVirtualRegister(VReg)) &&<br>
+           "Expected VReg");<br>
     if (DstRC && !MRI->constrainRegClass(VReg, DstRC, MinRCSize)) {<br>
       unsigned NewVReg = MRI->createVirtualRegister(DstRC);<br>
       BuildMI(*MBB, InsertPos, Op.getNode()->getDebugLoc(),<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=273456&r1=273455&r2=273456&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=273456&r1=273455&r2=273456&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Jun 22 14:03:26 2016<br>
@@ -179,8 +179,6 @@ public:<br>
            "Replacing one node with another that produces a different number "<br>
            "of values!");<br>
     DAG.ReplaceAllUsesWith(Old, New);<br>
-    for (unsigned i = 0, e = Old->getNumValues(); i != e; ++i)<br>
-      DAG.TransferDbgValues(SDValue(Old, i), SDValue(New, i));<br>
     if (UpdatedNodes)<br>
       UpdatedNodes->insert(New);<br>
     ReplacedNode(Old);<br>
@@ -190,7 +188,6 @@ public:<br>
           dbgs() << "     with:      "; New->dump(&DAG));<br>
<br>
     DAG.ReplaceAllUsesWith(Old, New);<br>
-    DAG.TransferDbgValues(Old, New);<br>
     if (UpdatedNodes)<br>
       UpdatedNodes->insert(New.getNode());<br>
     ReplacedNode(Old.getNode());<br>
@@ -203,7 +200,6 @@ public:<br>
       DEBUG(dbgs() << (i == 0 ? "     with:      "<br>
                               : "      and:      ");<br>
             New[i]->dump(&DAG));<br>
-      DAG.TransferDbgValues(SDValue(Old, i), New[i]);<br>
       if (UpdatedNodes)<br>
         UpdatedNodes->insert(New[i].getNode());<br>
     }<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=273456&r1=273455&r2=273456&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=273456&r1=273455&r2=273456&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Wed Jun 22 14:03:26 2016<br>
@@ -6333,6 +6333,9 @@ void SelectionDAG::ReplaceAllUsesWith(SD<br>
     AddModifiedNodeToCSEMaps(User);<br>
   }<br>
<br>
+  // Preserve Debug Values<br>
+  TransferDbgValues(FromN, To);<br>
+<br>
   // If we just RAUW'd the root, take note.<br>
   if (FromN == getRoot())<br>
     setRoot(To);<br>
@@ -6356,6 +6359,11 @@ void SelectionDAG::ReplaceAllUsesWith(SD<br>
   if (From == To)<br>
     return;<br>
<br>
+  // Preserve Debug Info. Only do this if there's a use.<br>
+  for (unsigned i = 0, e = From->getNumValues(); i != e; ++i)<br>
+    if (From->hasAnyUseOfValue(i))<br>
+      TransferDbgValues(SDValue(From, i), SDValue(To, i));<br>
+<br>
   // Iterate over just the existing users of From. See the comments in<br>
   // the ReplaceAllUsesWith above.<br>
   SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();<br>
@@ -6395,6 +6403,10 @@ void SelectionDAG::ReplaceAllUsesWith(SD<br>
   if (From->getNumValues() == 1)  // Handle the simple case efficiently.<br>
     return ReplaceAllUsesWith(SDValue(From, 0), To[0]);<br>
<br>
+  // Preserve Debug Info.<br>
+  for (unsigned i = 0, e = From->getNumValues(); i != e; ++i)<br>
+    TransferDbgValues(SDValue(From, i), *To);<br>
+<br>
   // Iterate over just the existing users of From. See the comments in<br>
   // the ReplaceAllUsesWith above.<br>
   SDNode::use_iterator UI = From->use_begin(), UE = From->use_end();<br>
@@ -6439,6 +6451,9 @@ void SelectionDAG::ReplaceAllUsesOfValue<br>
     return;<br>
   }<br>
<br>
+  // Preserve Debug Info.<br>
+  TransferDbgValues(From, To);<br>
+<br>
   // Iterate over just the existing users of From. See the comments in<br>
   // the ReplaceAllUsesWith above.<br>
   SDNode::use_iterator UI = From.getNode()->use_begin(),<br>
@@ -6513,6 +6528,8 @@ void SelectionDAG::ReplaceAllUsesOfValue<br>
   if (Num == 1)<br>
     return ReplaceAllUsesOfValueWith(*From, *To);<br>
<br>
+  TransferDbgValues(*From, *To);<br>
+<br>
   // Read up all the uses and make records of them. This helps<br>
   // processing new uses that are introduced during the<br>
   // replacement process.<br>
@@ -6661,7 +6678,7 @@ void SelectionDAG::AddDbgValue(SDDbgValu<br>
   DbgInfo->add(DB, SD, isParameter);<br>
 }<br>
<br>
-/// TransferDbgValues - Transfer SDDbgValues.<br>
+/// TransferDbgValues - Transfer SDDbgValues. Called in replace nodes.<br>
 void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) {<br>
   if (From == To || !From.getNode()->getHasDebugValue())<br>
     return;<br>
<br>
Modified: llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp?rev=273456&r1=273455&r2=273456&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp?rev=273456&r1=273455&r2=273456&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp (original)<br>
+++ llvm/trunk/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp Wed Jun 22 14:03:26 2016<br>
@@ -1308,8 +1308,6 @@ void HexagonDAGToDAGISel::SelectFrameInd<br>
     R = CurDAG->getMachineNode(Hexagon::TFR_FIA, DL, MVT::i32, Ops);<br>
   }<br>
<br>
-  if (N->getHasDebugValue())<br>
-    CurDAG->TransferDbgValues(SDValue(N, 0), SDValue(R, 0));<br>
   ReplaceNode(N, R);<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/Hexagon/HexagonISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonISelLowering.cpp?rev=273456&r1=273455&r2=273456&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonISelLowering.cpp?rev=273456&r1=273455&r2=273456&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/Hexagon/HexagonISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/Hexagon/HexagonISelLowering.cpp Wed Jun 22 14:03:26 2016<br>
@@ -1057,8 +1057,8 @@ HexagonTargetLowering::LowerDYNAMIC_STAC<br>
   SDValue AC = DAG.getConstant(A, dl, MVT::i32);<br>
   SDVTList VTs = DAG.getVTList(MVT::i32, MVT::Other);<br>
   SDValue AA = DAG.getNode(HexagonISD::ALLOCA, dl, VTs, Chain, Size, AC);<br>
-  if (Op.getNode()->getHasDebugValue())<br>
-    DAG.TransferDbgValues(Op, AA);<br>
+<br>
+  DAG.ReplaceAllUsesOfValueWith(Op, AA);<br>
   return AA;<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/dbg-value-dag-combine.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-value-dag-combine.ll?rev=273456&r1=273455&r2=273456&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-value-dag-combine.ll?rev=273456&r1=273455&r2=273456&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/dbg-value-dag-combine.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/dbg-value-dag-combine.ll Wed Jun 22 14:03:26 2016<br>
@@ -3,6 +3,13 @@ target datalayout = "e-p:32:32:32-i1:8:8<br>
 target triple = "i686-apple-darwin"<br>
 ; PR 9817<br>
<br>
+; There should be a DEBUG_VALUE for each call to llvm.dbg.value<br>
+<br>
+; CHECK:  ##DEBUG_VALUE: __OpenCL_test_kernel:ip <-<br>
+; CHECK:  ##DEBUG_VALUE: xxx <- 0<br>
+; CHECK:  ##DEBUG_VALUE: gid <- %E{{..$}}<br>
+; CHECK:  ##DEBUG_VALUE: idx <- %E{{..$}}<br>
+; CHECK-NOT:  ##DEBUG_VALUE:<br>
<br>
 declare <4 x i32> @__amdil_get_global_id_int()<br>
 declare void @llvm.dbg.value(metadata, i64, metadata, metadata)<br>
@@ -12,10 +19,9 @@ entry:<br>
   %0 = call <4 x i32> @__amdil_get_global_id_int() nounwind<br>
   %1 = extractelement <4 x i32> %0, i32 0<br>
   call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !9, metadata !DIExpression()), !dbg !11<br>
-  call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !13, metadata !DIExpression()), !dbg !14<br>
+  call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !21, metadata !DIExpression()), !dbg !14<br>
   %tmp2 = load i32, i32 addrspace(1)* %ip, align 4, !dbg !15<br>
   %tmp3 = add i32 0, %tmp2, !dbg !15<br>
-; CHECK:  ##DEBUG_VALUE: idx <- %E{{..$}}<br>
   call void @llvm.dbg.value(metadata i32 %tmp3, i64 0, metadata !13, metadata !DIExpression()), !dbg !15<br>
   %arrayidx = getelementptr i32, i32 addrspace(1)* %ip, i32 %1, !dbg !16<br>
   store i32 %tmp3, i32 addrspace(1)* %arrayidx, align 4, !dbg !16<br>
@@ -44,3 +50,4 @@ entry:<br>
 !17 = !DILocation(line: 7, column: 1, scope: !0)<br>
 !19 = !DIFile(filename: "<a href="http://OCL6368.tmp.cl" rel="noreferrer" target="_blank">OCL6368.tmp.cl</a>", directory: "E:\5CUsers\5Cmvillmow.AMD\5CAppData\5CLocal\5CTemp")<br>
 !20 = !{i32 1, !"Debug Info Version", i32 3}<br>
+!21 = !DILocalVariable(name: "xxx", line: 4, scope: !10, file: !1, type: !6)<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div>