From 9afdf2a98b43a0e3136e1b16b05a8b07afb79dc9 Mon Sep 17 00:00:00 2001 From: ALEXks Date: Sat, 14 Feb 2026 10:05:25 +0300 Subject: [PATCH] added CFG_withUnreachable option --- src/CFGraph/CFGraph.cpp | 5 +++-- src/CFGraph/CFGraph.h | 6 +++++- src/DirectiveProcessing/shadow.cpp | 3 ++- src/Utils/version.h | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/CFGraph/CFGraph.cpp b/src/CFGraph/CFGraph.cpp index c6290ce..e266f3c 100644 --- a/src/CFGraph/CFGraph.cpp +++ b/src/CFGraph/CFGraph.cpp @@ -1162,8 +1162,9 @@ map> buildCFG(const map& common if (SgFile::switchToFile(oldFile) == -1) printInternalError(convertFileName(__FILE__).c_str(), __LINE__); - for (auto& [func, blocks] : result) - removedUnreachableBlocks(blocks); + if (!settings.withUnreachable) + for (auto& [func, blocks] : result) + removedUnreachableBlocks(blocks); return result; } diff --git a/src/CFGraph/CFGraph.h b/src/CFGraph/CFGraph.h index 20608d2..0bd5259 100644 --- a/src/CFGraph/CFGraph.h +++ b/src/CFGraph/CFGraph.h @@ -112,7 +112,8 @@ namespace SAPFOR CFG_withDVM = 5, CFG_withCallsInBlocks = 6, CFG_withCallFrom = 7, - CFG_withDominators = 8 }; + CFG_withDominators = 8, + CFG_withUnreachable = 9 }; bool atLeastOneIterInLoop = false; bool withRD = false; @@ -122,6 +123,7 @@ namespace SAPFOR bool withCallsInBlocks = false; // separate each F_CALL to own BasicBlock bool withCallFrom = false; bool withDominators = false; + bool withUnreachable = false; explicit CFG_Settings(const std::set &settings = { CFG_withRD, CFG_withCallFrom, CFG_withDominators }) { @@ -143,6 +145,8 @@ namespace SAPFOR withCallFrom = true; else if (set == CFG_withDominators) withDominators = true; + else if (set == CFG_withUnreachable) + withUnreachable = true; else printInternalError(convertFileName(__FILE__).c_str(), __LINE__); } diff --git a/src/DirectiveProcessing/shadow.cpp b/src/DirectiveProcessing/shadow.cpp index 07cd69d..6c047c6 100644 --- a/src/DirectiveProcessing/shadow.cpp +++ b/src/DirectiveProcessing/shadow.cpp @@ -1673,7 +1673,8 @@ void GroupShadow(const map>& allFuncs, SgStatement* func = currF->funcPointer->GetOriginal(); - const auto settings = CFG_Settings({ CFG_Settings::CFG_atLeastOneIterInLoop, CFG_Settings::CFG_withSPF, CFG_Settings::CFG_withCallsInBlocks }); + const auto settings = CFG_Settings({ CFG_Settings::CFG_atLeastOneIterInLoop, CFG_Settings::CFG_withSPF, + CFG_Settings::CFG_withCallsInBlocks, CFG_Settings::CFG_withUnreachable }); auto cfg = buildCFGforCurrentFunc(func, settings, commonBlocks, allFuncs); if (cfg.size() != 1) printInternalError(convertFileName(__FILE__).c_str(), __LINE__); diff --git a/src/Utils/version.h b/src/Utils/version.h index 6c1461d..7203a9c 100644 --- a/src/Utils/version.h +++ b/src/Utils/version.h @@ -1,3 +1,3 @@ #pragma once -#define VERSION_SPF "2462" +#define VERSION_SPF "2463"