Только не делайте этого. LLVM DAG разработан специально для регистрационных машин и имеет небольшое значение для компиляции машинного оборудования. Вместо этого вам понадобится пользовательский бэкэнд.
Один из подходов, я использовал для аналогичной задачи (LLVM IR -> стек мягкое ядро на ПЛИС) имеет следующий вид:
1) Из SSA (reg2mem)
2) Создание промежуточного дерева представление (т. е. сквот все одноразовые назначения регистров в деревья, если позволяет порядок). Это основное узкое место оптимизации, чем меньше у вас увольняются задания, тем лучше.
3) «Регистрировать распределение» для остальных регистров, которые все теперь представлены как распределенные по стеклу переменные (надеюсь, что ваш стековый компьютер ISA позволяет это).
4) Перевести дерево напрямую, без какого-либо выбора команды (вы можете сделать это на уровне LLVM IR вместо встроенного и настраиваемого прохода instcombine).
РЕДАКТИРОВАТЬ: Это нелегко сделать с помощью базы данных на основе DAG, поэтому ее никогда не использовали таким образом.
Ближайшая вещь, о которой я могу думать, заключается в том, чтобы использовать сервер DAG для генерации кода промежуточной регистрационной машины, а затем использовать проход для последующей обработки, чтобы, если это было возможно, повторно заказывать инструкции и вводить альтернативные переменные, принадлежащие стеку, в противном случае. I.e., представляют каждую из инструкций машины стека как псевдо-инструкцию с 1 или 2 аргументами регистра и 1 результат регистрации.
[родственный вопрос] (http://stackoverflow.com/questions/6203323/llvm-backend-for-stack-based-machine) – KolesnichenkoDS