Включая атомные значения в базовые блоки

Преобразование выражения дерева абстрактного синтаксиса в базовый блок SSA влечет за собой запись всех операций в выражении в линейной последовательности, например x * y + 1 преобразуется в список операций, содержащих * а также + в этой последовательности.

Обычно ли включить переменные и буквенные выборки в список операций? Т.е. следует ли из приведенного выше составить список длиной 2 или 5?

С одной стороны, загрузка значения глобальной переменной или константы в регистр - это операция, которая в конечном итоге должна быть запланирована.

С другой стороны, решение о том, какие значения будут жить в регистрах, обычно делается во время или после преобразования из формы SSA.

С другой стороны, включение атомарных значений в линейную последовательность означает, что вы можете отвечать на вопросы типа "к каким глобальным переменным эта функция имеет доступ", выполняя итерации по основным блокам и операциям, вместо того, чтобы выполнять итерации по аргументам каждой операции.

Есть ли другие соображения, которые я пропускаю?

Для пояснения: имена локальных переменных обычно исчезают в SSA (в них нет необходимости, вы можете просто использовать прямой указатель на операцию, которая сгенерировала значение). Я думаю о вещах, которым все еще нужны имена - константы, имена глобальных переменных, локальные переменные, чей адрес был взят и т. Д.

1 ответ

Решение

Это зависит от того, что вы хотите, чтобы ваш оптимизатор сделал.

Если вы хотите иметь большую свободу в планировании выборок операндов (возможно, потому что они дорогие), вы захотите сделать их явными, чтобы вы могли ими манипулировать. (На старых машинах Cray были регистры данных и адресов: вы могли загрузить регистр адресов и начать выборку из регистра данных, а затем заняться чем-то другим, и, наконец, коснуться регистра данных, когда нет других вычислений, которые вы можете запланировать).

Если вам все равно, вы можете смоделировать весь базовый блок как один узел SSA с большим количеством входов и выходов.

Другие вопросы по тегам