REMOVE_DIST_ARRAYS_FROM_IO Handle assumed-size and assumed-shape arrays #64
Reference in New Issue
Block a user
Delete Branch "replace_io_arrays"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
небольшие мелочи я бы поправил. В остальном - это работает на большинстве тестов или же ошибки еще остались?
@@ -20,0 +34,4 @@static bool checkDynamicArray(DIST::Array *array){for (const auto &bounds : array->GetSizes())if (bounds.first == -1 || bounds.second == -1)А если массив определен в процедуре как А(N) допустим, по языку он вроде статический, то есть выделяется на стеке при входе в нее, но размеры не будут определены, если N это не константа, тут все нормально с этим ?
С этим всё окей, если этот массив не assumed size, то копия выделится с помощью allocate, как для assumed shape массивов. Позже можно будет выделить этот случай в отдельный, без allocate, если это будет валидно во всех случаях
Да, посмотрел, в таком случае легче без allocate, поправил
@@ -20,0 +63,4 @@{bool found = false;DIST::Array* array_p = getArrayFromDeclarated(st, arrayName);здесь потенциально тоже может быть nullptr
@@ -20,0 +68,4 @@auto place = *array_p->GetDeclInfo().begin();auto decl_file_name = place.first;SgFile::switchToFile(decl_file_name);без проверки
@@ -20,0 +89,4 @@found = true;}SgFile::switchToFile(currentFile);без проверки
@@ -499,0 +654,4 @@}// insert allocate(a_l(lbound(a, 1):ubound(a,1),...)) statementSgFile::switchToFile(filename);тут тоже
@@ -499,0 +686,4 @@auto *lcall = new SgFunctionCallExp(*lbound_symb);auto *rcall = new SgFunctionCallExp(*ubound_symb);for (auto *call : {lcall, rcall})это в с++17 входит ?
Да, это же просто std::initializer_list
@@ -499,0 +740,4 @@}}SgFile::switchToFile(filename);тут тоже
@Alexander_KS пока ещё не готово, есть фиксы, которые не коммитил
fdab7096d4to24cc61d72fВсё ещё есть проблема с тем, что массивы из модуля не помечаются как IO_PRIV, нужно отдебажить
Сейчас при вставке intent происходит копирование номера строки, поэтому SgStatement::getStatementByFileAndLine для объявлений массивов работает не так, как ожидается (возвращается не объявление, а
intent (in)).. и это ломает в том числе устранение конфликтов областей (src/ParallelizationRegions/resolve_par_reg_conflicts.cpp:999)
понятно, надо тогда подумать, как лучше это делать, видимо для intent придется отрицательный номер строки делать.
хорошо, а можешь скинуть простой пример. Сам посмотри, что там может быть, эти флаги устанавливаются в loop_analyzer.cpp вроде как в самом низу почти.
320a112beftof90142c8aff90142c8afto7c65ae981cДа, с твоим фиксом тоже нормально работает @Alexander_KS (я про IO_PRIV массивы)
кажется, что добавленной SgStatement::getStatementByFileAndLine вместо getDeclStatement будет достаточно.
7c65ae981cto280beb13ccТеперь на моих небольших примерах работает как надо, осталось разобраться с багрепортами