LLVM-IR еще нужно скомпилировать. Сделайте это, например, с clang -c -O3 -march=native -ffast-math
, затем разберите с помощью дизассемблера с синтаксисом NASM, например, Agner Fog's objconv
, который производит вывод, который можно собрать. Как разобрать двоичный исполняемый файл в Linux, чтобы получить код сборки? .
Compile -> disassemble не подходит для сохранения имен меток и символов.
Если вы имеете в виду рукописный LLVM-IR в поддерживаемом NASM от руки, то я думаю, что простота переноса будет зависеть от того, меньше ли число регистров, используемых кодом, чем 16; В x86-64 имеется только 15 целочисленных регистров общего назначения, не включая указатель стека.
Если LLVM-IR использует больше, вам необходимо решить, какие «переменные» следует пролить / перезагрузить в / из стека (и когда, если вы не просто оставляете некоторые переменные постоянно в стеке, а другие постоянно в регистрах).