Как анализ живости значений спасает регистры в компиляторе purple-garden
An ode to livelyness analysis; SSA to registers
Автор рассказывает, как встроил анализ живости (liveness analysis) в компилятор своего языка purple-garden. Виртуальные регистры в SSA-форме получают интервалы жизни (lo, hi), после чего распределитель регистров может отображать их на ограниченный набор аппаратных регистров x86 или слоты стека. Показан конкретный пример IR, таблица времён жизни и компактная реализация на Rust — без phi-узлов, только параметры блоков и терминаторы.
Регистровый аллокатор — это назначение неограниченного количества виртуальных регистров ограниченному набору аппаратных ресурсов: регистрам общего назначения, регистрам с плавающей точкой и стеку.