Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Допилил инлайнер аргументов. Теперь проходит тест c id.hn - успешно инлайнит его в
hnMain = {
  x = 5
  print (sum x x)
}
Раньше он инлайнил 5 как ни в чём ни бывало, что было приемлемо в данном конкретном случае, но в общем случае плодило magic numbers, копипасту в выходном коде, или же выдавало банально некорректный код. Ну, из-за неправильной структуры фактов, вы помните.

Запустив сюиту с новым инлайнером, обнаружил, что 4 теста, которые раньше проходили, имели ошибку в expected value - был тот же дефект с избыточным инлайнингом, но я его не замечал и думал что было соптимизировано как надо. Исправил, перенеся тесты в папку `opt/failing`, так что теперь они не запускаются.

Из 89 тестов, проходящих со старым инлайнером, с пустым фиктивным инлайнером падает 56, а с новым инлайнером - 13. 13/56 = 22%, так что помечать падающие тесты как падающие и переключаться на новый инлайнер по умолчанию рано - надо пилить.

Upd: в попытке починить оптимизацию intfunc_simple.hn новым инлайнером в очередной раз поменял представление фактов. Теперь это
type AFType = (WithTopAndBot [WithTopAndBot ExpressionFix], WithTopAndBot ExpressionFix)

type ArgFact = (AFType, M.Map Label AFType)
При первом запуске обнаружил, что тест, который предполагалось починить, демонстрирует новую проблему, но зато фейлится на два теста меньше, чем раньше. Я даже не знаю, починилось ли 2 теста или же починилось n, но при этом поломалось n - 2. В любом случае - коммит!
Tags: hn0
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.
  • 8 comments