Обновление прохода удаления приватных переменных #18

Merged
Alexander_KS merged 3 commits from private_removing into master 2023-12-11 17:49:54 +00:00
Collaborator

Добавлена поддержка индексных выражений вида 2*i+1 в удаляемом массиве, удаление в тесте EP проходит успешно

bug bugreport_1701358632 - добавлена проверка, если функция, использующая удаляемый массив, не является пользовательской

bug bugreport_1699352305 - исправлена логика нахождения определений (добавлена поддержка случаев, когда в базовый блок приходит несколько определений, но можно выбрать одно нужное)

Добавлена поддержка индексных выражений вида 2*i+1 в удаляемом массиве, удаление в тесте EP проходит успешно bug bugreport_1701358632 - добавлена проверка, если функция, использующая удаляемый массив, не является пользовательской bug bugreport_1699352305 - исправлена логика нахождения определений (добавлена поддержка случаев, когда в базовый блок приходит несколько определений, но можно выбрать одно нужное)
gr_gusev added 1 commit 2023-12-03 16:43:56 +00:00
private_removing: fix bug bugreport_1701358632 - add check for build-in functions

private_removing: fix bug bugreport_1699352305 - update logic for finding definitions
Alexander_KS requested changes 2023-12-07 18:07:41 +00:00
@@ -97,26 +90,112 @@ static bool isArrayRefInVector(SgArrayRefExp* ref, const vector<SgArrayRefExp*>&
return false;
}
Owner

мне кажется, что эта функция уже есть в проекте:
getCoefsOfSubscript из expr_transform.h.
Она также выполняет предвычисления констант, посмотри пожалуйста, может быть лучше использовать ее?

мне кажется, что эта функция уже есть в проекте: getCoefsOfSubscript из expr_transform.h. Она также выполняет предвычисления констант, посмотри пожалуйста, может быть лучше использовать ее?
Author
Collaborator

Можно заменить на неё, но эта функция требует, чтобы ей передали имя переменной, относительно которой вычисляются коэффициенты выражения:
void getCoefsOfSubscript(pair<int, int> &retCoefs, SgExpression *exp, SgSymbol *doName)

я на имена переменных не опираюсь в преобразовании, поэтому их нужно откуда-то получать.
Можно просто перед вызовом функции получать из exp и подсовывать в вызов getCoefsOfSubscript.
Если так ок, то могу заменить на вызов getCoefsOfSubscript

Можно заменить на неё, но эта функция требует, чтобы ей передали имя переменной, относительно которой вычисляются коэффициенты выражения: void getCoefsOfSubscript(pair<int, int> &retCoefs, SgExpression *exp, SgSymbol *doName) я на имена переменных не опираюсь в преобразовании, поэтому их нужно откуда-то получать. Можно просто перед вызовом функции получать из exp и подсовывать в вызов getCoefsOfSubscript. Если так ок, то могу заменить на вызов getCoefsOfSubscript
Owner

а как не привязываться к циклу? у нас же замена связана с переменными цикла или с любыми переменными?. А что будет в случае a(i*i), a(i+k), a(i+k+2), где i,k - переменные цикла? по идее нужно проверять, что выражение точно соответствует тому, что нам нужно. Можно попробовать объединить и взять вычисление констант из той функции и оставить частичный обход у себя, если он проверят больше. Либо сделать проверку, что переменная цикла один раз встречается и что она та самая переменная, что нужна, и уже потом вызывать эту функцию для получения выражения. Также не ясно, что будет для многомерных циклов/массивов - будет ли там все корректно?

а как не привязываться к циклу? у нас же замена связана с переменными цикла или с любыми переменными?. А что будет в случае a(i*i), a(i+k), a(i+k+2), где i,k - переменные цикла? по идее нужно проверять, что выражение точно соответствует тому, что нам нужно. Можно попробовать объединить и взять вычисление констант из той функции и оставить частичный обход у себя, если он проверят больше. Либо сделать проверку, что переменная цикла один раз встречается и что она та самая переменная, что нужна, и уже потом вызывать эту функцию для получения выражения. Также не ясно, что будет для многомерных циклов/массивов - будет ли там все корректно?
Author
Collaborator

В случае a(i*i), a(i+k), a(i+k+2) моя функция вернёт false и подстановка не будет осуществляться, getCoefsOfSubscript вернёт <0, 0>. Замена связана с итерационными переменными, но я не думал учитывать их порядок в индексных выражениях (тут ещё обнаружил, что вообще проверку на них не добавил, это ошибка, исправлю).

Можно в качестве дополнительной проверки строить вектор итерационных переменных и, предполагая, что они должны быть в нужном порядке в индексных выражениях, получать коэффициенты через getCoefsOfSubscript. Но тогда обращение к массиву вида А(i + 1, 1) будет считаться некорректным - нет итерационной переменной во втором индексном выражении. Надо будет проверять, есть что если переменной нет и индексное выражение - это просто константа, то это ок ситуация. Наверно сделаю так

В случае a(i*i), a(i+k), a(i+k+2) моя функция вернёт false и подстановка не будет осуществляться, getCoefsOfSubscript вернёт <0, 0>. Замена связана с итерационными переменными, но я не думал учитывать их порядок в индексных выражениях (тут ещё обнаружил, что вообще проверку на них не добавил, это ошибка, исправлю). Можно в качестве дополнительной проверки строить вектор итерационных переменных и, предполагая, что они должны быть в нужном порядке в индексных выражениях, получать коэффициенты через getCoefsOfSubscript. Но тогда обращение к массиву вида А(i + 1, 1) будет считаться некорректным - нет итерационной переменной во втором индексном выражении. Надо будет проверять, есть что если переменной нет и индексное выражение - это просто константа, то это ок ситуация. Наверно сделаю так
Owner

хорошо

хорошо
Author
Collaborator

Обновил PR

Обновил PR
@@ -673,9 +800,26 @@ void removePrivates(SgFile* file, vector<Messages>& messages, int& countOfTransf
* PRIVATE_REMOVING_ANALYSIS block of functions: *
* ********************************************* */
Owner

кодировка файла не позволяет прочитать русский комментарий тут (а может быть и в проекте тоже)

кодировка файла не позволяет прочитать русский комментарий тут (а может быть и в проекте тоже)
Owner

оказывается не нажал на кнопку, подтверждающую начало рецензии...

оказывается не нажал на кнопку, подтверждающую начало рецензии...
gr_gusev force-pushed private_removing from 30b2248e39 to 962b89f502 2023-12-11 16:46:33 +00:00 Compare
Alexander_KS merged commit d360bf5a43 into master 2023-12-11 17:49:54 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Alexander_KS/SAPFOR#18