[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp SelectionDAGCSEMap.cpp
Chris Lattner
lattner at cs.uiuc.edu
Fri Aug 11 14:55:45 PDT 2006
Changes in directory llvm/lib/CodeGen/SelectionDAG:
SelectionDAG.cpp updated: 1.324 -> 1.325
SelectionDAGCSEMap.cpp updated: 1.2 -> 1.3
---
Log message:
Remove 8 more std::map's.
---
Diffs of the changes: (+58 -92)
SelectionDAG.cpp | 132 ++++++++++++++-----------------------------------
SelectionDAGCSEMap.cpp | 18 ++++++
2 files changed, 58 insertions(+), 92 deletions(-)
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.324 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.325
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.324 Fri Aug 11 16:01:22 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Fri Aug 11 16:55:30 2006
@@ -341,16 +341,6 @@
bool Erased = false;
switch (N->getOpcode()) {
case ISD::HANDLENODE: return; // noop.
- case ISD::ConstantFP: {
- uint64_t V = DoubleToBits(cast<ConstantFPSDNode>(N)->getValue());
- Erased = ConstantFPs.erase(std::make_pair(V, N->getValueType(0)));
- break;
- }
- case ISD::TargetConstantFP: {
- uint64_t V = DoubleToBits(cast<ConstantFPSDNode>(N)->getValue());
- Erased = TargetConstantFPs.erase(std::make_pair(V, N->getValueType(0)));
- break;
- }
case ISD::STRING:
Erased = StringNodes.erase(cast<StringSDNode>(N)->getValue());
break;
@@ -360,31 +350,6 @@
Erased = CondCodeNodes[cast<CondCodeSDNode>(N)->get()] != 0;
CondCodeNodes[cast<CondCodeSDNode>(N)->get()] = 0;
break;
- case ISD::FrameIndex:
- Erased = FrameIndices.erase(cast<FrameIndexSDNode>(N)->getIndex());
- break;
- case ISD::TargetFrameIndex:
- Erased = TargetFrameIndices.erase(cast<FrameIndexSDNode>(N)->getIndex());
- break;
- case ISD::JumpTable:
- Erased = JumpTableIndices.erase(cast<JumpTableSDNode>(N)->getIndex());
- break;
- case ISD::TargetJumpTable:
- Erased =
- TargetJumpTableIndices.erase(cast<JumpTableSDNode>(N)->getIndex());
- break;
- case ISD::ConstantPool:
- Erased = ConstantPoolIndices.
- erase(std::make_pair(cast<ConstantPoolSDNode>(N)->get(),
- std::make_pair(cast<ConstantPoolSDNode>(N)->getOffset(),
- cast<ConstantPoolSDNode>(N)->getAlignment())));
- break;
- case ISD::TargetConstantPool:
- Erased = TargetConstantPoolIndices.
- erase(std::make_pair(cast<ConstantPoolSDNode>(N)->get(),
- std::make_pair(cast<ConstantPoolSDNode>(N)->getOffset(),
- cast<ConstantPoolSDNode>(N)->getAlignment())));
- break;
case ISD::ExternalSymbol:
Erased = ExternalSymbols.erase(cast<ExternalSymbolSDNode>(N)->getSymbol());
break;
@@ -547,7 +512,8 @@
}
-SDOperand SelectionDAG::getConstantFP(double Val, MVT::ValueType VT) {
+SDOperand SelectionDAG::getConstantFP(double Val, MVT::ValueType VT,
+ bool isTarget) {
assert(MVT::isFloatingPoint(VT) && "Cannot create integer FP constant!");
if (VT == MVT::f32)
Val = (float)Val; // Mask out extra precision.
@@ -555,24 +521,14 @@
// Do the map lookup using the actual bit pattern for the floating point
// value, so that we don't have problems with 0.0 comparing equal to -0.0, and
// we don't have issues with SNANs.
- SDNode *&N = ConstantFPs[std::make_pair(DoubleToBits(Val), VT)];
- if (N) return SDOperand(N, 0);
- N = new ConstantFPSDNode(false, Val, VT);
- AllNodes.push_back(N);
- return SDOperand(N, 0);
-}
-
-SDOperand SelectionDAG::getTargetConstantFP(double Val, MVT::ValueType VT) {
- assert(MVT::isFloatingPoint(VT) && "Cannot create integer FP constant!");
- if (VT == MVT::f32)
- Val = (float)Val; // Mask out extra precision.
-
- // Do the map lookup using the actual bit pattern for the floating point
- // value, so that we don't have problems with 0.0 comparing equal to -0.0, and
- // we don't have issues with SNANs.
- SDNode *&N = TargetConstantFPs[std::make_pair(DoubleToBits(Val), VT)];
- if (N) return SDOperand(N, 0);
- N = new ConstantFPSDNode(true, Val, VT);
+ unsigned Opc = isTarget ? ISD::TargetConstantFP : ISD::ConstantFP;
+ SelectionDAGCSEMap::NodeID ID(Opc, getNodeValueTypes(VT));
+ ID.AddInteger(DoubleToBits(Val));
+ void *IP = 0;
+ if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
+ return SDOperand(E, 0);
+ SDNode *N = new ConstantFPSDNode(isTarget, Val, VT);
+ CSEMap.InsertNode(N, IP);
AllNodes.push_back(N);
return SDOperand(N, 0);
}
@@ -593,57 +549,49 @@
return SDOperand(N, 0);
}
-SDOperand SelectionDAG::getFrameIndex(int FI, MVT::ValueType VT) {
- SDNode *&N = FrameIndices[FI];
- if (N) return SDOperand(N, 0);
- 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);
-}
-
-SDOperand SelectionDAG::getJumpTable(int JTI, MVT::ValueType VT) {
- SDNode *&N = JumpTableIndices[JTI];
- if (N) return SDOperand(N, 0);
- N = new JumpTableSDNode(JTI, VT, false);
+SDOperand SelectionDAG::getFrameIndex(int FI, MVT::ValueType VT,
+ bool isTarget) {
+ unsigned Opc = isTarget ? ISD::TargetFrameIndex : ISD::FrameIndex;
+ SelectionDAGCSEMap::NodeID ID(Opc, getNodeValueTypes(VT));
+ ID.AddInteger(FI);
+ void *IP = 0;
+ if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
+ return SDOperand(E, 0);
+ SDNode *N = new FrameIndexSDNode(FI, VT, isTarget);
+ CSEMap.InsertNode(N, IP);
AllNodes.push_back(N);
return SDOperand(N, 0);
}
-SDOperand SelectionDAG::getTargetJumpTable(int JTI, MVT::ValueType VT) {
- SDNode *&N = TargetJumpTableIndices[JTI];
- if (N) return SDOperand(N, 0);
- N = new JumpTableSDNode(JTI, VT, true);
+SDOperand SelectionDAG::getJumpTable(int JTI, MVT::ValueType VT, bool isTarget){
+ unsigned Opc = isTarget ? ISD::TargetJumpTable : ISD::JumpTable;
+ SelectionDAGCSEMap::NodeID ID(Opc, getNodeValueTypes(VT));
+ ID.AddInteger(JTI);
+ void *IP = 0;
+ if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
+ return SDOperand(E, 0);
+ SDNode *N = new JumpTableSDNode(JTI, VT, isTarget);
+ CSEMap.InsertNode(N, IP);
AllNodes.push_back(N);
return SDOperand(N, 0);
}
SDOperand SelectionDAG::getConstantPool(Constant *C, MVT::ValueType VT,
- unsigned Alignment, int Offset) {
- SDNode *&N = ConstantPoolIndices[std::make_pair(C,
- std::make_pair(Offset, Alignment))];
- if (N) return SDOperand(N, 0);
- N = new ConstantPoolSDNode(false, C, VT, Offset, Alignment);
+ unsigned Alignment, int Offset,
+ bool isTarget) {
+ unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
+ SelectionDAGCSEMap::NodeID ID(Opc, getNodeValueTypes(VT));
+ ID.AddInteger(Alignment);
+ ID.AddInteger(Offset);
+ void *IP = 0;
+ if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
+ return SDOperand(E, 0);
+ SDNode *N = new ConstantPoolSDNode(isTarget, C, VT, Offset, Alignment);
+ CSEMap.InsertNode(N, IP);
AllNodes.push_back(N);
return SDOperand(N, 0);
}
-SDOperand SelectionDAG::getTargetConstantPool(Constant *C, MVT::ValueType VT,
- unsigned Alignment, int Offset) {
- SDNode *&N = TargetConstantPoolIndices[std::make_pair(C,
- std::make_pair(Offset, Alignment))];
- if (N) return SDOperand(N, 0);
- N = new ConstantPoolSDNode(true, C, VT, Offset, Alignment);
- AllNodes.push_back(N);
- return SDOperand(N, 0);
-}
SDOperand SelectionDAG::getBasicBlock(MachineBasicBlock *MBB) {
SelectionDAGCSEMap::NodeID ID(ISD::BasicBlock, getNodeValueTypes(MVT::Other));
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGCSEMap.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGCSEMap.cpp:1.2 llvm/lib/CodeGen/SelectionDAG/SelectionDAGCSEMap.cpp:1.3
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGCSEMap.cpp:1.2 Fri Aug 11 16:01:22 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGCSEMap.cpp Fri Aug 11 16:55:30 2006
@@ -12,6 +12,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/CodeGen/SelectionDAG.h"
+#include "llvm/Support/MathExtras.h"
using namespace llvm;
//===----------------------------------------------------------------------===//
@@ -32,6 +33,10 @@
case ISD::Constant:
AddInteger(cast<ConstantSDNode>(N)->getValue());
break;
+ case ISD::TargetConstantFP:
+ case ISD::ConstantFP:
+ AddInteger(DoubleToBits(cast<ConstantFPSDNode>(N)->getValue()));
+ break;
case ISD::TargetGlobalAddress:
case ISD::GlobalAddress:
AddPointer(cast<GlobalAddressSDNode>(N)->getGlobal());
@@ -47,6 +52,19 @@
AddPointer(cast<SrcValueSDNode>(N)->getValue());
AddInteger(cast<SrcValueSDNode>(N)->getOffset());
break;
+ case ISD::FrameIndex:
+ case ISD::TargetFrameIndex:
+ AddInteger(cast<FrameIndexSDNode>(N)->getIndex());
+ break;
+ case ISD::JumpTable:
+ case ISD::TargetJumpTable:
+ AddInteger(cast<JumpTableSDNode>(N)->getIndex());
+ break;
+ case ISD::ConstantPool:
+ case ISD::TargetConstantPool:
+ AddInteger(cast<ConstantPoolSDNode>(N)->getAlignment());
+ AddInteger(cast<ConstantPoolSDNode>(N)->getOffset());
+ break;
}
}
}
More information about the llvm-commits
mailing list