Возможно ли автоматически генерировать API-код llvm c ++ из LLVM-IR? - PullRequest
6 голосов
/ 23 марта 2012

Онлайновая демонстрационная страница clang 3.0 http://llvm.org/demo/index.cgi предоставляет возможность вывода кода API LLVM C ++, "представляющего LLVM-IR для входной программы.

Вывод" создать код API LLVM C ++ "опция лязга (и если да, то что это)?

Или это опция инструмента llvm (какая именно)?

Можно ли сделать то же самое, но из LLVM-IRВ основном, я хотел бы видеть правильные вызовы API-интерфейсов llvm c ++, необходимые для создания конкретной заданной последовательности llvm-ir. Я хотел бы изучать в обратном порядке на примере, а не вперед из документации.

Страницы руководстваи --help и --help-hidden для clang, llvm-as и llvm-dis не показывают ничего очевидного.

edit: ОК, теперь я вижу в выводе на этой веб-странице, "сгенерированныйllvm2cpp ". Но я не могу найти этот инструмент в последних выпусках llvm, только в старых выпусках, есть новый инструмент в 2.9 и 3.0, принятый для llvm2cpp?

Ответы [ 2 ]

9 голосов
/ 23 марта 2012

Да. Бэкэнд C ++ - это инструмент, который делает это. Попробуйте "llc -march = cpp foo.bc"

2 голосов
/ 24 января 2017

Я столкнулся с точно такой же проблемой и видел, как CPPBuilder упоминался пару раз. К сожалению, этот подход больше не работает в последних версиях LLVM, поскольку CPPBackend был удален между 3.8 и 3.9.

Если вы хотите, чтобы бэкэнд CPP был (i), вам необходимо настроить llvm и добавить cppbackend в -DLLVM_TARGETS_TO_BUILD во время начальной настройки и (ii) запустить llvm <= 3.8. </p>

Функция была удалена, потому что она не использовала IRBuilder, и почти никто не использовал ее. Мое решение состояло в том, чтобы полагаться на старую версию, чтобы вдохновиться, а затем реализовать ее самостоятельно.

...