diff --git a/src/Transformations/ReplaceArraysInIO/replace_dist_arrays_in_io.cpp b/src/Transformations/ReplaceArraysInIO/replace_dist_arrays_in_io.cpp index 5ac5afe..0989851 100644 --- a/src/Transformations/ReplaceArraysInIO/replace_dist_arrays_in_io.cpp +++ b/src/Transformations/ReplaceArraysInIO/replace_dist_arrays_in_io.cpp @@ -541,6 +541,18 @@ static bool ioRegionBorder(SgStatement* stat, SgStatement* last_io_bound) 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, @@ -560,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__); @@ -586,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) @@ -600,21 +613,9 @@ void replaceDistributedArraysInIO(vector& regions, auto var = curr_stmt->variant(); - // TODO: does not work with user 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))