[ssa] [дальнейшие размышления]

Spiridonov Alexander spiridoncha at gmail.com
Mon Apr 9 02:35:52 MSK 2018


On Mon, Apr 09, 2018 at 02:18:41AM +0300, Максим Иванов wrote:
> Я так подозреваю, нам ещё нужно, так называемое, "эталонное решение". Точно
> так же подозреваю, что мы заморочимся с ним больше всего.
> 
> Бегло оглянув возможности вот какие выводы сделал я (может они уже раньше
> были сделаны и я пропустил, так что извиняйте):
> 
> 1. У нас есть штука ssa(Fn*), которая строит сокращённую(?) ssa-форму.
> 2. Так же у нас есть штука checkssa(Fn*), которая, судя по названию,
> проверяет корректность формы, но у меня не получилось вызвать её без
> сегфолта. В комментарии к checkssa написано require use и ssa. Это значит,
> что чтобы проверить верность ssa-формы, надо её насильно строить? Это очень
> странно, и, я думаю, мы не сможем это использовать.
Почему нет? если промежуточное представление корректно, то мы всегда
построим ssa, в таком случае мы просто по сути имеем функцию которая
нахаляву проверит нам корректность.

Потраю завтра заиспользовать её тогда.
> 3. По сути выполнение задания состоит в переименовывании и добавлении
> переменных и добавлении новых функций.
> Получается, что к выполнению задания есть два очевидных подхода:
> 1)работать с внутренним представлением, а потом использовать printfn,
> которая выводит текстовое представление в поток. Проблема тут состоит в
> том, что переменные хранятся достаточно особым способом, а так же структура
> для переменной содержит много полей, значения которых мне (может только
> мне?) неизвестны. Так что это сложно и нет гарантии, что при преводе в
> текст ничего не покрашится.
Да, надо просто глубже копнуть в qbe
> 2) Обрабатывать блоки и писать в поток, но по сути это то же самое, что
> свой парсер написать, что очень глупо, когда рядом уже лежит парсер. Так
> что это тоже сложно и нет гарантии, что всё не покрашится.
Да, это жоско, не надо так
> 4. Если просто считать программу, а затем записать её с помощью printfn, то
> ввод и вывод не будут идентичны:
> 1)ret заменяется на ret<тип возвращаемого значения> (соответственно из
> сигнатуры функции возвращаемое значение убирается)
> 2)вызов функции с аргументами типа print(w a, l b), заменяется на несколько
> строчек типа argw a; arglb; print.
> Но самое интересное, что эти преобразования не воспринимаются парсером в
> обратную сторону.
> То есть если взять программу на qbe, загнать её в программу, в которой
> сделать printfn, а затем результат снова загнать в программу, получим
> unresolved reference или что-то типа этого (не помню точно). Это
> подсказывает мне, что первый вариант из предыдущего пункта автоматом
> отпадает, а второй слишком геморный.
> 
> Вот такие пироги
Воу, вот с этим завтра тогда при личной встрече поразбираемся(звучит
больно)

> _______________________________________________
> ssa mailing list
> ssa at compilers.ispras.ru
> https://compilers.ispras.ru/cgi-bin/mailman/listinfo/ssa


-- 
С уважением,
Спиридонов Александр.


More information about the ssa mailing list