diff --git a/src/Sapfor.cpp b/src/Sapfor.cpp index 1c824a0..0917819 100644 --- a/src/Sapfor.cpp +++ b/src/Sapfor.cpp @@ -942,14 +942,10 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne { auto itFound = loopGraph.find(file->filename()); if (itFound != loopGraph.end()) - removePrivatesAnalysis(file_name, itFound->second, getObjectForFileFromMap(file_name, SPF_messages), - usersDirectives, commonBlocks, allFuncInfo); + removePrivatesAnalysis(file_name, itFound->second, getObjectForFileFromMap(file_name, SPF_messages), usersDirectives, commonBlocks, allFuncInfo); } else if (curr_regime == PRIVATE_REMOVING) - { - removePrivates(file_name, getObjectForFileFromMap(file_name, SPF_messages), - commonBlocks, allFuncInfo, countOfTransform); - } + removePrivates(file_name, getObjectForFileFromMap(file_name, SPF_messages), commonBlocks, allFuncInfo, countOfTransform); else if (curr_regime == CREATE_INTER_TREE) { vector include_functions; diff --git a/src/Transformations/private_removing.cpp b/src/Transformations/private_removing.cpp index 06d7453..51414e8 100644 --- a/src/Transformations/private_removing.cpp +++ b/src/Transformations/private_removing.cpp @@ -361,7 +361,7 @@ static void fillIterationVars(SgStatement* stmt, SgStatement* outerLoopStmt, vec static void addMessageVarNotAlignedWithLoop(vector& messages, string varName, int loopLineNum) { - __spf_print(1, "WARR: cannot remove private var '%s' - its references have different alignment with the loop %d\n", + __spf_print(1, " WARR: cannot remove private var '%s' - its references have different alignment with the loop %d\n", varName.c_str(), loopLineNum); wstring messageE, messageR; @@ -374,7 +374,7 @@ static void addMessageVarNotAlignedWithLoop(vector& messages, string v static void addMessageRemovePrivateVar(vector& messages, string varName, int loopLineNum) { - __spf_print(1, "NOTE: private variable '%s' was removed in loop %d\n", varName.c_str(), loopLineNum); + __spf_print(1, " NOTE: private variable '%s' was removed in loop %d\n", varName.c_str(), loopLineNum); wstring messageE, messageR; __spf_printToLongBuf(messageE, L"Private variable '%s' was removed", to_wstring(varName).c_str()); @@ -385,7 +385,7 @@ static void addMessageRemovePrivateVar(vector& messages, string varNam static void addMessageRemovePrivateVarPart(vector& messages, string varName, int loopLineNum) { - __spf_print(1, "NOTE: private variable '%s' was partially removed in loop %d\n", + __spf_print(1, " NOTE: private variable '%s' was partially removed in loop %d\n", varName.c_str(), loopLineNum); wstring messageE, messageR; @@ -398,7 +398,7 @@ static void addMessageRemovePrivateVarPart(vector& messages, string va static void addMessageCannotFindRD(vector& messages, string varName, int loopLineNum) { - __spf_print(1, "WARR: cannot remove private var '%s' - cannot find reaching definition for the statement in line %d\n", + __spf_print(1, " WARR: cannot remove private var '%s' - cannot find reaching definition for the statement in line %d\n", varName.c_str(), loopLineNum); wstring messageE, messageR; @@ -412,7 +412,7 @@ static void addMessageCannotFindRD(vector& messages, string varName, i static void addMessagePossibleDifferentAssumption(vector& messages, string varName, string ref1, string ref2, int loopLineNum) { - __spf_print(1, "WARR: removing of private var '%s' was made with assumption that references '%s' and '%s' are different in line %d\n", + __spf_print(1, " WARR: removing of private var '%s' was made with assumption that references '%s' and '%s' are different in line %d\n", varName.c_str(), ref1.c_str(), ref2.c_str(), loopLineNum); wstring messageE, messageR; @@ -425,7 +425,7 @@ static void addMessagePossibleDifferentAssumption(vector& messages, st static void addMessageRecursiveDependency(vector& messages, string varName, int lineNum) { - __spf_print(1, "WARR: cannot remove private var '%s' in line %d - it has recursive dependency\n", + __spf_print(1, " WARR: cannot remove private var '%s' in line %d - it has recursive dependency\n", varName.c_str(), lineNum); wstring messageE, messageR; @@ -438,7 +438,7 @@ static void addMessageRecursiveDependency(vector& messages, string var static void addMessageDependOnNonInvariant(vector& messages, string varName, string dependOn, int lineNum) { - __spf_print(1, "WARR: cannot remove private var '%s' in line %d - it depends on non-invariant var '%s'\n", + __spf_print(1, " WARR: cannot remove private var '%s' in line %d - it depends on non-invariant var '%s'\n", varName.c_str(), lineNum, dependOn.c_str()); wstring messageE, messageR; @@ -451,7 +451,7 @@ static void addMessageDependOnNonInvariant(vector& messages, string va static void addMessageDoesNotMatchMask(vector& messages, string varName, int loopLineNum) { - __spf_print(1, "WARR: cannot remove private var '%s' in loop %d - it doesn't match any fixed dimensions mask\n", + __spf_print(1, " WARR: cannot remove private var '%s' in loop %d - it doesn't match any fixed dimensions mask\n", varName.c_str(), loopLineNum); wstring messageE, messageR; @@ -465,7 +465,7 @@ static void addMessageDoesNotMatchMask(vector& messages, string varNam static void addMessageUsageInFunctionCall(vector& messages, string varName, string funcName, int loopLineNum, int stmtLineNum) { - __spf_print(1, "WARR: cannot remove private var '%s' in loop %d - it is used in the call of function '%s' in line %d\n", + __spf_print(1, " WARR: cannot remove private var '%s' in loop %d - it is used in the call of function '%s' in line %d\n", varName.c_str(), loopLineNum, funcName.c_str(), stmtLineNum); wstring messageE, messageR; @@ -1251,7 +1251,7 @@ static vector getFixedDimensionsMask(Context* ctx) } string unparsedFixedDimensions = sunparseFixedDimensionsVector(resultMask); - __spf_print(1, "NOTE: found fixed subsripts mask %s for array '%s' in loop %d\n", + __spf_print(1, " NOTE: found fixed subsripts mask %s for array '%s' in loop %d\n", unparsedFixedDimensions.c_str(), ctx->arraySymbol->identifier(), ctx->loop->lineNum); return resultMask; @@ -2190,7 +2190,7 @@ static set getPrivateArraysForLoop(LoopGraph* loop, const UsersDirect return privateArrays; } -void removePrivateAnalyze(Context *ctx) +static void removePrivateAnalyze(Context *ctx) { // inserting assignment to reduced array variables for getting reaching definitions analysis: auto reducedArrayVars = getReducedArrayVars(ctx); diff --git a/src/Utils/module_utils.cpp b/src/Utils/module_utils.cpp index 1db7ad5..7675b3b 100644 --- a/src/Utils/module_utils.cpp +++ b/src/Utils/module_utils.cpp @@ -293,35 +293,45 @@ static SgStatement* findModWithName(const vector& modules, const s return NULL; } -static map> symbolsForFunc; +static map> symbolsForFunc; static set allFiles; static void getModuleSymbols(SgStatement* func, set& symbs) { - SgSymbol* s = func->symbol()->next(); + string currScope = func->symbol()->identifier(); + + auto it = symbolsForFunc.find(currScope); + if (it != symbolsForFunc.end()) { + for (const auto& s : it->second) + symbs.insert(s); + return; + } + + SgSymbol* s = func->symbol()->next(); while (s) { - if (s->scope() == func && IS_BY_USE(s)) + if (IS_BY_USE(s) && s->scope()->symbol()->identifier() == currScope) symbs.insert(s); s = s->next(); } } -const set& getModuleSymbols(SgStatement *func) +const const set& getModuleSymbols(SgStatement *func) { - if (symbolsForFunc.find(func) != symbolsForFunc.end()) - return symbolsForFunc[func]; + auto it = symbolsForFunc.find(func->symbol()->identifier()); + if (it != symbolsForFunc.end()) + return it->second; set symbs; getModuleSymbols(func, symbs); //if function in contains - func = func->controlParent(); - if (isSgProgHedrStmt(func)) - getModuleSymbols(func, symbs); + auto cp = func->controlParent(); + if (isSgProgHedrStmt(cp)) + getModuleSymbols(cp, symbs); - symbolsForFunc[func] = symbs; - return symbolsForFunc[func]; + symbolsForFunc[func->symbol()->identifier()] = symbs; + return symbs; } SgSymbol* getNameInLocation(SgStatement* func, const string& varName, const string& locName) diff --git a/src/Utils/version.h b/src/Utils/version.h index cbe83a5..0dcd95e 100644 --- a/src/Utils/version.h +++ b/src/Utils/version.h @@ -1,3 +1,3 @@ #pragma once -#define VERSION_SPF "2398" +#define VERSION_SPF "2399"