Обновить 5. Добавление нового прохода в SAPFOR
@@ -1,7 +1,7 @@
|
||||
В данном разделе описан алгоритм создания прохода (фазы анализа). [По данной ссылке](https://docs.google.com/document/d/1QQfpq7Xic5PDhFt5ESUUIcl_7jn1TFIGY5zznsvmbis/) можно изучить текущее описание некоторых идей и алгоритмов SAPFOR. Для добавления нового прохода, необходимо его объявить, добавить данному проходу зависимости и описать его в основном цикле запуска проходов.
|
||||
|
||||
- Для объявления прохода, необходимо добавить в файл `Sapfor.h` в конец **enum passes** (и до **EMPTY_PASS**) название данного прохода, а также добавить строку его описания в `const char *passNames`.
|
||||
- Зависимости проходов содержатся в файле `PassManager.h`. Зависимости задаются в функции `InitPassesDependencies()`. Если проход не имеет зависимости от других проходов, то данный пункт можно пропустить. Например, `Pass(А) <= Pass(B)` означает, что проход B зависит от прохода A, то есть проход B автоматически запустит проход А перед своим выполнением. `List <= Pass` означает, что проход зависит от всех проходов из списка. `Pass (А) <= List` означает, что каждый проход из списка зависит от прохода А. `List (A) << List (B)` (TODO: поменять на <=) означает, что каждый проход из списка B зависит от всех проходов из списка А.
|
||||
- Зависимости проходов содержатся в файле `PassManager.h`. Зависимости задаются в функции `InitPassesDependencies()`. Если проход не имеет зависимости от других проходов, то данный пункт можно пропустить. Например, `Pass(А) <= Pass(B)` означает, что проход B зависит от прохода A, то есть проход B автоматически запустит проход А перед своим выполнением. `List <= Pass` означает, что проход зависит от всех проходов из списка. `Pass (А) <= List` означает, что каждый проход из списка зависит от прохода А. `List (A) <= List (B)` означает, что каждый проход из списка B зависит от всех проходов из списка А.
|
||||
- Далее необходимо создать функцию для прохода и вставить его в функции запуска проходов. Для запуска проходов используются функции **runPass** и **runAnalysis**.
|
||||
- Первая функция позволяет описать сложное поведение прохода, которое отличается от **default** запуска в **switch**. Пример такого прохода - FILL_PAR_REGIONS_LINES: после выполнения данного прохода необходимо выполнить какие-то дополнительные действия.
|
||||
- Вторая функция запускает анализ в два этапа. Проход не обязательно может иметь два этапа обработки, может присутствовать только первый, либо только второй.
|
||||
|
||||
Reference in New Issue
Block a user