Можно ли автоматически генерировать API-код llvm C++ из LLVM-IR?
Онлайновая демонстрационная страница clang 3.0 http://llvm.org/demo/index.cgi предоставляет возможность вывода кода API LLVM C++, "представляющего LLVM-IR для входной программы.
Вывод "производить код LLVM C++ API" является опцией clang (и если да, то что это)?
Или это вариант инструмента llvm (какой)?
Можно ли сделать то же самое, но с входа LLVM-IR? По сути, я хотел бы видеть правильные вызовы API-интерфейсов llvm C++, необходимые для создания конкретной заданной последовательности llvm-ir. Я хотел бы учиться задом наперед, а не вперёд из документации.
Страницы справочника и --help и --help-hidden для clang, llvm-as и llvm-dis не показывают ничего очевидного.
редактировать: хорошо, теперь я вижу в выводе на этой веб-странице, "сгенерированный llvm2cpp". Но я не могу найти этот инструмент в последних выпусках llvm, только в старых выпусках, есть новый инструмент в 2.9 и 3.0, принятый для llvm2cpp?
2 ответа
Да. Бэкэнд C++ - это инструмент, который делает это. Попробуйте "llc -march=cpp foo.bc"
Я столкнулся с точно такой же проблемой и увидел, что CPPBuilder упоминался пару раз. К сожалению, этот подход больше не работает в последних версиях LLVM, так как CPPBackend был удален между 3.8 и 3.9.
Если вам нужен бэкэнд CPP, вы (i) должны сконфигурировать llvm и добавить cppbackend в -DLLVM_TARGETS_TO_BUILD во время начальной настройки и (ii) запустить llvm <= 3.8.
Эта функция была удалена, потому что она не использовала IRBuilder, и почти никто не использовал ее. Мое решение состояло в том, чтобы полагаться на старую версию, чтобы вдохновиться, а затем реализовать ее самостоятельно.