diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-08-25 00:43:01 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-08-25 00:43:01 +0000 | 
| commit | bbe0e7df2cf487900a0ff6b90a4e7011deaef0f0 (patch) | |
| tree | 9ff71c9c29498c909cd443b089d2898e0981561c | |
| parent | 66a6a132254e330d6976b37e365ee5294c16ea09 (diff) | |
| download | bcm5719-llvm-bbe0e7df2cf487900a0ff6b90a4e7011deaef0f0.tar.gz bcm5719-llvm-bbe0e7df2cf487900a0ff6b90a4e7011deaef0f0.zip | |
add a new TargetFrameIndex node
llvm-svn: 23035
| -rw-r--r-- | llvm/include/llvm/CodeGen/SelectionDAG.h | 3 | ||||
| -rw-r--r-- | llvm/include/llvm/CodeGen/SelectionDAGNodes.h | 8 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 14 | 
3 files changed, 20 insertions, 5 deletions
| diff --git a/llvm/include/llvm/CodeGen/SelectionDAG.h b/llvm/include/llvm/CodeGen/SelectionDAG.h index 32049688eb3..02af6d30cc2 100644 --- a/llvm/include/llvm/CodeGen/SelectionDAG.h +++ b/llvm/include/llvm/CodeGen/SelectionDAG.h @@ -99,6 +99,7 @@ public:    SDOperand getGlobalAddress(const GlobalValue *GV, MVT::ValueType VT);    SDOperand getTargetGlobalAddress(const GlobalValue *GV, MVT::ValueType VT);    SDOperand getFrameIndex(int FI, MVT::ValueType VT); +  SDOperand getTargetFrameIndex(int FI, MVT::ValueType VT);    SDOperand getConstantPool(unsigned CPIdx, MVT::ValueType VT);    SDOperand getBasicBlock(MachineBasicBlock *MBB);    SDOperand getExternalSymbol(const char *Sym, MVT::ValueType VT); @@ -307,7 +308,7 @@ private:    std::map<std::pair<uint64_t, MVT::ValueType>, SDNode*> Constants;    std::map<std::pair<uint64_t, MVT::ValueType>, SDNode*> TargetConstants;    std::map<std::pair<uint64_t, MVT::ValueType>, SDNode*> ConstantFPs; -  std::map<int, SDNode*> FrameIndices; +  std::map<int, SDNode*> FrameIndices, TargetFrameIndices;    std::map<unsigned, SDNode*> ConstantPoolIndices;    std::map<MachineBasicBlock *, SDNode*> BBNodes;    std::vector<SDNode*> ValueTypeNodes; diff --git a/llvm/include/llvm/CodeGen/SelectionDAGNodes.h b/llvm/include/llvm/CodeGen/SelectionDAGNodes.h index 5681a36f5c4..319403ca3cb 100644 --- a/llvm/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/llvm/include/llvm/CodeGen/SelectionDAGNodes.h @@ -65,6 +65,7 @@ namespace ISD {      // anything else with this node, and this is valid in the target-specific      // dag, turning into a GlobalAddress operand.      TargetGlobalAddress, +    TargetFrameIndex,      // CopyToReg - This node has three operands: a chain, a register number to      // set to this value, and a value.   @@ -812,15 +813,16 @@ class FrameIndexSDNode : public SDNode {    int FI;  protected:    friend class SelectionDAG; -  FrameIndexSDNode(int fi, MVT::ValueType VT) -    : SDNode(ISD::FrameIndex, VT), FI(fi) {} +  FrameIndexSDNode(int fi, MVT::ValueType VT, bool isTarg) +    : SDNode(isTarg ? ISD::TargetFrameIndex : ISD::FrameIndex, VT), FI(fi) {}  public:    int getIndex() const { return FI; }    static bool classof(const FrameIndexSDNode *) { return true; }    static bool classof(const SDNode *N) { -    return N->getOpcode() == ISD::FrameIndex; +    return N->getOpcode() == ISD::FrameIndex || +           N->getOpcode() == ISD::TargetFrameIndex;    }  }; diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 97c28521c7b..68ef11e8bf9 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -261,6 +261,9 @@ void SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {    case ISD::FrameIndex:      FrameIndices.erase(cast<FrameIndexSDNode>(N)->getIndex());      break; +  case ISD::TargetFrameIndex: +    TargetFrameIndices.erase(cast<FrameIndexSDNode>(N)->getIndex()); +    break;    case ISD::ConstantPool:      ConstantPoolIndices.erase(cast<ConstantPoolSDNode>(N)->getIndex());      break; @@ -433,7 +436,15 @@ SDOperand SelectionDAG::getTargetGlobalAddress(const GlobalValue *GV,  SDOperand SelectionDAG::getFrameIndex(int FI, MVT::ValueType VT) {    SDNode *&N = FrameIndices[FI];    if (N) return SDOperand(N, 0); -  N = new FrameIndexSDNode(FI, VT); +  N = new FrameIndexSDNode(FI, VT, false); +  AllNodes.push_back(N); +  return SDOperand(N, 0); +} + +SDOperand SelectionDAG::getTargetFrameIndex(int FI, MVT::ValueType VT) { +  SDNode *&N = TargetFrameIndices[FI]; +  if (N) return SDOperand(N, 0); +  N = new FrameIndexSDNode(FI, VT, true);    AllNodes.push_back(N);    return SDOperand(N, 0);  } @@ -2071,6 +2082,7 @@ const char *SDNode::getOperationName(const SelectionDAG *G) const {    case ISD::GlobalAddress: return "GlobalAddress";    case ISD::TargetGlobalAddress: return "TargetGlobalAddress";    case ISD::FrameIndex:    return "FrameIndex"; +  case ISD::TargetFrameIndex: return "TargetFrameIndex";    case ISD::BasicBlock:    return "BasicBlock";    case ISD::Register:      return "Register";    case ISD::ExternalSymbol: return "ExternalSymbol"; | 

