mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 05:29:24 +00:00
More cleanups, preparing to revamp InstrForest to, among other things,
not leak all its allocated memory. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@553 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4ddb4c82d7
commit
5f6baf78ea
@ -238,7 +238,7 @@ class InstrForest : private hash_map<const Instruction*, InstructionNode*> {
|
||||
hash_set<InstructionNode*> treeRoots;
|
||||
|
||||
public:
|
||||
void buildTreesForMethod(Method *M);
|
||||
InstrForest(Method *M);
|
||||
|
||||
inline InstructionNode *getTreeNodeForInstr(Instruction* instr) {
|
||||
return (*this)[instr];
|
||||
|
@ -176,11 +176,6 @@ inline void InstrForest::setRightChild(InstrTreeNode *Par, InstrTreeNode *Chld){
|
||||
}
|
||||
|
||||
|
||||
void InstrForest::buildTreesForMethod(Method *M) {
|
||||
for_each(M->inst_begin(), M->inst_end(),
|
||||
bind_obj(this, &InstrForest::buildTreeForInstruction));
|
||||
}
|
||||
|
||||
InstructionNode *InstrForest::buildTreeForInstruction(Instruction *Inst) {
|
||||
InstructionNode *treeNode = getTreeNodeForInstr(Inst);
|
||||
if (treeNode) {
|
||||
@ -210,8 +205,7 @@ InstructionNode *InstrForest::buildTreeForInstruction(Instruction *Inst) {
|
||||
static InstrTreeNode *fixedChildArray[MAX_CHILD];
|
||||
InstrTreeNode **childArray =
|
||||
(Inst->getNumOperands() > MAX_CHILD)
|
||||
? new (InstrTreeNode*)[Inst->getNumOperands()]
|
||||
: fixedChildArray;
|
||||
? new (InstrTreeNode*)[Inst->getNumOperands()] : fixedChildArray;
|
||||
|
||||
//
|
||||
// Walk the operands of the instruction
|
||||
@ -309,3 +303,8 @@ InstructionNode *InstrForest::buildTreeForInstruction(Instruction *Inst) {
|
||||
return treeNode;
|
||||
}
|
||||
|
||||
|
||||
InstrForest::InstrForest(Method *M) {
|
||||
for_each(M->inst_begin(), M->inst_end(),
|
||||
bind_obj(this, &InstrForest::buildTreeForInstruction));
|
||||
}
|
||||
|
@ -31,11 +31,11 @@ enum SelectDebugLevel_t {
|
||||
};
|
||||
|
||||
// Enable Debug Options to be specified on the command line
|
||||
cl::Enum<enum SelectDebugLevel_t> SelectDebugLevel("dselect", cl::NoFlags, // cl::Hidden
|
||||
cl::Enum<enum SelectDebugLevel_t> SelectDebugLevel("dselect", cl::NoFlags,
|
||||
"enable instruction selection debugging information",
|
||||
clEnumValN(Select_NoDebugInfo, "n", "disable debug output"),
|
||||
clEnumValN(Select_PrintMachineCode, "y", "print generated machine code"),
|
||||
clEnumValN(Select_DebugInstTrees, "i", "print instr. selection debugging info"),
|
||||
clEnumValN(Select_DebugInstTrees, "i", "print instruction selection debug info"),
|
||||
clEnumValN(Select_DebugBurgTrees, "b", "print burg trees"), 0);
|
||||
|
||||
|
||||
@ -54,8 +54,7 @@ SelectInstructionsForMethod(Method* method,
|
||||
//
|
||||
// Build the instruction trees to be given as inputs to BURG.
|
||||
//
|
||||
InstrForest instrForest;
|
||||
instrForest.buildTreesForMethod(method);
|
||||
InstrForest instrForest(method);
|
||||
|
||||
if (SelectDebugLevel >= Select_DebugInstTrees)
|
||||
{
|
||||
|
@ -220,8 +220,6 @@ reg: Constant = 72 (3); /* prefer direct use */
|
||||
* This code was taken from sample.gr provided with BURG.
|
||||
*-----------------------------------------------------------------------*/
|
||||
|
||||
static char rcsid[] = "$Id$";
|
||||
|
||||
void printcover(NODEPTR_TYPE p, int goalnt, int indent) {
|
||||
int eruleno = burm_rule(STATE_LABEL(p), goalnt);
|
||||
short *nts = burm_nts[eruleno];
|
||||
|
@ -176,11 +176,6 @@ inline void InstrForest::setRightChild(InstrTreeNode *Par, InstrTreeNode *Chld){
|
||||
}
|
||||
|
||||
|
||||
void InstrForest::buildTreesForMethod(Method *M) {
|
||||
for_each(M->inst_begin(), M->inst_end(),
|
||||
bind_obj(this, &InstrForest::buildTreeForInstruction));
|
||||
}
|
||||
|
||||
InstructionNode *InstrForest::buildTreeForInstruction(Instruction *Inst) {
|
||||
InstructionNode *treeNode = getTreeNodeForInstr(Inst);
|
||||
if (treeNode) {
|
||||
@ -210,8 +205,7 @@ InstructionNode *InstrForest::buildTreeForInstruction(Instruction *Inst) {
|
||||
static InstrTreeNode *fixedChildArray[MAX_CHILD];
|
||||
InstrTreeNode **childArray =
|
||||
(Inst->getNumOperands() > MAX_CHILD)
|
||||
? new (InstrTreeNode*)[Inst->getNumOperands()]
|
||||
: fixedChildArray;
|
||||
? new (InstrTreeNode*)[Inst->getNumOperands()] : fixedChildArray;
|
||||
|
||||
//
|
||||
// Walk the operands of the instruction
|
||||
@ -309,3 +303,8 @@ InstructionNode *InstrForest::buildTreeForInstruction(Instruction *Inst) {
|
||||
return treeNode;
|
||||
}
|
||||
|
||||
|
||||
InstrForest::InstrForest(Method *M) {
|
||||
for_each(M->inst_begin(), M->inst_end(),
|
||||
bind_obj(this, &InstrForest::buildTreeForInstruction));
|
||||
}
|
||||
|
@ -31,11 +31,11 @@ enum SelectDebugLevel_t {
|
||||
};
|
||||
|
||||
// Enable Debug Options to be specified on the command line
|
||||
cl::Enum<enum SelectDebugLevel_t> SelectDebugLevel("dselect", cl::NoFlags, // cl::Hidden
|
||||
cl::Enum<enum SelectDebugLevel_t> SelectDebugLevel("dselect", cl::NoFlags,
|
||||
"enable instruction selection debugging information",
|
||||
clEnumValN(Select_NoDebugInfo, "n", "disable debug output"),
|
||||
clEnumValN(Select_PrintMachineCode, "y", "print generated machine code"),
|
||||
clEnumValN(Select_DebugInstTrees, "i", "print instr. selection debugging info"),
|
||||
clEnumValN(Select_DebugInstTrees, "i", "print instruction selection debug info"),
|
||||
clEnumValN(Select_DebugBurgTrees, "b", "print burg trees"), 0);
|
||||
|
||||
|
||||
@ -54,8 +54,7 @@ SelectInstructionsForMethod(Method* method,
|
||||
//
|
||||
// Build the instruction trees to be given as inputs to BURG.
|
||||
//
|
||||
InstrForest instrForest;
|
||||
instrForest.buildTreesForMethod(method);
|
||||
InstrForest instrForest(method);
|
||||
|
||||
if (SelectDebugLevel >= Select_DebugInstTrees)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user