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"