While legalizing SDValues do not drop SDDbgValues, trasfer them to new legal nodes.
authorDevang Patel <dpatel@apple.com>
Thu, 27 Jan 2011 17:43:53 +0000 (17:43 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 27 Jan 2011 17:43:53 +0000 (17:43 +0000)
Take 2. This includes fix for dragonegg crash.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124380 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index 9c35b40012b561de05f17357dc4e6d2c97e3c213..f588dd0666840e21ef00effa5817d1c313f65698 100644 (file)
@@ -87,6 +87,9 @@ class SelectionDAGLegalize {
     // If someone requests legalization of the new node, return itself.
     if (From != To)
       LegalizedNodes.insert(std::make_pair(To, To));
+    
+    // Transfer SDDbgValues.
+    DAG.TransferDbgValues(From, To);
   }
 
 public:
index d14cae39192358be7c7eed432e001be8ca17b40c..17be6b14b77bec2f800673dfabd6eddc28cb5bff 100644 (file)
@@ -5474,7 +5474,6 @@ void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) {
   SDNode *FromNode = From.getNode();
   SDNode *ToNode = To.getNode();
   SmallVector<SDDbgValue*,2> &DVs = GetDbgValues(FromNode);
-  DbgInfo->removeSDDbgValues(FromNode);
   for (SmallVector<SDDbgValue *, 2>::iterator I = DVs.begin(), E = DVs.end();
        I != E; ++I) {
     if ((*I)->getKind() == SDDbgValue::SDNODE) {
@@ -5482,6 +5481,7 @@ void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) {
       (*I)->setSDNode(ToNode, To.getResNo());
     }
   }
+  DbgInfo->removeSDDbgValues(FromNode);
 }
 
 //===----------------------------------------------------------------------===//