Я вернусь к понятному человеку исходному языку? - PullRequest
14 голосов
/ 03 марта 2011

Есть ли простой способ перейти от llvm ir к рабочему исходному коду?

В частности, я хотел бы начать с некоторого простого кода C ++, который просто изменяет POD (в основном массивы целых чисел, числа с плавающей запятой и т. Д.), Конвертирует его в llvm ir, выполняет простой анализ и перевод и затем преобразует его обратно. в код C ++?

На самом деле неважно, какие из имен искажены, я просто хотел бы иметь возможность взломать источник перед выполнением машинно-зависимых оптимизаций.

Ответы [ 3 ]

31 голосов
/ 04 марта 2011

Есть несколько вариантов на самом деле.2, которые вам, вероятно, будут интересны, это -march=c и -march=cpp, которые являются опциями для llc.

Run:

llc -march=c -o code.c code.ll

Это преобразует битовый код LLVM в code.ll вернуться к C и положить его в code.c.

Также:

llc -march=cpp -o code.cpp code.ll

Это отличается от механизма вывода C.На самом деле он напишет код C ++, который можно запустить, чтобы восстановить ИК.Я использую этот личный код для встраивания LLVM IR в программу без необходимости разбора файлов битовых кодов или чего-либо еще.

-march=cpp имеет больше опций, которые вы можете видеть с llc --help, например, -cppgen=, который управляет тем, какБольшая часть ИК-выхода C ++ восстанавливает.

13 голосов
/ 23 ноября 2016

CppBackend был удален. У нас нет опций -march = cpp и -march = c с 2016-05-05, r268631.

7 голосов
/ 03 марта 2011

Здесь есть проблема ... может быть невозможно легко представить IR обратно на язык.

Я имею в виду, вы, вероятно, сможете получить некоторое представление, но оно может быть меньше читабельным.

Проблема в том, что IR не занимается высокоуровневой семантикой, а без нее ...

Я бы лучше посоветовал вам научиться читать ИК. Я могу прочитать это немного без особых усилий, и я далеко не специалист по llvm.

В противном случае вы можете код C с ИК. Он не будет больше похож на ваш код на C ++, но вы, возможно, будете чувствовать себя лучше без узлов ssa и phi.

...