improved dead code

This commit is contained in:
ALEXks
2024-04-06 18:04:59 +03:00
parent 92bb44560c
commit 92d4c54eaf
3 changed files with 35 additions and 32 deletions

View File

@@ -521,42 +521,45 @@ void removeDeadCode(SgStatement* func,
__spf_print(PRINT_USELESS_STATEMENTS, "[Useless statement on line %d and file %s]\n", rem->lineNumber(), rem->fileName()); __spf_print(PRINT_USELESS_STATEMENTS, "[Useless statement on line %d and file %s]\n", rem->lineNumber(), rem->fileName());
rem->deleteStmt(); rem->deleteStmt();
} }
remove.clear(); //remove empty blocks
//remove empty blocks do
for (auto st = start; st != end; st = st->lexNext())
{ {
const int var = st->variant(); remove.clear();
if ((var == FOR_NODE || var == WHILE_NODE || var == SWITCH_NODE) && for (auto st = start; st != end; st = st->lexNext())
st->lexNext()->variant() == CONTROL_END)
{ {
remove.push_back(st); const int var = st->variant();
} if ((var == FOR_NODE || var == WHILE_NODE || var == SWITCH_NODE) &&
else if (var == IF_NODE) st->lexNext()->variant() == CONTROL_END)
{ {
SgStatement* ifS = st;
while (ifS->lexNext()->variant() == ELSEIF_NODE)
ifS = ifS->lexNext();
SgStatement* lastNode = ifS->lastNodeOfStmt();
ifS = ifS->lexNext();
while (ifS->variant() == CONTROL_END && ifS != lastNode)
ifS = ifS->lexNext();
if(ifS == lastNode)
remove.push_back(st); remove.push_back(st);
}
else if (var == IF_NODE)
{
SgStatement* ifS = st;
while (ifS->lexNext()->variant() == ELSEIF_NODE)
ifS = ifS->lexNext();
SgStatement* lastNode = ifS->lastNodeOfStmt();
ifS = ifS->lexNext();
while (ifS->variant() == CONTROL_END && ifS != lastNode)
ifS = ifS->lexNext();
if (ifS == lastNode)
remove.push_back(st);
}
//TODO: SWITCH and other block statements
} }
//TODO: SWITCH and other block statements
}
for (auto& rem : remove)
for (auto& rem : remove) {
{ __spf_print(PRINT_USELESS_STATEMENTS, "[Useless block statement on line %d and file %s]\n", rem->lineNumber(), rem->fileName());
__spf_print(PRINT_USELESS_STATEMENTS, "[Useless block statement on line %d and file %s]\n", rem->lineNumber(), rem->fileName()); rem->deleteStmt();
rem->deleteStmt(); }
} } while (remove.size());
deleteCFG(cfg); deleteCFG(cfg);
} }

View File

@@ -291,7 +291,7 @@ void InitPassesDependencies(map<passes, vector<passes>> &passDepsIn, set<passes>
list({ CALL_GRAPH2, REVERT_SUBST_EXPR_RD, CONVERT_LOOP_TO_ASSIGN, RESTORE_LOOP_FROM_ASSIGN }) <= list({ DUPLICATE_FUNCTIONS, REMOVE_UNUSED_FUNCTIONS }); list({ CALL_GRAPH2, REVERT_SUBST_EXPR_RD, CONVERT_LOOP_TO_ASSIGN, RESTORE_LOOP_FROM_ASSIGN }) <= list({ DUPLICATE_FUNCTIONS, REMOVE_UNUSED_FUNCTIONS });
list({ CONVERT_LOOP_TO_ASSIGN, RESTORE_LOOP_FROM_ASSIGN }) <= list({ LOOPS_SPLITTER, LOOPS_COMBINER, PRIVATE_ARRAYS_EXPANSION, PRIVATE_ARRAYS_SHRINKING, CREATE_PARALLEL_REGIONS, PURE_SAVE_TO_PARAMS, PURE_MODULE_TO_PARAMS, PURE_COMMON_TO_PARAMS, PURE_INTENT_INSERT }); list({ CONVERT_LOOP_TO_ASSIGN, RESTORE_LOOP_FROM_ASSIGN }) <= list({ LOOPS_SPLITTER, LOOPS_COMBINER, PRIVATE_ARRAYS_EXPANSION, PRIVATE_ARRAYS_SHRINKING, CREATE_PARALLEL_REGIONS, PURE_SAVE_TO_PARAMS, PURE_MODULE_TO_PARAMS, PURE_COMMON_TO_PARAMS, PURE_INTENT_INSERT, PRIVATE_REMOVING });
list({ GET_ALL_ARRAY_DECL, FILL_PARALLEL_REG_IR }) <= Pass(CONVERT_ASSIGN_TO_LOOP); list({ GET_ALL_ARRAY_DECL, FILL_PARALLEL_REG_IR }) <= Pass(CONVERT_ASSIGN_TO_LOOP);

View File

@@ -1,3 +1,3 @@
#pragma once #pragma once
#define VERSION_SPF "2304" #define VERSION_SPF "2305"