added new pass
This commit is contained in:
@@ -329,7 +329,7 @@ static string unparseProjectIfNeed(SgFile* file, const int curr_regime, const bo
|
||||
if (curr_regime == INSERT_INCLUDES && filesToInclude.find(file_name) != filesToInclude.end())
|
||||
{
|
||||
unparseToBuf = removeIncludeStatsAndUnparse(file, file_name, fout_name.c_str(), allIncludeFiles, out_free_form == 1, moduleUsesByFile,
|
||||
moduleDecls, getObjectForFileFromMap(file_name, exctactedModuleStats), toString, true);
|
||||
moduleDecls, getObjectForFileFromMap(file_name, exctactedModuleStats), toString, false, true);
|
||||
auto itI = filesToInclude.find(file_name);
|
||||
for (auto& incl : itI->second)
|
||||
if (allIncludeFiles.find(incl) != allIncludeFiles.end())
|
||||
@@ -338,7 +338,7 @@ static string unparseProjectIfNeed(SgFile* file, const int curr_regime, const bo
|
||||
else
|
||||
{
|
||||
unparseToBuf = removeIncludeStatsAndUnparse(file, file_name, fout_name.c_str(), allIncludeFiles, out_free_form == 1, moduleUsesByFile,
|
||||
moduleDecls, getObjectForFileFromMap(file_name, exctactedModuleStats), toString);
|
||||
moduleDecls, getObjectForFileFromMap(file_name, exctactedModuleStats), toString, (curr_regime == RENAME_INLCUDES), false);
|
||||
|
||||
// copy includes that have not changed
|
||||
if (folderName != NULL)
|
||||
@@ -362,7 +362,7 @@ static string unparseProjectIfNeed(SgFile* file, const int curr_regime, const bo
|
||||
}
|
||||
allIncludeFiles = allIncludeFilesFiltr;
|
||||
|
||||
copyIncludes(allIncludeFiles, commentsToInclude, newCopyDeclToIncl, folderName, keepSpfDirs, out_free_form == 1, removeDvmDirs);
|
||||
copyIncludes(allIncludeFiles, commentsToInclude, newCopyDeclToIncl, folderName, keepSpfDirs, out_free_form == 1, (curr_regime == RENAME_INLCUDES), removeDvmDirs);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1345,7 +1345,7 @@ static bool runAnalysis(SgProject &project, const int curr_regime, const bool ne
|
||||
|
||||
// copy includes that have not changed
|
||||
if (folderName != NULL)
|
||||
copyIncludes(allIncludeFiles, commentsToInclude, newCopyDeclToIncl, folderName, out_free_form == 1, keepSpfDirs);
|
||||
copyIncludes(allIncludeFiles, commentsToInclude, newCopyDeclToIncl, folderName, out_free_form == 1, keepSpfDirs, false);
|
||||
}
|
||||
else if (curr_regime == EXTRACT_SHADOW_DIRS)
|
||||
commentsToInclude.clear();
|
||||
@@ -2336,6 +2336,7 @@ void runPass(const int curr_regime, const char *proj_name, const char *folderNam
|
||||
case REMOVE_COMMENTS:
|
||||
case INSERT_NO_DISTR_FLAGS_FROM_GUI:
|
||||
case PRIVATE_REMOVING:
|
||||
case RENAME_INLCUDES:
|
||||
runAnalysis(*project, curr_regime, true, "", folderName);
|
||||
break;
|
||||
case INLINE_PROCEDURES:
|
||||
|
||||
@@ -178,6 +178,7 @@ enum passes {
|
||||
INSERT_NO_DISTR_FLAGS_FROM_GUI,
|
||||
|
||||
SET_IMPLICIT_NONE,
|
||||
RENAME_INLCUDES,
|
||||
|
||||
TEST_PASS,
|
||||
EMPTY_PASS
|
||||
@@ -359,6 +360,7 @@ static void setPassValues()
|
||||
passNames[GET_MIN_MAX_BLOCK_DIST] = "GET_MIN_MAX_BLOCK_DIST";
|
||||
passNames[CONVERT_TO_C] = "CONVERT_TO_C";
|
||||
passNames[SET_IMPLICIT_NONE] = "SET_IMPLICIT_NONE";
|
||||
passNames[RENAME_INLCUDES] = "RENAME_INLCUDES";
|
||||
passNames[INSERT_NO_DISTR_FLAGS_FROM_GUI] = "INSERT_NO_DISTR_FLAGS_FROM_GUI";
|
||||
|
||||
passNames[TEST_PASS] = "TEST_PASS";
|
||||
|
||||
@@ -30,6 +30,17 @@ static void FillCommonTypes(map<char, SgType*>& types)
|
||||
types[letter.first] = new SgType(T_FLOAT);
|
||||
}
|
||||
|
||||
static bool isByUse(SgSymbol* s, SgStatement* checkScope)
|
||||
{
|
||||
auto scope = s->scope();
|
||||
auto isByUse_s = IS_BY_USE(s);
|
||||
|
||||
if (!isByUse_s && scope == checkScope)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
static void FindAllVars(SgExpression* expr, set<SgSymbol*>& allVars, set<SgSymbol*>& allVarsConst, SgStatement* scope)
|
||||
{
|
||||
if (expr == NULL)
|
||||
@@ -51,7 +62,11 @@ static void FindAllVars(SgExpression* expr, set<SgSymbol*>& allVars, set<SgSymbo
|
||||
}
|
||||
}
|
||||
else if (var == CONST_REF)
|
||||
allVarsConst.insert(expr->symbol());
|
||||
{
|
||||
auto s = expr->symbol();
|
||||
if (!isByUse(s, scope))
|
||||
allVarsConst.insert(s);
|
||||
}
|
||||
|
||||
FindAllVars(expr->lhs(), allVars, allVarsConst, scope);
|
||||
FindAllVars(expr->rhs(), allVars, allVarsConst, scope);
|
||||
@@ -98,7 +113,8 @@ static void AddLettersToMap(SgExpression* expr, SgType* type, map<char, SgType*>
|
||||
}
|
||||
|
||||
static vector<SgSymbol*> getVars(const set<string>& functionSymbs, set<SgSymbol*>& toRename,
|
||||
const set<SgSymbol*>& allVars, const map<char, SgType*>& types)
|
||||
const set<SgSymbol*>& allVars, const map<char, SgType*>& types,
|
||||
SgStatement* scope)
|
||||
{
|
||||
vector<SgSymbol*> varsWithoutDecl;
|
||||
map<string, SgSymbol*> vars;
|
||||
@@ -115,7 +131,7 @@ static vector<SgSymbol*> getVars(const set<string>& functionSymbs, set<SgSymbol*
|
||||
continue;
|
||||
|
||||
vector<SgStatement*> allDecls;
|
||||
declaratedInStmt(var, &allDecls, false);
|
||||
declaratedInStmt(var, &allDecls, false, (var->variant() == FUNCTION_NAME) ? scope : NULL);
|
||||
|
||||
bool hasTypeDecls = false;
|
||||
for (auto& decl : allDecls)
|
||||
@@ -246,11 +262,8 @@ static map<char, SgType*> FunctionImplicitCheck(SgStatement* function, const map
|
||||
FindAllVars(st->expr(i), allVars, allVarsConst, function);
|
||||
|
||||
if (st->variant() == FOR_NODE)
|
||||
{
|
||||
auto s = isSgForStmt(st)->doName();
|
||||
if (!IS_BY_USE(s) && s->scope() == function)
|
||||
allVars.insert(s);
|
||||
}
|
||||
if (!isByUse(isSgForStmt(st)->doName(), function))
|
||||
allVars.insert(isSgForStmt(st)->doName());
|
||||
}
|
||||
|
||||
//add parameters
|
||||
@@ -264,8 +277,8 @@ static map<char, SgType*> FunctionImplicitCheck(SgStatement* function, const map
|
||||
}
|
||||
}
|
||||
|
||||
varsWithoutDecl = getVars(functionSymbs, toRename, allVars, types);
|
||||
varsWithoutDeclConst = getVars(functionSymbs, toRename, allVarsConst, types);
|
||||
varsWithoutDecl = getVars(functionSymbs, toRename, allVars, types, function);
|
||||
varsWithoutDeclConst = getVars(functionSymbs, toRename, allVarsConst, types, NULL);
|
||||
|
||||
if (!hasImplicitNone)
|
||||
{
|
||||
|
||||
@@ -276,6 +276,9 @@ static set<int> hideUnnecessary(SgFile* file, const string& fileN, const set<str
|
||||
set<int> changedVars;
|
||||
for (SgStatement* st = file->firstStatement(); st; st = st->lexNext())
|
||||
{
|
||||
if (st->variant() == GLOBAL)
|
||||
continue;
|
||||
|
||||
if (dontReplaceIncludes == false)
|
||||
{
|
||||
if (st->fileName() != fileN || st->getUnparseIgnore())
|
||||
@@ -311,7 +314,7 @@ string removeIncludeStatsAndUnparse(SgFile *file, const char *fileName, const ch
|
||||
set<string> &allIncludeFiles, bool outFree,
|
||||
const map<string, set<string>>& moduleUsesByFile, const map<string, string>& moduleDelcs,
|
||||
const map<SgStatement*, vector<SgStatement*>>& exctactedModuleStats,
|
||||
bool toString, bool dontReplaceIncludes)
|
||||
bool toString, bool renameIncludes, bool dontReplaceIncludes)
|
||||
{
|
||||
removeSpecialCommentsFromProject(file);
|
||||
|
||||
@@ -572,7 +575,7 @@ string removeIncludeStatsAndUnparse(SgFile *file, const char *fileName, const ch
|
||||
string inlcude = "";
|
||||
for (auto& inclByPos : toInsertIncludeComment)
|
||||
for (auto& incl : inclByPos.second)
|
||||
inlcude += incl;
|
||||
inlcude += (renameIncludes ? renameInclude(incl) : incl);
|
||||
|
||||
if (st->comments())
|
||||
st->setComments((inlcude + st->comments()).c_str());
|
||||
@@ -658,7 +661,7 @@ string removeIncludeStatsAndUnparse(SgFile *file, const char *fileName, const ch
|
||||
strUnparse = string(file->firstStatement()->unparse());
|
||||
else
|
||||
{
|
||||
auto tmp = string(file->firstStatement()->unparse());
|
||||
const string tmp = file->firstStatement()->unparse();
|
||||
if (tmp.size() > 0)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
@@ -1015,12 +1018,15 @@ static bool findSymbol(SgExpression *declLst, const string &toFind)
|
||||
}
|
||||
|
||||
extern map<string, vector<Messages>> SPF_messages;
|
||||
SgStatement* declaratedInStmt(SgSymbol *toFind, vector<SgStatement*> *allDecls, bool printInternal)
|
||||
SgStatement* declaratedInStmt(SgSymbol *toFind, vector<SgStatement*> *allDecls, bool printInternal, SgStatement* scope)
|
||||
{
|
||||
//need to call this function for MODULE symbols!
|
||||
toFind = OriginalSymbol(toFind);
|
||||
vector<SgStatement*> inDecl;
|
||||
SgStatement *start = toFind->scope();
|
||||
if (toFind->variant() == FUNCTION_NAME && scope == NULL)
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
|
||||
SgStatement *start = scope ? scope : toFind->scope();
|
||||
|
||||
if (start)
|
||||
{
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
#include "../GraphCall/graph_calls.h"
|
||||
#include "../DynamicAnalysis/gcov_info.h"
|
||||
|
||||
SgStatement* declaratedInStmt(SgSymbol *toFind, std::vector<SgStatement*> *allDecls = NULL, bool printInternal = true);
|
||||
SgStatement* declaratedInStmt(SgSymbol *toFind, std::vector<SgStatement*> *allDecls = NULL, bool printInternal = true, SgStatement* scope = NULL);
|
||||
|
||||
#include "DefUseList.h"
|
||||
#include "CommonBlock.h"
|
||||
|
||||
std::string removeIncludeStatsAndUnparse(SgFile *file, const char *fileName, const char *fout, std::set<std::string> &allIncludeFiles, bool outFree, const std::map<std::string, std::set<std::string>> &moduleUsesByFile, const std::map<std::string, std::string>& moduleDelcs, const std::map<SgStatement*, std::vector<SgStatement*>>& exctactedModuleStats, bool toString, bool dontReplaceIncls = false);
|
||||
std::string removeIncludeStatsAndUnparse(SgFile *file, const char *fileName, const char *fout, std::set<std::string> &allIncludeFiles, bool outFree, const std::map<std::string, std::set<std::string>> &moduleUsesByFile, const std::map<std::string, std::string>& moduleDelcs, const std::map<SgStatement*, std::vector<SgStatement*>>& exctactedModuleStats, bool toString, bool renameIncludes, bool dontReplaceIncls);
|
||||
SgSymbol* findSymbolOrCreate(SgFile *file, const std::string toFind, SgType *type = NULL, SgStatement *scope = NULL);
|
||||
void recExpressionPrint(SgExpression *exp);
|
||||
void removeSubstrFromStr(std::string &str, const std::string &del);
|
||||
|
||||
@@ -520,16 +520,49 @@ bool isDVM_comment(const string& bufStr)
|
||||
return dvmStart;
|
||||
}
|
||||
|
||||
static string renameExtension(const string& inc)
|
||||
{
|
||||
string ret = inc;
|
||||
if (ret.find(".") != string::npos)
|
||||
ret = OnlyName(ret.c_str());
|
||||
ret += ".h";
|
||||
return ret;
|
||||
}
|
||||
|
||||
string renameInclude(const string& inc)
|
||||
{
|
||||
auto posStart = inc.find("'");
|
||||
auto posEnd = inc.find("'", posStart + 1);
|
||||
|
||||
if (posStart == string::npos || posEnd == string::npos)
|
||||
{
|
||||
posStart = inc.find("\"");
|
||||
posEnd = inc.find("\"", posStart + 1);
|
||||
|
||||
if (posStart == string::npos || posEnd == string::npos) {
|
||||
__spf_print(1, "incorrect include string <%s>\n", inc.c_str());
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
}
|
||||
}
|
||||
|
||||
string substr = renameExtension(inc.substr(posStart + 1, posEnd - posStart - 1));
|
||||
|
||||
string ret = inc;
|
||||
ret.replace(posStart + 1, posEnd - posStart - 1, substr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void copyIncludes(const set<string> &allIncludeFiles, const map<string, map<int, set<string>>> &commentsToInclude,
|
||||
const map<string, map<int, set<string>>>& newCopyDeclToIncl,
|
||||
const char *folderName, bool keepSpfDirs, bool isFreeStyle, int removeDvmDirs)
|
||||
const char *folderName, bool keepSpfDirs, bool isFreeStyle, bool isRename,
|
||||
int removeDvmDirs)
|
||||
{
|
||||
for (auto &include : allIncludeFiles)
|
||||
{
|
||||
if (commentsToInclude.find(include) != commentsToInclude.end())
|
||||
continue;
|
||||
|
||||
string newCurrFile = string(folderName) + "/" + include;
|
||||
string newCurrFile = string(folderName) + "/" + (isRename ? renameExtension(include) : include);
|
||||
|
||||
FILE *tryToOpen = fopen(newCurrFile.c_str(), "r");
|
||||
if (tryToOpen == NULL)
|
||||
|
||||
@@ -33,7 +33,8 @@ const std::string& getGlobalBuffer();
|
||||
std::wstring to_wstring(const std::string);
|
||||
void convertBuffers(short*& resultM, int*& resultSizeM, short*& result, int*& resultSize);
|
||||
void clearGlobalMessagesBuffer();
|
||||
void copyIncludes(const std::set<std::string> &allIncludeFiles, const std::map<std::string, std::map<int, std::set<std::string>>> &commentsToInclude, const std::map<std::string, std::map<int, std::set<std::string>>>& newCopyDeclToIncl, const char *folderName, bool keepSpfDirs, bool isFreeStyle, int removeDvmDirs = 0);
|
||||
std::string renameInclude(const std::string& inc);
|
||||
void copyIncludes(const std::set<std::string> &allIncludeFiles, const std::map<std::string, std::map<int, std::set<std::string>>> &commentsToInclude, const std::map<std::string, std::map<int, std::set<std::string>>>& newCopyDeclToIncl, const char *folderName, bool keepSpfDirs, bool isFreeStyle, bool isRename, int removeDvmDirs = 0);
|
||||
|
||||
std::string splitDirective(const std::string &in);
|
||||
std::string splitDirectiveFull(const std::string &in_);
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#define VERSION_SPF "2346"
|
||||
#define VERSION_SPF "2350"
|
||||
|
||||
@@ -1920,6 +1920,14 @@ int SPF_InsertImplicitNone(void*& context, int winHandler, short* options, short
|
||||
return simpleTransformPass(SET_IMPLICIT_NONE, options, projName, folderName, output, outputSize, outputMessage, outputMessageSize);
|
||||
}
|
||||
|
||||
int SPF_RenameIncludes(void*& context, int winHandler, short* options, short* projName, short* folderName, short*& output,
|
||||
int*& outputSize, short*& outputMessage, int*& outputMessageSize)
|
||||
{
|
||||
MessageManager::clearCache();
|
||||
MessageManager::setWinHandler(winHandler);
|
||||
return simpleTransformPass(RENAME_INLCUDES, options, projName, folderName, output, outputSize, outputMessage, outputMessageSize);
|
||||
}
|
||||
|
||||
static inline void convertBackSlash(char *str, int strL)
|
||||
{
|
||||
for (int z = 0; z < strL; ++z)
|
||||
@@ -2636,6 +2644,8 @@ const wstring Sapfor_RunTransformation(const char* transformName_c, const char*
|
||||
retCode = SPF_RemoveDeadCode(context, winHandler, optSh, projSh, fold, output, outputSize, outputMessage, outputMessageSize);
|
||||
else if (whichRun == "SPF_InsertImplicitNone")
|
||||
retCode = SPF_InsertImplicitNone(context, winHandler, optSh, projSh, fold, output, outputSize, outputMessage, outputMessageSize);
|
||||
else if (whichRun == "SPF_RenameIncludes")
|
||||
retCode = SPF_RenameIncludes(context, winHandler, optSh, projSh, fold, output, outputSize, outputMessage, outputMessageSize);
|
||||
else
|
||||
{
|
||||
if (showDebug)
|
||||
|
||||
Reference in New Issue
Block a user