Clean up hash table usage
authorChris Lattner <sabre@nondot.org>
Mon, 23 Jul 2001 03:50:57 +0000 (03:50 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 23 Jul 2001 03:50:57 +0000 (03:50 +0000)
Remove opaque pointer used for C compatibility which isn't an issue

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/InstrForest.h
lib/CodeGen/InstrSelection/InstrForest.cpp
lib/CodeGen/InstrSelection/InstrSelection.cpp
lib/Target/SparcV9/InstrSelection/InstrForest.cpp
lib/Target/SparcV9/InstrSelection/InstrSelection.cpp

index af3516a3225264c4ef3e3451765930f91d8b6600..2e1e9ea179a0bdd492fc0a57f38230ada470c7bc 100644 (file)
 #ifndef LLVM_CODEGEN_INSTRFOREST_H
 #define LLVM_CODEGEN_INSTRFOREST_H
 
-//-------------------------------------------------------------------------
-// Data types needed by BURG and implemented by us
-//-------------------------------------------------------------------------
-
-typedef int OpLabel;
-typedef int StateLabel;
-
-typedef struct BasicTreeNode_struct {
-  
-  BasicTreeNode_struct* leftChild;
-  BasicTreeNode_struct* rightChild;
-  BasicTreeNode_struct* parent;
-  OpLabel                opLabel;
-  StateLabel             state;
-  void*                  treeNodePtr;  /* points to the C++ tree node object
-                                * that "contains" this node */
-} BasicTreeNode;
-
-//-------------------------------------------------------------------------
-// Declarations of data and functions created by BURG
-//-------------------------------------------------------------------------
-
-extern short*          burm_nts[];
-  
-extern StateLabel      burm_label      (BasicTreeNode* p);
-  
-extern StateLabel      burm_state      (OpLabel op, StateLabel leftState,
-                                        StateLabel rightState);
-
-extern StateLabel      burm_rule       (StateLabel state, int goalNT);
-  
-extern BasicTreeNode** burm_kids       (BasicTreeNode* p, int eruleno,
-                                        BasicTreeNode* kids[]);
-  
-extern void            printcover      (BasicTreeNode*, int, int);
-extern void            printtree       (BasicTreeNode*);
-extern int             treecost        (BasicTreeNode*, int, int);
-extern void            printMatches    (BasicTreeNode*);
-
-//************************** System Include Files **************************/
-
-#include <bool.h>
-#include <hash_map>
-#include <hash_set>
-
-//*************************** User Include Files ***************************/
-
 #include "llvm/Support/Unique.h"
 #include "llvm/Instruction.h"
+#include <hash_map>
+#include <hash_set>
 
-//************************* Opaque Declarations ****************************/
-
-class Value;
-class Instruction;
 class ConstPoolVal;
 class BasicBlock;
 class Method;
 class InstrTreeNode;
 class InstrForest;
 
-//************************ Exported Constants ******************************/
-
-
 //--------------------------------------------------------------------------
 // OpLabel values for special-case nodes created for instruction selection.
 // All op-labels not defined here are identical to the instruction
@@ -122,18 +70,50 @@ const int  ToDoubleTy      = ToBoolTy + 10;
 const int  ToArrayTy   = ToBoolTy + 11;
 const int  ToPointerTy = ToBoolTy + 12;
 
+//-------------------------------------------------------------------------
+// Data types needed by BURG and implemented by us
+//-------------------------------------------------------------------------
 
-//************************ Exported Data Types *****************************/
+typedef int OpLabel;
+typedef int StateLabel;
 
-struct ptrHashFunc {
-  inline size_t operator()(const void* const& p) const
-  {
-    // Copied from body of hash<unsigned long>::operator().
-    // I cannot figure out how to invoke that without an object
-    return (size_t) ((const unsigned long) p);
-  }
+struct BasicTreeNode {
+  BasicTreeNode* leftChild;
+  BasicTreeNode* rightChild;
+  BasicTreeNode* parent;
+  OpLabel        opLabel;
+  StateLabel     state;
+  InstrTreeNode *treeNodePtr;  // points to the C++ tree node object
+                                // that "contains" this node
 };
 
+//-------------------------------------------------------------------------
+// Declarations of data and functions created by BURG
+//-------------------------------------------------------------------------
+
+extern short*          burm_nts[];
+  
+extern StateLabel      burm_label      (BasicTreeNode* p);
+  
+extern StateLabel      burm_state      (OpLabel op, StateLabel leftState,
+                                        StateLabel rightState);
+
+extern StateLabel      burm_rule       (StateLabel state, int goalNT);
+  
+extern BasicTreeNode** burm_kids       (BasicTreeNode* p, int eruleno,
+                                        BasicTreeNode* kids[]);
+  
+extern void            printcover      (BasicTreeNode*, int, int);
+extern void            printtree       (BasicTreeNode*);
+extern int             treecost        (BasicTreeNode*, int, int);
+extern void            printMatches    (BasicTreeNode*);
+
+//************************ Exported Data Types *****************************/
+
+// Provide a hash function for arbitrary pointers...
+template <class T> struct hash<T *> {
+  inline size_t operator()(T *Val) const { return (size_t)Val; }
+};
 
 //------------------------------------------------------------------------ 
 // class InstrTreeNode
@@ -144,7 +124,7 @@ struct ptrHashFunc {
 
 inline InstrTreeNode*
 MainTreeNode(BasicTreeNode* node) {
-  return (InstrTreeNode*) node->treeNodePtr;
+  return node->treeNodePtr;
 }
 
 
@@ -175,8 +155,7 @@ public:
   inline OpLabel       getOpLabel      () const { return basicNode.opLabel; }
   
   inline InstrTreeNode*        leftChild       () const {
-    return (InstrTreeNode*)
-      (basicNode.leftChild? basicNode.leftChild->treeNodePtr : NULL);
+    return (basicNode.leftChild? basicNode.leftChild->treeNodePtr : NULL);
   }
   
   // If right child is a list node, recursively get its *left* child
@@ -190,8 +169,7 @@ public:
   }
   
   inline InstrTreeNode*        parent          () const {
-    return (InstrTreeNode*)
-      (basicNode.parent? basicNode.parent->treeNodePtr : NULL);
+    return (basicNode.parent? basicNode.parent->treeNodePtr : NULL);
   }
   
   void                 dump            (int dumpChildren,
@@ -262,10 +240,10 @@ protected:
 
 class InstrForest :
   public Unique,
-  private hash_map<const Instruction*, InstructionNode*, ptrHashFunc > {
+  private hash_map<const Instruction*, InstructionNode*> {
   
 private:
-  hash_set<InstructionNode*, ptrHashFunc > treeRoots;
+  hash_set<InstructionNode*> treeRoots;
   
 public:
   /*ctor*/     InstrForest             ()          {}
@@ -279,8 +257,7 @@ public:
     return (*this)[instr];
   }
   
-  inline const hash_set<InstructionNode*, ptrHashFunc>&
-  getRootSet() const {
+  inline const hash_set<InstructionNode*> &getRootSet() const {
     return treeRoots;
   }
   
index 5701ba4e114380730017a9cedcc7217c4e74cbe2..a1afedea085e50c58848d0d7d8d405c322b4989f 100644 (file)
@@ -253,7 +253,7 @@ InstrForest::buildTreesForMethod(Method *method)
 void
 InstrForest::dump() const
 {
-  for (hash_set<InstructionNode*, ptrHashFunc >::const_iterator
+  for (hash_set<InstructionNode*>::const_iterator
         treeRootIter = treeRoots.begin();
        treeRootIter != treeRoots.end();
        ++treeRootIter)
index c8efb3bf34c9a36c388b043323b9953d17a58f6a..0526dda40e884a7dfe6cf8d91647f7a662934195 100644 (file)
@@ -52,13 +52,12 @@ bool SelectInstructionsForMethod(Method* method, TargetMachine &Target) {
   InstrForest instrForest;
   instrForest.buildTreesForMethod(method);
       
-  const hash_set<InstructionNode*, ptrHashFunc>&
-    treeRoots = instrForest.getRootSet();
+  const hash_set<InstructionNode*> &treeRoots = instrForest.getRootSet();
   
   //
   // Invoke BURG instruction selection for each tree
   // 
-  for (hash_set<InstructionNode*, ptrHashFunc >::const_iterator
+  for (hash_set<InstructionNode*>::const_iterator
         treeRootIter = treeRoots.begin();
        treeRootIter != treeRoots.end();
        ++treeRootIter)
index 5701ba4e114380730017a9cedcc7217c4e74cbe2..a1afedea085e50c58848d0d7d8d405c322b4989f 100644 (file)
@@ -253,7 +253,7 @@ InstrForest::buildTreesForMethod(Method *method)
 void
 InstrForest::dump() const
 {
-  for (hash_set<InstructionNode*, ptrHashFunc >::const_iterator
+  for (hash_set<InstructionNode*>::const_iterator
         treeRootIter = treeRoots.begin();
        treeRootIter != treeRoots.end();
        ++treeRootIter)
index c8efb3bf34c9a36c388b043323b9953d17a58f6a..0526dda40e884a7dfe6cf8d91647f7a662934195 100644 (file)
@@ -52,13 +52,12 @@ bool SelectInstructionsForMethod(Method* method, TargetMachine &Target) {
   InstrForest instrForest;
   instrForest.buildTreesForMethod(method);
       
-  const hash_set<InstructionNode*, ptrHashFunc>&
-    treeRoots = instrForest.getRootSet();
+  const hash_set<InstructionNode*> &treeRoots = instrForest.getRootSet();
   
   //
   // Invoke BURG instruction selection for each tree
   // 
-  for (hash_set<InstructionNode*, ptrHashFunc >::const_iterator
+  for (hash_set<InstructionNode*>::const_iterator
         treeRootIter = treeRoots.begin();
        treeRootIter != treeRoots.end();
        ++treeRootIter)