Преобразование абстрактного синтаксического выражения в базовый блок SSA влечет за собой выписывание всех операций в выражении в линейной последовательности, например. x * y + 1
преобразуется в список операций, содержащих *
и +
в этом порядке.Включая атомные значения в базовые блоки
Можно ли включать в список операций переменные и литеральные выборки? То есть должен ли приведенный выше список длины 2 или 5?
С одной стороны, загрузка значения глобальной переменной или константы в регистр - это операция, которая в конечном итоге должна быть запланирована.
С другой стороны, решение о том, какие значения будут проживать в регистрах, обычно делается во время или после преобразования из формы SSA.
С третьей стороны, включая атомные значения в линейной последовательности, вы можете отвечать на такие вопросы, как «какие глобальные переменные выполняет эта функция», путем итерации через базовые блоки и операции, а также для повторения аргументов каждой операции ,
Есть ли другие соображения, которые мне не хватает?
Чтобы уточнить: имена локальных переменных обычно исчезают в SSA (им нет необходимости, вы можете просто использовать прямой указатель на операцию, которая сгенерировала значение). Я думаю о вещах, которым по-прежнему нужны имена - константы, имена глобальных переменных, локальные переменные, чей адрес был взят и т. Д.