diff --git a/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp b/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp index 615c939..659eef7 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp @@ -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()); rem->deleteStmt(); } - - remove.clear(); - //remove empty blocks - for (auto st = start; st != end; st = st->lexNext()) + + //remove empty blocks + do { - const int var = st->variant(); - if ((var == FOR_NODE || var == WHILE_NODE || var == SWITCH_NODE) && - st->lexNext()->variant() == CONTROL_END) + remove.clear(); + for (auto st = start; st != end; st = st->lexNext()) { - 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) + const int var = st->variant(); + if ((var == FOR_NODE || var == WHILE_NODE || var == SWITCH_NODE) && + st->lexNext()->variant() == CONTROL_END) + { 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) - { - __spf_print(PRINT_USELESS_STATEMENTS, "[Useless block statement on line %d and file %s]\n", rem->lineNumber(), rem->fileName()); - rem->deleteStmt(); - } + for (auto& rem : remove) + { + __spf_print(PRINT_USELESS_STATEMENTS, "[Useless block statement on line %d and file %s]\n", rem->lineNumber(), rem->fileName()); + rem->deleteStmt(); + } + } while (remove.size()); deleteCFG(cfg); } \ No newline at end of file diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/PassManager.h b/sapfor/experts/Sapfor_2017/_src/Utils/PassManager.h index 0f2e0fe..a5068c3 100644 --- a/sapfor/experts/Sapfor_2017/_src/Utils/PassManager.h +++ b/sapfor/experts/Sapfor_2017/_src/Utils/PassManager.h @@ -291,7 +291,7 @@ void InitPassesDependencies(map> &passDepsIn, set 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); diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/version.h b/sapfor/experts/Sapfor_2017/_src/Utils/version.h index 1289c51..a50dfc5 100644 --- a/sapfor/experts/Sapfor_2017/_src/Utils/version.h +++ b/sapfor/experts/Sapfor_2017/_src/Utils/version.h @@ -1,3 +1,3 @@ #pragma once -#define VERSION_SPF "2304" +#define VERSION_SPF "2305"