<div dir="ltr">Not easily, no. If you have verified your fix against the reproducer in pr28270, that should be sufficient.<div><br></div><div>Peter</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 23, 2016 at 10:01 AM, Nirav Davé <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"><div dir="ltr">The problem appears to be due to the fact that llvm was not checking that copied debug values came from the appropriate value just the node causing the value duplication Mikael noted. Surprising that this didn't come up before. <div><br></div><div>I have a fix that appears to work and am running through a final sanity check now. Peter, Is there an easy way I can check that chromium builds works before I recommit this?<span class="HOEnZb"><font color="#888888"><div><br></div><div>-Nirav</div></font></span></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 23, 2016 at 3:55 AM, Mikael Holmén <span dir="ltr"><<a href="mailto:mikael.holmen@ericsson.com" target="_blank">mikael.holmen@ericsson.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
This commit seems to introduce way too many DBG_VALUE<br>
<br>
During ISel I see<br>
<br>
===== Instruction selection ends:<br>
Selected selection DAG: BB#12 'two:bb12'<br>
SelectionDAG has 50 nodes:<br>
  t1: i16 = load_stack_address_pseudo TargetFrameIndex:i16<0><br>
  t6: i16 = mv_any16 TargetConstant:i16<202>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0><br>
    t0: ch = EntryToken<br>
  t9: ch = mv_any16_r16_nimm12<Mem:ST1[%_tmp199]> t6, t1, TargetConstant:i16<3>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t0<br>
  t41: i32,ch = mv_r16_nimm12_ar32_aN32dst<Mem:LD2[%sunkaddr3](align=1)> t1, TargetConstant:i16<9>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t9<br>
  t35: i16,ch = mv_r16_nimm12_any16<Mem:LD1[%13]> t1, TargetConstant:i16<8>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t9<br>
  t31: i16,ch = mv_r16_nimm12_any16<Mem:LD1[%11]> t1, TargetConstant:i16<7>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t9<br>
  t27: i16,ch = mv_r16_nimm12_any16<Mem:LD1[%9]> t1, TargetConstant:i16<6>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t9<br>
  t23: i16,ch = mv_r16_nimm12_any16<Mem:LD1[%7]> t1, TargetConstant:i16<5>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t9<br>
  t19: i16,ch = mv_r16_nimm12_any16<Mem:LD1[%5]> t1, TargetConstant:i16<4>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t9<br>
  t14: i16,ch = mv_r16_nimm12_any16<Mem:LD1[%_tmp200.unpack6.unpack.elt]> t1, TargetConstant:i16<2>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t9<br>
    t44: ch = TokenFactor t97:1, t14:1, t19:1, t23:1, t27:1, t31:1, t35:1, t41:1<br>
  t46: i16,ch,glue = ADJCALLSTACKDOWN TargetConstant:i16<11>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t44<br>
  t49: ch,glue = push_any32 t41, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t46:1, t46:2<br>
  t50: ch,glue = push_any16 t35, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t49, t49:1<br>
  t51: ch,glue = push_any16 t31, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t50, t50:1<br>
  t52: ch,glue = push_any16 t27, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t51, t51:1<br>
  t53: ch,glue = push_any16 t23, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t52, t52:1<br>
  t54: ch,glue = push_any16 t19, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t53, t53:1<br>
  t55: ch,glue = push_any16 t6, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t54, t54:1<br>
  t56: ch,glue = push_any16 t14, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t55, t55:1<br>
  t57: ch,glue = push_any32 t97, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t56, t56:1<br>
  t59: i40,ch,glue = callr TargetGlobalAddress:i16<void (%rec830) addrspace(40)* @g_cm_set> 0, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t57, t57:1<br>
  t60: i16,ch,glue = ADJCALLSTACKUP TargetConstant:i16<11>, TargetConstant:i16<0>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t59:1, t59:2<br>
        t94: i32 = mv32Sym TargetGlobalAddress:i32<%rec830 addrspace(21)* @g_cm_s> 0<br>
      t76: i32,i16 = add_nimm5_a32 t94, TargetConstant:i32<3>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0><br>
    t67: i16,i16,ch = aload_a16<Mem:LD1[getelementptr inbounds (%rec830, %rec830 addrspace(21)* @g_cm_s, i32 0, i32 1, i32 0, i32 1)(addrspace=21)]> t76, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t60:1<br>
  t91: i16,ch,glue = cmp_nimm16_a16 t67, TargetConstant:i16<202>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t60:1<br>
  t97: i32,ch = mv_dp16_nimm13_any32<Mem:LD2[%1](align=1)> TargetFrameIndex:i16<0>, TargetConstant:i16<0>, Register:i16 %noreg, TargetConstant:i16<0>, t9<br>
    t92: ch = brr_cond BasicBlock:ch<bb14 0x3803dc8>, TargetConstant:i16<2>, Register:i16 %CCReg, TargetConstant:i16<0>, t91:1, t91:2<br>
  t73: ch = brr_uncond BasicBlock:ch<bb13 0x3803d18>, t92<br>
<br>
and then somewhat later this is turned into:<br>
<br>
*** MachineFunction at end of ISel ***<br>
# Machine code for function two (#32): Properties: <SSA, tracking liveness, HasVRegs><br>
[...]<br>
BB#12: derived from LLVM BB %bb12<br>
    Predecessors according to CFG: BB#10<br>
        %vreg40<def> = mv_any16 202, pred:0, pred:%noreg, pred:0, %ac0<imp-use>, %ac1<imp-use>; aNlh_rN:%vreg40 dbg:/repo/uabelho/dev-master/tmp/cmtest.c:189:3<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
        DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
<br>
and then comes literally zillions of<br>
        <br>
DBG_VALUE %vreg40, %noreg, !"s", <!32>; aNlh_rN:%vreg40 line no:168<br>
<br>
Regards,<br>
Mikael<div><div><br>
<br>
On 06/22/2016 09:03 PM, Nirav Dave via llvm-commits 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" target="_blank">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>
<br>
</blockquote>
</div></div></blockquote></div><br></div>
</div></div><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>
<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>