From 18f58020f58bfe6ec7383b8d4e61541b9c69aefc Mon Sep 17 00:00:00 2001 From: ALEXks Date: Fri, 12 Apr 2024 15:25:48 +0300 Subject: [PATCH] improved --- sapfor/experts/Sapfor_2017/_src/Sapfor.cpp | 2 +- .../_src/Transformations/dead_code.cpp | 43 +++++-------------- .../experts/Sapfor_2017/_src/Utils/version.h | 2 +- 3 files changed, 12 insertions(+), 35 deletions(-) diff --git a/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp b/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp index d2ee822..5724802 100644 --- a/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp @@ -1029,7 +1029,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne auto funcsForFile = getObjectForFileFromMap(file_name, allFuncInfo); for (auto& func : funcsForFile) if(func->funcPointer->variant() != ENTRY_STAT) - removeDeadCode(func->funcPointer, allFuncInfo, commonBlocks); + countOfTransform += removeDeadCode(func->funcPointer, allFuncInfo, commonBlocks); } else if (curr_regime == TEST_PASS) { diff --git a/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp b/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp index 97db965..3971b8c 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/dead_code.cpp @@ -472,34 +472,21 @@ int removeDeadCode(SgStatement* func, READ_STAT }; - static const set skip = - { - PROG_HEDR, - PROC_HEDR, - FUNC_HEDR - }; - vector remove; SgStatement* start = intervalDelStart ? intervalDelStart : func; SgStatement* end = intervalDelEnd ? intervalDelEnd : func->lastNodeOfStmt(); - auto st = start; - if (skip.find(st->variant()) != skip.end()) - st = st->lexNext(); - - for (; st != end; st = st->lexNext()) + for (auto st = start; st != end; st = st->lexNext()) { - if (skip.find(st->variant()) != skip.end()) - { - st = st->lastNodeOfStmt(); - continue; - } - - if (removable.find(st->variant()) != removable.end() && useful.find(st) == useful.end()) + const int var = st->variant(); + if (removable.find(var) != removable.end() && useful.find(st) == useful.end()) { remove.push_back(st); st = st->lastNodeOfStmt(); } + + if (var == CONTAINS_STMT) + break; } for (auto& rem : remove) @@ -513,21 +500,9 @@ int removeDeadCode(SgStatement* func, do { remove.clear(); - - st = start; - if (skip.find(st->variant()) != skip.end()) - st = st->lexNext(); - - for (; st != end; st = st->lexNext()) + for (auto st = start; st != end; st = st->lexNext()) { const int var = st->variant(); - - if (skip.find(var) != skip.end()) - { - st = st->lastNodeOfStmt(); - continue; - } - if ((var == FOR_NODE || var == WHILE_NODE || var == SWITCH_NODE) && st->lexNext()->variant() == CONTROL_END) { @@ -550,6 +525,9 @@ int removeDeadCode(SgStatement* func, } //TODO: SWITCH and other block statements + + if (var == CONTAINS_STMT) + break; } @@ -562,6 +540,5 @@ int removeDeadCode(SgStatement* func, } while (remove.size()); deleteCFG(cfg); - return countOfTransform; } \ No newline at end of file diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/version.h b/sapfor/experts/Sapfor_2017/_src/Utils/version.h index 10df47c..573c892 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 "2314" +#define VERSION_SPF "2315"