Compare commits
1 Commits
replace_io
...
172eedfef1
| Author | SHA1 | Date | |
|---|---|---|---|
| 172eedfef1 |
@@ -1613,3 +1613,118 @@ vector<IR_Block*> buildIR(SgStatement* function, const FuncInfo* func, const vec
|
||||
|
||||
return blocks;
|
||||
}
|
||||
|
||||
void dfs(SAPFOR::BasicBlock* block, vector<int>& visit, vector<pair<SAPFOR::BasicBlock*, SAPFOR::BasicBlock*>>& startAndEnd, SAPFOR::BasicBlock* prev) {
|
||||
if (visit[block->getNumber()] == 2) {
|
||||
cout << "error";
|
||||
return;
|
||||
}
|
||||
|
||||
if (visit[block->getNumber()] == 1) {
|
||||
visit[block->getNumber()] = 2;
|
||||
startAndEnd.push_back(make_pair(prev, block));
|
||||
return;
|
||||
}
|
||||
|
||||
visit[block->getNumber()] = 1;
|
||||
for (auto i : block->getNext()) {
|
||||
dfs(i, visit, startAndEnd, block);
|
||||
}
|
||||
}
|
||||
|
||||
void printBlock(SAPFOR::BasicBlock* block) {
|
||||
cout << "block - " << block->getNumber() << endl;
|
||||
cout << "next -";
|
||||
for (auto i : block->getNext())
|
||||
{
|
||||
cout << " " << i->getNumber();
|
||||
}
|
||||
cout << endl << "prev -";
|
||||
for (auto i : block->getPrev())
|
||||
{
|
||||
cout << " " << i->getNumber();
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
for (auto i : block->getInstructions())
|
||||
{
|
||||
cout << i->getNumber() << " " << i->getInstruction()->dump() << endl;
|
||||
}
|
||||
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
void testIR(map<FuncInfo*, vector<SAPFOR::BasicBlock*>> fullIR) {
|
||||
for (auto& i : fullIR)
|
||||
{
|
||||
for (auto j : i.second)
|
||||
printBlock(j);
|
||||
|
||||
vector<int> visited(i.second.size(), 0);
|
||||
vector<pair<SAPFOR::BasicBlock*, SAPFOR::BasicBlock*>> startAndEnd;
|
||||
dfs(i.second[0], visited, startAndEnd, NULL);
|
||||
|
||||
|
||||
vector<LoopGraph*> loops;
|
||||
for (auto j : startAndEnd)
|
||||
{
|
||||
auto instruction = j.second->getInstructions()[0]->getInstruction();
|
||||
if (instruction->getOperator()->variant() == FOR_NODE) {
|
||||
SgForStmt* stmt = isSgForStmt(instruction->getOperator());
|
||||
|
||||
auto tmpLoop = new LoopGraph();
|
||||
tmpLoop->isFor = true;
|
||||
tmpLoop->lineNum = instruction->getOperator()->lineNumber();
|
||||
|
||||
cout << "for" << endl << stmt->sunparse() << endl;
|
||||
cout << "loop start line " << tmpLoop->lineNum << endl << endl;
|
||||
|
||||
loops.push_back(tmpLoop);
|
||||
} else if (instruction->getOperator()->variant() == WHILE_NODE) {
|
||||
SgWhileStmt* stmt = isSgWhileStmt(instruction->getOperator());
|
||||
|
||||
auto tmpLoop = new LoopGraph();
|
||||
tmpLoop->lineNum = instruction->getOperator()->lineNumber();
|
||||
|
||||
if (stmt->conditional() == NULL)
|
||||
{
|
||||
//infinit loop
|
||||
cout << "infinit loop " << endl << stmt->sunparse() << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
//while
|
||||
cout << "while " << endl << stmt->sunparse();
|
||||
}
|
||||
|
||||
cout << "loop start line " << tmpLoop->lineNum << endl << endl;
|
||||
|
||||
loops.push_back(tmpLoop);
|
||||
} else if (instruction->getOperator()->variant() == LOOP_NODE) {
|
||||
cout << "not known loop" << endl << instruction->getOperator()->sunparse() << endl;
|
||||
}
|
||||
else {
|
||||
cout << "goto loop - " << instruction->getOperator()->sunparse() << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*for (auto j : i.second) {
|
||||
cout << j->getNumber() << endl << "in" << endl;
|
||||
for (auto k : j->getRD_In()) {
|
||||
cout << k.first->getMemTypeStr() << " - ";
|
||||
for (auto h : k.second) {
|
||||
cout << h << " ";
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
cout << "out" << endl;
|
||||
for (auto k : j->getRD_Out()) {
|
||||
cout << k.first->getMemTypeStr() << " - ";
|
||||
for (auto h : k.second) {
|
||||
cout << h << " ";
|
||||
}
|
||||
cout << endl;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
@@ -313,3 +313,5 @@ SAPFOR::Instruction* getInstructionByNumber(const std::vector<SAPFOR::IR_Block*>
|
||||
std::pair<SAPFOR::Instruction*, SAPFOR::BasicBlock*> getInstructionAndBlockByNumber(const std::map<FuncInfo*, std::vector<SAPFOR::BasicBlock*>>& CFGraph, int num);
|
||||
std::pair<SAPFOR::Instruction*, SAPFOR::BasicBlock*> getInstructionAndBlockByStatement(const std::map<FuncInfo*, std::vector<SAPFOR::BasicBlock*>>& CFGraph, SgStatement* stmt);
|
||||
int getParamIndex(SAPFOR::Argument* func_param, int max_index);
|
||||
|
||||
void testIR(std::map<FuncInfo*, std::vector<SAPFOR::BasicBlock*>> fullIR);
|
||||
@@ -1036,6 +1036,8 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne
|
||||
if(func->funcPointer->variant() != ENTRY_STAT)
|
||||
countOfTransform += removeDeadCode(func->funcPointer, allFuncInfo, commonBlocks);
|
||||
}
|
||||
else if (curr_regime == EXPLORE_IR_LOOPS)
|
||||
testIR(fullIR);
|
||||
else if (curr_regime == TEST_PASS)
|
||||
{
|
||||
//test pass
|
||||
|
||||
@@ -178,6 +178,7 @@ enum passes {
|
||||
INSERT_NO_DISTR_FLAGS_FROM_GUI,
|
||||
|
||||
SET_IMPLICIT_NONE,
|
||||
EXPLORE_IR_LOOPS,
|
||||
|
||||
TEST_PASS,
|
||||
EMPTY_PASS
|
||||
@@ -360,6 +361,7 @@ static void setPassValues()
|
||||
passNames[CONVERT_TO_C] = "CONVERT_TO_C";
|
||||
passNames[SET_IMPLICIT_NONE] = "SET_IMPLICIT_NONE";
|
||||
passNames[INSERT_NO_DISTR_FLAGS_FROM_GUI] = "INSERT_NO_DISTR_FLAGS_FROM_GUI";
|
||||
passNames[EXPLORE_IR_LOOPS] = "EXPLORE_IR_LOOPS";
|
||||
|
||||
passNames[TEST_PASS] = "TEST_PASS";
|
||||
}
|
||||
|
||||
@@ -312,6 +312,8 @@ void InitPassesDependencies(map<passes, vector<passes>> &passDepsIn, set<passes>
|
||||
|
||||
Pass(CORRECT_VAR_DECL) <= Pass(SET_IMPLICIT_NONE);
|
||||
|
||||
list({ CALL_GRAPH, LOOP_GRAPH, CALL_GRAPH2 }) <= Pass(EXPLORE_IR_LOOPS);
|
||||
|
||||
passesIgnoreStateDone.insert({ CREATE_PARALLEL_DIRS, INSERT_PARALLEL_DIRS, INSERT_SHADOW_DIRS, EXTRACT_PARALLEL_DIRS,
|
||||
EXTRACT_SHADOW_DIRS, CREATE_REMOTES, UNPARSE_FILE, REMOVE_AND_CALC_SHADOW,
|
||||
REVERSE_CREATED_NESTED_LOOPS, PREDICT_SCHEME, CALCULATE_STATS_SCHEME, REVERT_SPF_DIRS, CLEAR_SPF_DIRS, TRANSFORM_SHADOW_IF_FULL,
|
||||
|
||||
Reference in New Issue
Block a user