Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Выкрасил, чтобы выбросить

https://github.com/kayuri/HNC/blob/6681fd80ae799de2fe7407d6b951fa11fe406e1c/HN/Optimizer/Rewriting.hs

Причесал старый оптимизатор, чтобы вспомнить, как он работает. Hoopl, сука, умный. Всё делает сам, но только если знаешь, как правильно просить. Я просил неправильно, и код, который я причёсывал, придётся выбросить.

Инлайнер функций, вызываемых один раз, просить нельзя, поскольку он требует движений по control flow graph в обе стороны. Количество вызовов и фактические параметры едут "вперёд" от места вызова к месту определения, формальные параметры едут тоже "вперёд" из определения функции в локальные определения (у меня так сделано). А тело функции едет уже "назад" из места определения к месту единственного вызова.

Так что надо декомпозировать на несколько маленьких оптимизаций. Начал с уменьшителя арности - его легче делать, чем инлайнер, как ни странно, т.к. меньше информации едет по CFG "назад". Зачатки "Передней" части в ArgumentValues.hs, "задняя" только в планах.
Tags: fp, hn0, programming
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments