mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	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
This commit is contained in:
		| @@ -100,6 +100,10 @@ public: | ||||
|     return DbgValMap[Node]; | ||||
|   } | ||||
|  | ||||
|   void removeSDDbgValues(const SDNode *Node) { | ||||
|     DbgValMap.erase(Node); | ||||
|   } | ||||
|  | ||||
|   typedef SmallVector<SDDbgValue*,32>::iterator DbgIterator; | ||||
|   DbgIterator DbgBegin() { return DbgValues.begin(); } | ||||
|   DbgIterator DbgEnd()   { return DbgValues.end(); } | ||||
| @@ -901,6 +905,9 @@ public: | ||||
|   SmallVector<SDDbgValue*,2> &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. | ||||
|   | ||||
| @@ -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; } | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
| //===----------------------------------------------------------------------===// | ||||
|   | ||||
		Reference in New Issue
	
	Block a user