fixed different names of same arrays in common
This commit is contained in:
@@ -206,7 +206,9 @@ void InitPassesDependencies(map<passes, vector<passes>> &passDepsIn, set<passes>
|
||||
|
||||
Pass(DEF_USE_STAGE1) <= Pass(DEF_USE_STAGE2);
|
||||
|
||||
list({ VERIFY_DVM_DIRS, PRIVATE_CALL_GRAPH_STAGE1, PRIVATE_CALL_GRAPH_STAGE2, MACRO_EXPANSION, CONVERT_ASSIGN_TO_LOOP, DEF_USE_STAGE1, DEF_USE_STAGE2, FILL_PARALLEL_REG_IR, VERIFY_COMMON, FILL_COMMON_BLOCKS, CALL_GRAPH_IR }) <= list({ SUBST_EXPR, SUBST_EXPR_RD, BUILD_IR });
|
||||
list({ VERIFY_DVM_DIRS, VERIFY_COMMON, FILL_COMMON_BLOCKS, PRIVATE_CALL_GRAPH_STAGE1, PRIVATE_CALL_GRAPH_STAGE2, MACRO_EXPANSION, CONVERT_ASSIGN_TO_LOOP, DEF_USE_STAGE1, DEF_USE_STAGE2, FILL_PARALLEL_REG_IR, CALL_GRAPH_IR }) <= list({ SUBST_EXPR, SUBST_EXPR_RD, BUILD_IR });
|
||||
|
||||
Pass(VERIFY_COMMON) <= Pass(FILL_COMMON_BLOCKS);
|
||||
|
||||
Pass(BUILD_IR) <= Pass(SUBST_EXPR) <= Pass(SUBST_EXPR_AND_UNPARSE);
|
||||
|
||||
@@ -227,7 +229,7 @@ void InitPassesDependencies(map<passes, vector<passes>> &passDepsIn, set<passes>
|
||||
|
||||
list({ VERIFY_OPERATORS, VERIFY_ENDDO, VERIFY_INCLUDES, PREPROC_SPF, PREPROC_ALLOCATES, GET_ALL_ARRAY_DECL, GCOV_PARSER }) <= list({ CALL_GRAPH, MACRO_EXPANSION, DEF_USE_STAGE1 });
|
||||
|
||||
list({ VERIFY_OPERATORS, VERIFY_ENDDO, VERIFY_INCLUDES, PREPROC_ALLOCATES, FILL_PARALLEL_REG_IR }) <= list({ GET_ALL_ARRAY_DECL, FILL_COMMON_BLOCKS, PARSE_OMP_DIRS }) <= Pass(PREPROC_SPF);
|
||||
list({ VERIFY_OPERATORS, VERIFY_ENDDO, VERIFY_INCLUDES, PREPROC_ALLOCATES, FILL_PARALLEL_REG_IR }) <= list({ FILL_COMMON_BLOCKS, GET_ALL_ARRAY_DECL, PARSE_OMP_DIRS }) <= Pass(PREPROC_SPF);
|
||||
|
||||
Pass(CHECK_PAR_REG_DIR) <= Pass(FILL_PARALLEL_REG_IR);
|
||||
|
||||
|
||||
@@ -953,9 +953,21 @@ DIST::Array* getArrayFromDeclarated(SgStatement *st, const string &arrayName)
|
||||
for (auto itSet = it->second.begin(); itSet != it->second.end() && !found; ++itSet)
|
||||
{
|
||||
auto itD = declaredArrays.find(*itSet);
|
||||
if (itD != declaredArrays.end())
|
||||
if (itD->second.first->GetShortName() == arrayName)
|
||||
found = itD->second.first;
|
||||
if (itD != declaredArrays.end())
|
||||
{
|
||||
DIST::Array* array = itD->second.first;
|
||||
if (array->GetLocation().first == DIST::l_COMMON)
|
||||
{
|
||||
auto symb = array->GetDeclSymbol(make_pair(st->fileName(), st->lineNumber()));
|
||||
if (symb && symb->identifier() == arrayName)
|
||||
found = array;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (array->GetShortName() == arrayName)
|
||||
found = array;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return found;
|
||||
@@ -1264,6 +1276,32 @@ static SgExpression* isInCommon(const vector<SgExpression*> &commonBlocks, const
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//all common block in project
|
||||
extern map<string, CommonBlock*> commonBlocks;
|
||||
static string getCommonNameOnPos(const string& name, const int commonPos)
|
||||
{
|
||||
if (commonBlocks.size() == 0)
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
|
||||
auto it = commonBlocks.find(name);
|
||||
if (it == commonBlocks.end())
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
|
||||
auto inPos = it->second->getGroupedVars().find(commonPos);
|
||||
if (inPos == it->second->getGroupedVars().end())
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
|
||||
set<string> namesOnPos;
|
||||
|
||||
for (auto& var : inPos->second)
|
||||
namesOnPos.insert(var->getName());
|
||||
|
||||
if (namesOnPos.size() == 0)
|
||||
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
||||
|
||||
return *namesOnPos.begin();
|
||||
}
|
||||
|
||||
static map<tuple<string, string, int>, tuple<int, string, string>> tableOfUniqNames;
|
||||
tuple<int, string, string> getUniqName(const map<string, vector<SgExpression*>> &commonBlocks, SgStatement *decl, SgSymbol *symb)
|
||||
{
|
||||
@@ -1272,6 +1310,7 @@ tuple<int, string, string> getUniqName(const map<string, vector<SgExpression*>>
|
||||
int commonPos = 0;
|
||||
|
||||
SgExpression *foundCommon = NULL;
|
||||
string symbCommn = "";
|
||||
|
||||
SgStatement *declCP = decl->controlParent();
|
||||
// find symbol in parameter list of functions
|
||||
@@ -1307,6 +1346,7 @@ tuple<int, string, string> getUniqName(const map<string, vector<SgExpression*>>
|
||||
if (foundCommon)
|
||||
{
|
||||
inCommon = true;
|
||||
symbCommn = getCommonNameOnPos(common.first, commonPos);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1314,7 +1354,7 @@ tuple<int, string, string> getUniqName(const map<string, vector<SgExpression*>>
|
||||
|
||||
tuple<int, string, string> retVal;
|
||||
if (inCommon)
|
||||
retVal = make_tuple(commonPos, string("common_") + getCommonName(foundCommon), string(symb->identifier()));
|
||||
retVal = make_tuple(commonPos, string("common_") + getCommonName(foundCommon), symbCommn);
|
||||
else
|
||||
retVal = make_tuple(decl->lineNumber(), string(decl->fileName()), string(symb->identifier()));
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#define VERSION_SPF "2453"
|
||||
#define VERSION_SPF "2454"
|
||||
|
||||
Reference in New Issue
Block a user