From: Devang Patel Date: Tue, 25 Jan 2011 23:27:42 +0000 (+0000) Subject: Provide an interface to transfer SDDbgValue from one SDNode to another. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a2e868d34ccfed46310e98338ded6a74b2b01308;p=oota-llvm.git Provide an interface to transfer SDDbgValue from one SDNode to another. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124245 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/SelectionDAG.h b/include/llvm/CodeGen/SelectionDAG.h index 4f8e98b3c92..136bdd5b4de 100644 --- a/include/llvm/CodeGen/SelectionDAG.h +++ b/include/llvm/CodeGen/SelectionDAG.h @@ -100,6 +100,10 @@ public: return DbgValMap[Node]; } + void removeSDDbgValues(const SDNode *Node) { + DbgValMap.erase(Node); + } + typedef SmallVector::iterator DbgIterator; DbgIterator DbgBegin() { return DbgValues.begin(); } DbgIterator DbgEnd() { return DbgValues.end(); } @@ -901,6 +905,9 @@ public: SmallVector &GetDbgValues(const SDNode* SD) { return DbgInfo->getSDDbgValues(SD); } + + /// TransferDbgValues - Transfer SDDbgValues. + void TransferDbgValues(SDValue From, SDValue To); /// hasDebugValues - Return true if there are any SDDbgValue nodes associated /// with this SelectionDAG. diff --git a/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h b/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h index 2dcb2295732..e5cd23a6c9f 100644 --- a/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h +++ b/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h @@ -83,6 +83,14 @@ public: // Returns the SDNode* for a register ref SDNode *getSDNode() { assert (kind==SDNODE); return u.s.Node; } + // setSDNode - If underlying SDNode is replaced by another node then + // SelectionDAG can use this to transfer DbgValue. + void setSDNode(SDNode *N, unsigned R) { + assert (kind==SDNODE); + u.s.Node = N; + u.s.ResNo = R; + } + // Returns the ResNo for a register ref unsigned getResNo() { assert (kind==SDNODE); return u.s.ResNo; } diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index f6aea1f7956..e751e22a81b 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -5424,6 +5424,23 @@ void SelectionDAG::AddDbgValue(SDDbgValue *DB, SDNode *SD, bool isParameter) { SD->setHasDebugValue(true); } +/// TransferDbgValues - Transfer SDDbgValues. +void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) { + if (From == To || !From.getNode()->getHasDebugValue()) + return; + SDNode *FromNode = From.getNode(); + SDNode *ToNode = To.getNode(); + SmallVector &DVs = GetDbgValues(FromNode); + DbgInfo->removeSDDbgValues(FromNode); + for (SmallVector::iterator I = DVs.begin(), E = DVs.end(); + I != E; ++I) { + if ((*I)->getKind() == SDDbgValue::SDNODE) { + AddDbgValue(*I, ToNode, false); + (*I)->setSDNode(ToNode, To.getResNo()); + } + } +} + //===----------------------------------------------------------------------===// // SDNode Class //===----------------------------------------------------------------------===//