fixed code style
This commit is contained in:
@@ -43,7 +43,8 @@ static void dfs(SAPFOR::BasicBlock* block, map<int, int>& visit, vector<pair<SAP
|
|||||||
dfs(i, visit, startAndEnd, block);
|
dfs(i, visit, startAndEnd, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void printBlock(SAPFOR::BasicBlock* block) {
|
static void printBlock(SAPFOR::BasicBlock* block)
|
||||||
|
{
|
||||||
cout << "block - " << block->getNumber() << endl;
|
cout << "block - " << block->getNumber() << endl;
|
||||||
cout << "next -";
|
cout << "next -";
|
||||||
for (auto i : block->getNext())
|
for (auto i : block->getNext())
|
||||||
@@ -59,17 +60,20 @@ static void printBlock(SAPFOR::BasicBlock* block) {
|
|||||||
string resValue = "";
|
string resValue = "";
|
||||||
string arg1Value = "";
|
string arg1Value = "";
|
||||||
string arg2Value = "";
|
string arg2Value = "";
|
||||||
if (i->getInstruction()->getResult() != NULL && i->getInstruction()->getResult()->getType() == SAPFOR::CFG_ARG_TYPE::VAR) {
|
if (i->getInstruction()->getResult() != NULL && i->getInstruction()->getResult()->getType() == SAPFOR::CFG_ARG_TYPE::VAR)
|
||||||
|
{
|
||||||
resValue = i->getInstruction()->getResult()->getValue();
|
resValue = i->getInstruction()->getResult()->getValue();
|
||||||
i->getInstruction()->getResult()->setValue(i->getInstruction()->getResult()->getValue() + to_string(i->getInstruction()->getResult()->getNumber()));
|
i->getInstruction()->getResult()->setValue(i->getInstruction()->getResult()->getValue() + to_string(i->getInstruction()->getResult()->getNumber()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i->getInstruction()->getArg1() != NULL && i->getInstruction()->getArg1()->getType() == SAPFOR::CFG_ARG_TYPE::VAR) {
|
if (i->getInstruction()->getArg1() != NULL && i->getInstruction()->getArg1()->getType() == SAPFOR::CFG_ARG_TYPE::VAR)
|
||||||
|
{
|
||||||
arg1Value = i->getInstruction()->getArg1()->getValue();
|
arg1Value = i->getInstruction()->getArg1()->getValue();
|
||||||
i->getInstruction()->getArg1()->setValue(i->getInstruction()->getArg1()->getValue() + to_string(i->getInstruction()->getArg1()->getNumber()));
|
i->getInstruction()->getArg1()->setValue(i->getInstruction()->getArg1()->getValue() + to_string(i->getInstruction()->getArg1()->getNumber()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i->getInstruction()->getArg2() != NULL && i->getInstruction()->getArg2()->getType() == SAPFOR::CFG_ARG_TYPE::VAR) {
|
if (i->getInstruction()->getArg2() != NULL && i->getInstruction()->getArg2()->getType() == SAPFOR::CFG_ARG_TYPE::VAR)
|
||||||
|
{
|
||||||
arg2Value = i->getInstruction()->getArg2()->getValue();
|
arg2Value = i->getInstruction()->getArg2()->getValue();
|
||||||
i->getInstruction()->getArg2()->setValue(i->getInstruction()->getArg2()->getValue() + to_string(i->getInstruction()->getArg2()->getNumber()));
|
i->getInstruction()->getArg2()->setValue(i->getInstruction()->getArg2()->getValue() + to_string(i->getInstruction()->getArg2()->getNumber()));
|
||||||
}
|
}
|
||||||
@@ -105,7 +109,7 @@ static void getLoopBody(SAPFOR::BasicBlock* loopHeader, const set<SAPFOR::BasicB
|
|||||||
continue;
|
continue;
|
||||||
visited.insert(block);
|
visited.insert(block);
|
||||||
|
|
||||||
for (auto succ : block->getNext())
|
for (auto& succ : block->getNext())
|
||||||
{
|
{
|
||||||
if (loopExits.count(succ))
|
if (loopExits.count(succ))
|
||||||
continue;
|
continue;
|
||||||
@@ -128,12 +132,12 @@ static void getLoopBody(SAPFOR::BasicBlock* loopHeader, const set<SAPFOR::BasicB
|
|||||||
continue;
|
continue;
|
||||||
backReachable.insert(block);
|
backReachable.insert(block);
|
||||||
|
|
||||||
for (auto pred : block->getPrev())
|
for (auto& pred : block->getPrev())
|
||||||
if (visited.count(pred) && !backReachable.count(pred))
|
if (visited.count(pred) && !backReachable.count(pred))
|
||||||
reverseStack.push(pred);
|
reverseStack.push(pred);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto block : visited)
|
for (auto& block : visited)
|
||||||
if (backReachable.count(block))
|
if (backReachable.count(block))
|
||||||
loopBody.push_back(block);
|
loopBody.push_back(block);
|
||||||
}
|
}
|
||||||
@@ -171,9 +175,9 @@ static set<SAPFOR::Argument*> findRegisterSourceVariables(const std::vector<SAPF
|
|||||||
|
|
||||||
visited.insert(variable);
|
visited.insert(variable);
|
||||||
|
|
||||||
for (auto block : blocks)
|
for (auto& block : blocks)
|
||||||
{
|
{
|
||||||
for (auto instrWrapper : block->getInstructions())
|
for (auto& instrWrapper : block->getInstructions())
|
||||||
{
|
{
|
||||||
auto instr = instrWrapper->getInstruction();
|
auto instr = instrWrapper->getInstruction();
|
||||||
if (!instr || instr->getResult() != variable)
|
if (!instr || instr->getResult() != variable)
|
||||||
@@ -279,9 +283,9 @@ static void findInductiveVars(const std::vector<SAPFOR::BasicBlock*>& blocks,
|
|||||||
set<string> inductiveVars;
|
set<string> inductiveVars;
|
||||||
set<SAPFOR::BasicBlock*> relevantBlocks = { loopHeader };
|
set<SAPFOR::BasicBlock*> relevantBlocks = { loopHeader };
|
||||||
|
|
||||||
for (auto block : relevantBlocks)
|
for (auto& block : relevantBlocks)
|
||||||
{
|
{
|
||||||
for (auto instrWrapper : block->getInstructions())
|
for (auto& instrWrapper : block->getInstructions())
|
||||||
{
|
{
|
||||||
auto instr = instrWrapper->getInstruction();
|
auto instr = instrWrapper->getInstruction();
|
||||||
if (!instr)
|
if (!instr)
|
||||||
@@ -300,7 +304,7 @@ static void findInductiveVars(const std::vector<SAPFOR::BasicBlock*>& blocks,
|
|||||||
if (arg1 && arg1->getType() == SAPFOR::CFG_ARG_TYPE::REG)
|
if (arg1 && arg1->getType() == SAPFOR::CFG_ARG_TYPE::REG)
|
||||||
{
|
{
|
||||||
auto foundVariables = findRegisterSourceVariables(blocks, arg1);
|
auto foundVariables = findRegisterSourceVariables(blocks, arg1);
|
||||||
for (auto var : foundVariables)
|
for (auto& var : foundVariables)
|
||||||
inductiveVars.insert(var->getValue());
|
inductiveVars.insert(var->getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -309,7 +313,7 @@ static void findInductiveVars(const std::vector<SAPFOR::BasicBlock*>& blocks,
|
|||||||
|
|
||||||
set<string> finalInductiveVars;
|
set<string> finalInductiveVars;
|
||||||
|
|
||||||
for (auto instrWrapper : loopHeader->getInstructions())
|
for (auto& instrWrapper : loopHeader->getInstructions())
|
||||||
{
|
{
|
||||||
auto instr = instrWrapper->getInstruction();
|
auto instr = instrWrapper->getInstruction();
|
||||||
if (!instr || instr->getOperation() != SAPFOR::CFG_OP::F_CALL || !instr->getArg1() || instr->getArg1()->getValue() != "FI_FUNCTION")
|
if (!instr || instr->getOperation() != SAPFOR::CFG_OP::F_CALL || !instr->getArg1() || instr->getArg1()->getValue() != "FI_FUNCTION")
|
||||||
@@ -347,7 +351,7 @@ static void findInductiveVars(const std::vector<SAPFOR::BasicBlock*>& blocks,
|
|||||||
finalInductiveVars.insert(phiRes->getValue());
|
finalInductiveVars.insert(phiRes->getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto i : finalInductiveVars)
|
for (auto& i : finalInductiveVars)
|
||||||
cout << "Confirmed inductive variable: " << i << endl;
|
cout << "Confirmed inductive variable: " << i << endl;
|
||||||
|
|
||||||
if (finalInductiveVars.empty())
|
if (finalInductiveVars.empty())
|
||||||
@@ -358,15 +362,15 @@ static SAPFOR::Instruction* findInstructionAfterLoop(const std::vector<SAPFOR::B
|
|||||||
{
|
{
|
||||||
set<SAPFOR::BasicBlock*> loopSet(loopBody.begin(), loopBody.end());
|
set<SAPFOR::BasicBlock*> loopSet(loopBody.begin(), loopBody.end());
|
||||||
|
|
||||||
for (auto block : loopBody)
|
for (auto& block : loopBody)
|
||||||
{
|
{
|
||||||
for (auto succ : block->getNext())
|
for (auto& succ : block->getNext())
|
||||||
{
|
{
|
||||||
if (!loopSet.count(succ))
|
if (!loopSet.count(succ))
|
||||||
{
|
{
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
auto instructions = succ->getInstructions();
|
auto instructions = succ->getInstructions();
|
||||||
for (auto wrapper : instructions)
|
for (auto& wrapper : instructions)
|
||||||
if (auto instr = wrapper->getInstruction())
|
if (auto instr = wrapper->getInstruction())
|
||||||
return instr;
|
return instr;
|
||||||
}
|
}
|
||||||
@@ -380,14 +384,14 @@ void findImplicitLoops(const map<FuncInfo*, vector<SAPFOR::BasicBlock*>>& fullIR
|
|||||||
{
|
{
|
||||||
for (auto& i : fullIR_SSA)
|
for (auto& i : fullIR_SSA)
|
||||||
{
|
{
|
||||||
//for (auto j : i.second)
|
//for (auto& j : i.second)
|
||||||
// printblock(j);
|
// printblock(j);
|
||||||
|
|
||||||
if (fileName != i.first->fileName)
|
if (fileName != i.first->fileName)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
map<int, int> visited;
|
map<int, int> visited;
|
||||||
for (auto i : i.second)
|
for (auto& i : i.second)
|
||||||
visited[i->getNumber()] = UNVISITED;
|
visited[i->getNumber()] = UNVISITED;
|
||||||
|
|
||||||
//vector<int> visited(i.second.size(), UNVISITED);
|
//vector<int> visited(i.second.size(), UNVISITED);
|
||||||
@@ -399,11 +403,9 @@ void findImplicitLoops(const map<FuncInfo*, vector<SAPFOR::BasicBlock*>>& fullIR
|
|||||||
for (auto& [tail, header] : startAndEnd) {
|
for (auto& [tail, header] : startAndEnd) {
|
||||||
set<SAPFOR::BasicBlock*> loopExits;
|
set<SAPFOR::BasicBlock*> loopExits;
|
||||||
|
|
||||||
for (auto succ : tail->getNext()) {
|
for (auto& succ : tail->getNext())
|
||||||
if (succ != header) {
|
if (succ != header)
|
||||||
loopExits.insert(succ);
|
loopExits.insert(succ);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vector<SAPFOR::BasicBlock*> loopBody;
|
vector<SAPFOR::BasicBlock*> loopBody;
|
||||||
getLoopBody(header, loopExits, loopBody);
|
getLoopBody(header, loopExits, loopBody);
|
||||||
@@ -412,16 +414,15 @@ void findImplicitLoops(const map<FuncInfo*, vector<SAPFOR::BasicBlock*>>& fullIR
|
|||||||
cout << " Header: " << header->getNumber() << endl;
|
cout << " Header: " << header->getNumber() << endl;
|
||||||
cout << " Tail: " << tail->getNumber() << endl;
|
cout << " Tail: " << tail->getNumber() << endl;
|
||||||
cout << " Body blocks: ";
|
cout << " Body blocks: ";
|
||||||
for (auto block : loopBody) {
|
for (auto& block : loopBody)
|
||||||
cout << block->getNumber() << " ";
|
cout << block->getNumber() << " ";
|
||||||
}
|
|
||||||
cout << endl;
|
cout << endl;
|
||||||
|
|
||||||
findInductiveVars(i.second, loopBody, header, loopExits);
|
findInductiveVars(i.second, loopBody, header, loopExits);
|
||||||
|
|
||||||
SAPFOR::Instruction* instructionAfterLoop = findInstructionAfterLoop(loopBody);
|
SAPFOR::Instruction* instructionAfterLoop = findInstructionAfterLoop(loopBody);
|
||||||
|
|
||||||
if (instructionAfterLoop == NULL) {
|
if (instructionAfterLoop == NULL)
|
||||||
|
{
|
||||||
cout << "Warning: instruction after loop not found!" << endl;
|
cout << "Warning: instruction after loop not found!" << endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -437,24 +438,25 @@ void findImplicitLoops(const map<FuncInfo*, vector<SAPFOR::BasicBlock*>>& fullIR
|
|||||||
tmpLoop->lineNum = firstInstruction->getOperator()->lineNumber();
|
tmpLoop->lineNum = firstInstruction->getOperator()->lineNumber();
|
||||||
tmpLoop->lineNumAfterLoop = instructionAfterLoop->getOperator()->lineNumber();
|
tmpLoop->lineNumAfterLoop = instructionAfterLoop->getOperator()->lineNumber();
|
||||||
|
|
||||||
if (firstInstruction->getOperator()->variant() == FOR_NODE) {
|
if (firstInstruction->getOperator()->variant() == FOR_NODE)
|
||||||
|
{
|
||||||
SgForStmt* stmt = isSgForStmt(firstInstruction->getOperator());
|
SgForStmt* stmt = isSgForStmt(firstInstruction->getOperator());
|
||||||
cout << "for loop" << endl;// << stmt->sunparse() << endl;
|
cout << "for loop" << endl;// << stmt->sunparse() << endl;
|
||||||
}
|
}
|
||||||
else if (firstInstruction->getOperator()->variant() == WHILE_NODE) {
|
else if (firstInstruction->getOperator()->variant() == WHILE_NODE)
|
||||||
|
{
|
||||||
SgWhileStmt* stmt = isSgWhileStmt(firstInstruction->getOperator());
|
SgWhileStmt* stmt = isSgWhileStmt(firstInstruction->getOperator());
|
||||||
cout << (stmt->conditional() == NULL ? "infinit" : "") << "while loop" << endl;//<< stmt->sunparse() << endl;
|
cout << (stmt->conditional() == NULL ? "infinit" : "") << "while loop" << endl;//<< stmt->sunparse() << endl;
|
||||||
}
|
}
|
||||||
else if (firstInstruction->getOperator()->variant() == DO_WHILE_NODE) {
|
else if (firstInstruction->getOperator()->variant() == DO_WHILE_NODE)
|
||||||
|
{
|
||||||
SgWhileStmt* stmt = isSgDoWhileStmt(firstInstruction->getOperator());
|
SgWhileStmt* stmt = isSgDoWhileStmt(firstInstruction->getOperator());
|
||||||
cout << "do while loop" << endl;// << stmt->sunparse() << endl;
|
cout << "do while loop" << endl;// << stmt->sunparse() << endl;
|
||||||
}
|
}
|
||||||
else if (firstInstruction->getOperator()->variant() == LOOP_NODE) {
|
else if (firstInstruction->getOperator()->variant() == LOOP_NODE)
|
||||||
cout << "not known loop" << endl;// << firstInstruction->getOperator()->sunparse() << endl;
|
cout << "not known loop" << endl;// << firstInstruction->getOperator()->sunparse() << endl;
|
||||||
}
|
else
|
||||||
else {
|
|
||||||
cout << "goto loop" << endl;// firstInstruction->getOperator()->sunparse() << endl;
|
cout << "goto loop" << endl;// firstInstruction->getOperator()->sunparse() << endl;
|
||||||
}
|
|
||||||
|
|
||||||
cout << "loop start line " << tmpLoop->lineNum << endl;
|
cout << "loop start line " << tmpLoop->lineNum << endl;
|
||||||
cout << "after loop line " << tmpLoop->lineNumAfterLoop << endl << endl;
|
cout << "after loop line " << tmpLoop->lineNumAfterLoop << endl << endl;
|
||||||
|
|||||||
Reference in New Issue
Block a user