diff --git a/include/llvm/CodeGen/InstrForest.h b/include/llvm/CodeGen/InstrForest.h index af3516a3225..2e1e9ea179a 100644 --- a/include/llvm/CodeGen/InstrForest.h +++ b/include/llvm/CodeGen/InstrForest.h @@ -24,69 +24,17 @@ #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 +#include "llvm/Support/Unique.h" +#include "llvm/Instruction.h" #include #include -//*************************** User Include Files ***************************/ - -#include "llvm/Support/Unique.h" -#include "llvm/Instruction.h" - -//************************* 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,19 +70,51 @@ const int ToDoubleTy = ToBoolTy + 10; const int ToArrayTy = ToBoolTy + 11; const int ToPointerTy = ToBoolTy + 12; +//------------------------------------------------------------------------- +// Data types needed by BURG and implemented by us +//------------------------------------------------------------------------- + +typedef int OpLabel; +typedef int StateLabel; + +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 *****************************/ -struct ptrHashFunc { - inline size_t operator()(const void* const& p) const - { - // Copied from body of hash::operator(). - // I cannot figure out how to invoke that without an object - return (size_t) ((const unsigned long) p); - } +// Provide a hash function for arbitrary pointers... +template struct hash { + 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 { + private hash_map { private: - hash_set treeRoots; + hash_set treeRoots; public: /*ctor*/ InstrForest () {} @@ -279,8 +257,7 @@ public: return (*this)[instr]; } - inline const hash_set& - getRootSet() const { + inline const hash_set &getRootSet() const { return treeRoots; } diff --git a/lib/CodeGen/InstrSelection/InstrForest.cpp b/lib/CodeGen/InstrSelection/InstrForest.cpp index 5701ba4e114..a1afedea085 100644 --- a/lib/CodeGen/InstrSelection/InstrForest.cpp +++ b/lib/CodeGen/InstrSelection/InstrForest.cpp @@ -253,7 +253,7 @@ InstrForest::buildTreesForMethod(Method *method) void InstrForest::dump() const { - for (hash_set::const_iterator + for (hash_set::const_iterator treeRootIter = treeRoots.begin(); treeRootIter != treeRoots.end(); ++treeRootIter) diff --git a/lib/CodeGen/InstrSelection/InstrSelection.cpp b/lib/CodeGen/InstrSelection/InstrSelection.cpp index c8efb3bf34c..0526dda40e8 100644 --- a/lib/CodeGen/InstrSelection/InstrSelection.cpp +++ b/lib/CodeGen/InstrSelection/InstrSelection.cpp @@ -52,13 +52,12 @@ bool SelectInstructionsForMethod(Method* method, TargetMachine &Target) { InstrForest instrForest; instrForest.buildTreesForMethod(method); - const hash_set& - treeRoots = instrForest.getRootSet(); + const hash_set &treeRoots = instrForest.getRootSet(); // // Invoke BURG instruction selection for each tree // - for (hash_set::const_iterator + for (hash_set::const_iterator treeRootIter = treeRoots.begin(); treeRootIter != treeRoots.end(); ++treeRootIter) diff --git a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp index 5701ba4e114..a1afedea085 100644 --- a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp +++ b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp @@ -253,7 +253,7 @@ InstrForest::buildTreesForMethod(Method *method) void InstrForest::dump() const { - for (hash_set::const_iterator + for (hash_set::const_iterator treeRootIter = treeRoots.begin(); treeRootIter != treeRoots.end(); ++treeRootIter) diff --git a/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp b/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp index c8efb3bf34c..0526dda40e8 100644 --- a/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp +++ b/lib/Target/SparcV9/InstrSelection/InstrSelection.cpp @@ -52,13 +52,12 @@ bool SelectInstructionsForMethod(Method* method, TargetMachine &Target) { InstrForest instrForest; instrForest.buildTreesForMethod(method); - const hash_set& - treeRoots = instrForest.getRootSet(); + const hash_set &treeRoots = instrForest.getRootSet(); // // Invoke BURG instruction selection for each tree // - for (hash_set::const_iterator + for (hash_set::const_iterator treeRootIter = treeRoots.begin(); treeRootIter != treeRoots.end(); ++treeRootIter)