[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