diff --git a/src/Transformations/ReplaceArraysInIO/replace_dist_arrays_in_io.cpp b/src/Transformations/ReplaceArraysInIO/replace_dist_arrays_in_io.cpp index c40bdba..0989851 100644 --- a/src/Transformations/ReplaceArraysInIO/replace_dist_arrays_in_io.cpp +++ b/src/Transformations/ReplaceArraysInIO/replace_dist_arrays_in_io.cpp @@ -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(); @@ -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) return true; - int parent_var; - if (var == CONTROL_END && border_stats.find(stat->controlParent()->variant()) != border_stats.end()) return true; return false; } +FuncInfo* getCurrentFuncInfo(const vector& 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& regions, const map>& allFuncInfo, map>& SPF_messages, @@ -562,6 +572,8 @@ void replaceDistributedArraysInIO(vector& regions, if (SgFile::switchToFile(current_file_name) == -1) printInternalError(convertFileName(__FILE__).c_str(), __LINE__); + FuncInfo *current_func_info = NULL; + auto func_info_it = allFuncInfo.find(current_file_name); if (func_info_it == allFuncInfo.end()) printInternalError(convertFileName(__FILE__).c_str(), __LINE__); @@ -588,13 +600,12 @@ void replaceDistributedArraysInIO(vector& regions, { curr_stmt = lines.stats.first->GetOriginal(); end = lines.stats.second->GetOriginal()->lexNext(); + current_func_info = getCurrentFuncInfo(func_info_it->second, curr_stmt->lineNumber()); } map> need_replace; SgStatement* last_io_bound = NULL; - FuncInfo *current_func_info = NULL; - while (curr_stmt != end) { if (!curr_stmt) @@ -604,18 +615,7 @@ void replaceDistributedArraysInIO(vector& regions, if (var == PROC_HEDR || var == PROG_HEDR || var == FUNC_HEDR) { - current_func_info = NULL; - 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__); + current_func_info = getCurrentFuncInfo(func_info_it->second, curr_stmt->lineNumber()); curr_stmt = curr_stmt->lexNext(); while (curr_stmt && !isSgExecutableStatement(curr_stmt)) @@ -628,7 +628,7 @@ void replaceDistributedArraysInIO(vector& regions, break; } - if (ioReginBorder(curr_stmt, last_io_bound)) + if (ioRegionBorder(curr_stmt, last_io_bound)) { for (const auto& by_array_to_copy : need_replace) { diff --git a/src/Utils/version.h b/src/Utils/version.h index f4e1cca..4eb8abe 100644 --- a/src/Utils/version.h +++ b/src/Utils/version.h @@ -1,3 +1,3 @@ #pragma once -#define VERSION_SPF "2475" +#define VERSION_SPF "2476"