|
|
|
@@ -504,7 +504,7 @@ static void replaceArrayInFragment(SgSymbol* replace_symb,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static bool ioReginBorder(SgStatement* stat, SgStatement* last_io_bound)
|
|
|
|
static bool ioRegionBorder(SgStatement* stat, SgStatement* last_io_bound)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto var = stat->variant();
|
|
|
|
auto var = stat->variant();
|
|
|
|
|
|
|
|
|
|
|
|
@@ -535,14 +535,24 @@ static bool ioReginBorder(SgStatement* stat, SgStatement* last_io_bound)
|
|
|
|
if (last_io_bound && last_io_bound->lastNodeOfStmt() && last_io_bound->lastNodeOfStmt() == stat)
|
|
|
|
if (last_io_bound && last_io_bound->lastNodeOfStmt() && last_io_bound->lastNodeOfStmt() == stat)
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
int parent_var;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (var == CONTROL_END && border_stats.find(stat->controlParent()->variant()) != border_stats.end())
|
|
|
|
if (var == CONTROL_END && border_stats.find(stat->controlParent()->variant()) != border_stats.end())
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FuncInfo* getCurrentFuncInfo(const vector<FuncInfo*>& fileFuncInfo, int line)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
for (auto* func : fileFuncInfo)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (func->linesNum.first <= line && line <= func->linesNum.second)
|
|
|
|
|
|
|
|
return func;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
|
|
|
|
void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
|
|
|
|
const map<string, vector<FuncInfo*>>& allFuncInfo,
|
|
|
|
const map<string, vector<FuncInfo*>>& allFuncInfo,
|
|
|
|
map<string, vector<Messages>>& SPF_messages,
|
|
|
|
map<string, vector<Messages>>& SPF_messages,
|
|
|
|
@@ -562,6 +572,8 @@ void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
|
|
|
|
if (SgFile::switchToFile(current_file_name) == -1)
|
|
|
|
if (SgFile::switchToFile(current_file_name) == -1)
|
|
|
|
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
|
|
|
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FuncInfo *current_func_info = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
auto func_info_it = allFuncInfo.find(current_file_name);
|
|
|
|
auto func_info_it = allFuncInfo.find(current_file_name);
|
|
|
|
if (func_info_it == allFuncInfo.end())
|
|
|
|
if (func_info_it == allFuncInfo.end())
|
|
|
|
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
|
|
|
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
|
|
|
@@ -588,13 +600,12 @@ void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
|
|
|
|
{
|
|
|
|
{
|
|
|
|
curr_stmt = lines.stats.first->GetOriginal();
|
|
|
|
curr_stmt = lines.stats.first->GetOriginal();
|
|
|
|
end = lines.stats.second->GetOriginal()->lexNext();
|
|
|
|
end = lines.stats.second->GetOriginal()->lexNext();
|
|
|
|
|
|
|
|
current_func_info = getCurrentFuncInfo(func_info_it->second, curr_stmt->lineNumber());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
map<SgSymbol*, set<SgStatement*>> need_replace;
|
|
|
|
map<SgSymbol*, set<SgStatement*>> need_replace;
|
|
|
|
SgStatement* last_io_bound = NULL;
|
|
|
|
SgStatement* last_io_bound = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
FuncInfo *current_func_info = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (curr_stmt != end)
|
|
|
|
while (curr_stmt != end)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (!curr_stmt)
|
|
|
|
if (!curr_stmt)
|
|
|
|
@@ -604,18 +615,7 @@ void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
|
|
|
|
|
|
|
|
|
|
|
|
if (var == PROC_HEDR || var == PROG_HEDR || var == FUNC_HEDR)
|
|
|
|
if (var == PROC_HEDR || var == PROG_HEDR || var == FUNC_HEDR)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
current_func_info = NULL;
|
|
|
|
current_func_info = getCurrentFuncInfo(func_info_it->second, curr_stmt->lineNumber());
|
|
|
|
for (auto *func_info : func_info_it->second)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (func_info->funcName == curr_stmt->symbol()->identifier())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
current_func_info = func_info;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!current_func_info)
|
|
|
|
|
|
|
|
printInternalError(convertFileName(__FILE__).c_str(), __LINE__);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
curr_stmt = curr_stmt->lexNext();
|
|
|
|
curr_stmt = curr_stmt->lexNext();
|
|
|
|
while (curr_stmt && !isSgExecutableStatement(curr_stmt))
|
|
|
|
while (curr_stmt && !isSgExecutableStatement(curr_stmt))
|
|
|
|
@@ -628,7 +628,7 @@ void replaceDistributedArraysInIO(vector<ParallelRegion*>& regions,
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (ioReginBorder(curr_stmt, last_io_bound))
|
|
|
|
if (ioRegionBorder(curr_stmt, last_io_bound))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for (const auto& by_array_to_copy : need_replace)
|
|
|
|
for (const auto& by_array_to_copy : need_replace)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|