diff options
author | Devang Patel <dpatel@apple.com> | 2011-01-25 23:27:42 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2011-01-25 23:27:42 +0000 |
commit | efc6b16e4ba24d7624b27642a00a74208823368c (patch) | |
tree | 0dc7bbd776e3c8a08a1c933b4806fb42b781f017 /llvm/lib/CodeGen/SelectionDAG | |
parent | 4e52cc7de46aaf2052063847ef3eaf0bca50a841 (diff) | |
download | bcm5719-llvm-efc6b16e4ba24d7624b27642a00a74208823368c.tar.gz bcm5719-llvm-efc6b16e4ba24d7624b27642a00a74208823368c.zip |
Provide an interface to transfer SDDbgValue from one SDNode to another.
llvm-svn: 124245
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h | 8 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 17 |
2 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h b/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h index 2dcb2295732..e5cd23a6c9f 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h +++ b/llvm/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/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index f6aea1f7956..e751e22a81b 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/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<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) { + AddDbgValue(*I, ToNode, false); + (*I)->setSDNode(ToNode, To.getResNo()); + } + } +} + //===----------------------------------------------------------------------===// // SDNode Class //===----------------------------------------------------------------------===// |