From f9ea6dbf669ab444b8cc891831732045eb9a8bee Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 29 Nov 2005 06:15:39 +0000 Subject: [PATCH] Add support for a new STRING and LOCATION node for line number support, patch contributed by Daniel Berlin, with a few cleanups here and there by me. llvm-svn: 24512 --- include/llvm/CodeGen/SelectionDAG.h | 2 ++ include/llvm/CodeGen/SelectionDAGNodes.h | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/include/llvm/CodeGen/SelectionDAG.h b/include/llvm/CodeGen/SelectionDAG.h index 1decf5eb8b2..2523b5ef912 100644 --- a/include/llvm/CodeGen/SelectionDAG.h +++ b/include/llvm/CodeGen/SelectionDAG.h @@ -105,6 +105,7 @@ public: /// argument, it is used as the seed for node deletion. void RemoveDeadNodes(SDNode *N = 0); + SDOperand getString(const std::string &Val); SDOperand getConstant(uint64_t Val, MVT::ValueType VT); SDOperand getTargetConstant(uint64_t Val, MVT::ValueType VT); SDOperand getConstantFP(double Val, MVT::ValueType VT); @@ -406,6 +407,7 @@ private: std::vector ValueTypeNodes; std::map ExternalSymbols; std::map TargetExternalSymbols; + std::map StringNodes; std::map > >, SDNode*> OneResultNodes; diff --git a/include/llvm/CodeGen/SelectionDAGNodes.h b/include/llvm/CodeGen/SelectionDAGNodes.h index 6e6b88223d2..f6a62016785 100644 --- a/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/include/llvm/CodeGen/SelectionDAGNodes.h @@ -63,7 +63,8 @@ namespace ISD { AssertSext, AssertZext, // Various leaf nodes. - Constant, ConstantFP, GlobalAddress, FrameIndex, ConstantPool, + Constant, ConstantFP, STRING, + GlobalAddress, FrameIndex, ConstantPool, BasicBlock, ExternalSymbol, VALUETYPE, CONDCODE, Register, // TargetConstant - Like Constant, but the DAG does not do any folding or @@ -341,6 +342,12 @@ namespace ISD { // HANDLENODE node - Used as a handle for various purposes. HANDLENODE, + // LOCATION - This node is used to represent a source location for debug + // info. It takes token chain as input, then a line number, then a column + // number, then a filename, then a working dir. It produces a token chain + // as output. + LOCATION, + // BUILTIN_OP_END - This must be the last enum value in this list. BUILTIN_OP_END, }; @@ -846,6 +853,20 @@ public: SDOperand getValue() const { return getOperand(0); } }; +class StringSDNode : public SDNode { + std::string Value; +protected: + friend class SelectionDAG; + StringSDNode(const std::string &val) + : SDNode(ISD::STRING, MVT::Other), Value(val) { + } +public: + const std::string &getValue() const { return Value; } + static bool classof(const StringSDNode *) { return true; } + static bool classof(const SDNode *N) { + return N->getOpcode() == ISD::STRING; + } +}; class ConstantSDNode : public SDNode { uint64_t Value;