fixed code style, moved dom tree building to IR
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "IR.h"
|
||||
#include "IR_domTree.h"
|
||||
|
||||
namespace SAPFOR
|
||||
{
|
||||
@@ -24,7 +25,7 @@ namespace SAPFOR
|
||||
|
||||
std::vector<BasicBlock*> next;
|
||||
std::vector<BasicBlock*> prev;
|
||||
BasicBlock* idom{};
|
||||
BasicBlock* directDominator = NULL;
|
||||
//reaching definition
|
||||
std::map<SAPFOR::Argument*, std::set<int>> RD_in, RD_out;
|
||||
|
||||
@@ -34,6 +35,7 @@ namespace SAPFOR
|
||||
bool addLive(const std::map<SAPFOR::Argument*, std::vector<SAPFOR::BasicBlock*>>& to_add, bool in);
|
||||
std::map<SAPFOR::Argument*, std::vector<SAPFOR::BasicBlock*>> getLive(bool in) const;
|
||||
bool removeLive(SAPFOR::Argument* to_remove, bool in);
|
||||
|
||||
public:
|
||||
BasicBlock() { num = lastNumBlock++; }
|
||||
BasicBlock(IR_Block* item);
|
||||
@@ -42,7 +44,7 @@ namespace SAPFOR
|
||||
void addInstruction(IR_Block* item);
|
||||
void addPrev(BasicBlock* prev_) { prev.push_back(prev_); }
|
||||
void addNext(BasicBlock* next_) { next.push_back(next_); }
|
||||
void setIdom(BasicBlock* idom_) { idom = idom_; }
|
||||
void setDom(BasicBlock* dom) { directDominator = dom; }
|
||||
|
||||
int removePrev(BasicBlock* removed);
|
||||
int removeNext(BasicBlock* removed);
|
||||
@@ -70,7 +72,16 @@ namespace SAPFOR
|
||||
const std::vector<IR_Block*>& getInstructions() const { return instructions; }
|
||||
const std::vector<BasicBlock*>& getNext() const { return next; }
|
||||
const std::vector<BasicBlock*>& getPrev() const { return prev; }
|
||||
BasicBlock* getIdom() const { return idom; }
|
||||
BasicBlock* getDom() const
|
||||
{
|
||||
if (!directDominator)
|
||||
{
|
||||
__spf_print(1, "%s\n", "the dominator tree was built with an error or was not built at all");
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
}
|
||||
|
||||
return directDominator;
|
||||
}
|
||||
|
||||
/*
|
||||
* FOR LIVE ANALYSIS
|
||||
@@ -107,13 +118,15 @@ namespace SAPFOR
|
||||
bool withDVM = false;
|
||||
bool withCallsInBlocks = false; // separate each F_CALL to own BasicBlock
|
||||
bool withCallFrom = true;
|
||||
bool withDominators = true;
|
||||
|
||||
explicit CFG_Settings(int) { }
|
||||
|
||||
explicit CFG_Settings(bool atLeastOneIterInLoop = false, bool withRD = true, bool withRegisters = false,
|
||||
bool withDVM = false, bool withSPF = false, bool withCallsInBlocks = false, bool withCallFrom = true) :
|
||||
bool withDVM = false, bool withSPF = false, bool withCallsInBlocks = false,
|
||||
bool withCallFrom = true, bool withDominators = true) :
|
||||
atLeastOneIterInLoop(atLeastOneIterInLoop), withRD(withRD), withRegisters(withRegisters), withDVM(withDVM), withSPF(withSPF),
|
||||
withCallsInBlocks(withCallsInBlocks), withCallFrom(withCallFrom)
|
||||
withCallsInBlocks(withCallsInBlocks), withCallFrom(withCallFrom), withDominators(withDominators)
|
||||
{ }
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user