improved CFG settings
This commit is contained in:
@@ -105,23 +105,48 @@ namespace SAPFOR
|
||||
|
||||
struct CFG_Settings
|
||||
{
|
||||
enum setting { CFG_atLeastOneIterInLoop = 1,
|
||||
CFG_withRD = 2,
|
||||
CFG_withRegisters = 3,
|
||||
CFG_withSPF = 4,
|
||||
CFG_withDVM = 5,
|
||||
CFG_withCallsInBlocks = 6,
|
||||
CFG_withCallFrom = 7,
|
||||
CFG_withDominators = 8 };
|
||||
|
||||
bool atLeastOneIterInLoop = false;
|
||||
bool withRD = true;
|
||||
bool withRegisters = false;
|
||||
bool withSPF = false;
|
||||
bool withDVM = false;
|
||||
bool withCallsInBlocks = false; // separate each F_CALL to own BasicBlock
|
||||
bool withCallFrom = true;
|
||||
bool withDominators = true;
|
||||
bool withRD = false;
|
||||
bool withRegisters = false;
|
||||
bool withSPF = false;
|
||||
bool withDVM = false;
|
||||
bool withCallsInBlocks = false; // separate each F_CALL to own BasicBlock
|
||||
bool withCallFrom = false;
|
||||
bool withDominators = false;
|
||||
|
||||
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 withDominators = true) :
|
||||
atLeastOneIterInLoop(atLeastOneIterInLoop), withRD(withRD), withRegisters(withRegisters), withDVM(withDVM), withSPF(withSPF),
|
||||
withCallsInBlocks(withCallsInBlocks), withCallFrom(withCallFrom), withDominators(withDominators)
|
||||
{ }
|
||||
explicit CFG_Settings(const std::set<setting> &settings = { CFG_withRD, CFG_withCallFrom, CFG_withDominators })
|
||||
{
|
||||
for (auto& set : settings)
|
||||
{
|
||||
if (set == CFG_atLeastOneIterInLoop)
|
||||
atLeastOneIterInLoop = true;
|
||||
else if (set == CFG_withRD)
|
||||
withRD = true;
|
||||
else if (set == CFG_withRegisters)
|
||||
withRegisters = true;
|
||||
else if (set == CFG_withSPF)
|
||||
withSPF = true;
|
||||
else if (set == CFG_withDVM)
|
||||
withDVM = true;
|
||||
else if (set == CFG_withCallsInBlocks)
|
||||
withCallsInBlocks = true;
|
||||
else if (set == CFG_withCallFrom)
|
||||
withCallFrom = true;
|
||||
else if (set == CFG_withDominators)
|
||||
withDominators = true;
|
||||
else
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user