2012-03-23 3 views
6

Звон 3,0 онлайн демонстрационная страница http://llvm.org/demo/index.cgi предоставляет возможность для вывода LLVM C++ API код», представляющий LLVM-IR для программы ввода.Возможна автоматическая генерация кода llvm C++ api из LLVM-IR?

Является ли„производить ++ кода API“выходной параметр лязг LLVM C (и если да, то что это)?

Или это вариант LLVM инструмент (который один)?

можно ли сделать то же самое, но с LLVM-IR вход? в принципе я хотел бы видеть надлежащее LLVM C++ api, необходимые для создания конкретной заданной последовательности llvm-ir. Я хотел бы узнать назад на примере, а не вперед от документации.

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

Редактировать: OK Теперь я вижу на выходе на этой веб-странице, «сгенерированный llvm2cpp». Но я не могу найти этот инструмент в последних выпусках llvm, только в старых версиях, появился новый инструмент в версиях 2.9 и 3.0 для llvm2cpp?

ответ

8

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

+0

спасибо. Я только что нашел в примечаниях к версии 2.3 «Инструмент llvm2cpp был сложен в llc, используйте llc -march = cpp вместо llvm2cpp». BTW -march = C++ не работает в 3.0, но -march = cpp делает – Bogatyr

+0

К сожалению, lcc -march = cpp не работает с файлами с отладочными метаданными. Любое известное обходное решение? Моя цель состояла в том, чтобы увидеть C++ apis для добавления метаданных отладки, так что это showstopper. – Bogatyr

+0

@Bogatyr: это следует считать ошибкой. Не стесняйтесь заполнять PR в LLVM bugzilla небольшим репродуктором. –

1

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

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

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