[ssa] [я столкнулся с проблемами]
Spiridonov Alexander
spiridoncha at gmail.com
Mon Apr 16 03:46:40 MSK 2018
Короче мне дико не нравится идея править qbe,
она предназначена чтоб создавать из IR исполняемые файлы,
а не работать на уровне source2source, мне кажется что мы просто
зароемся если захотим дополнить таким функционалом qbe.
Если конкретнее(это только на первый взгляд):
* Нужно выводить не только функцию, но и типы используемые в ней
https://c9x.me/compile/doc/il.html#Aggregate-Types (я не
нашёл ничего готового в qbe для этого)
* Нужно выводить не только функцию, но и определяемые данные
https://c9x.me/compile/doc/il.html#Data (я не
нашёл ничего готового в qbe для этого)
* Нужно переписать часть отвечающую за вывод call
https://c9x.me/compile/doc/il.html#Call
* Ну и по-мелочи ещё всякие retw и т.п.
В общем тут вся боль от того чтоб адаптировать инструмент для целей, для
которых он не предназначен.
Предлагаю упростить задачу и
не работать в предположении что тот кто пишет задачу должен в качестве
вывода предоставить нам годный к парсингу IR.
Предлагаю в качестве output задачи выдавать информацию в примерно таком
формате:
@block_name_gl:
phi:
* имя переменной в блоке block_name_gl, которая до построения ssa
была на месте, где после построения будет использование
переменной определяемой phi(ёпрст, как это называется правильно??)
* список вида: @block_name0, at block_name1
блоков, откуда приходят определения переменной из первого пункта
до построения ssa
Например:
input file:
data $fmt = { b "%d", b 0 }
export function w $main() {
@start
%p =l alloc4 4
%t =w call $scanf(l $fmt, l %p)
%x =w loadw %p
@loop
%x =w sub %x, 1
jnz %x, @loop, @end
@end
ret %x
}
output file:
@loop:
phi:
%x
@start, at loop
В таком виде при решении задачи нужно будет по сути только определить
куда нужно вставлять фи-функции для преобразования в усечённую
ssa.
Хотелось бы услышать кто что думает по этому поводу.
P.S.
Все задачи которые у нас были на ejudge, были именно такие; может кроме
последнего, я подзабил на него, а условие уже посмотреть не дают :(
Не вывести годный IR, а вывести инфу по базовым блокам.
Возможно и нам стоит так поступить.
--
С уважением,
Спиридонов Александр.
More information about the ssa
mailing list