[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