Подтвердить что ты не робот

Сгенерировать код API LLVM С++ в качестве бэкэнд

На странице Online LLVM demo появилась возможность генерировать код API LLVM С++ в качестве исходного кода из исходного кода. Однако эта демонстрационная страница теперь отключена. Мне было интересно, как мы можем сделать это сами, используя доступные инструменты LLVM.

Я попробовал следующее

clang++ -c -emit-llvm input.cpp -o input.ll
llc -march=cpp -o input.ll.cpp input.ll

который дает следующую ошибку:

llc: error: invalid target 'cpp'.

Я использую LLVM/Clang версии 3.2.

4b9b3361

Ответ 1

LLVM С++ backend должен быть включен во время настройки при создании LLVM. Он включен по умолчанию в сборке configure (autotools), но не в сборке CMake при построении на Windows. Вы можете включить его, установив соответствующие флаги при настройке с помощью CMake. Подробнее см. эту страницу.

Цитата:

LLVM_TARGETS_TO_BUILD: STRING    Разделительные таблицы, разделенные точкой с запятой, или все для построения всех целей. Деликатный случай. Для Visual С++ по умолчанию используется X86. На другие случаи по умолчанию для всех. Пример: -DLLVM_TARGETS_TO_BUILD = "X86, PowerPC".

Забастовкa >

UPDATE

Так как version 3.9 CppBackend больше не является допустимой мишенью. Они удалили из своего кода, поскольку сгенерированный код представлял несколько проблем.

Проверить это коммит

Remove bit-rotten CppBackend.

This backend was supposed to generate C++ code which will re-construct
the LLVM IR passed as input. This seems to me to have very marginal
usefulness in the first place.

However, the code has never been updated to use IRBuilder, which makes
its current value negative -- people who look at the output may be
steered to use the *wrong* C++ APIs to construct IR.

Furthermore, it generated code that doesn't compile since at least
2013.

Differential Revision: http://reviews.llvm.org/D19942

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8

Ответ 2

К сожалению, это больше не возможно в более поздних версиях LLVM. Связанное сообщение коммита объясняет это довольно хорошо.

Как вы можете видеть в следующем фиксации, Удалить бит-гнилую CppBackend, сгенерированный код будет показывать проблемы.

commit 257fabb18605265a79397d35dd79a3973760ffaf
Author: ---
Date:   Thu May 5 14:35:40 2016 +0000

Remove bit-rotten CppBackend.

This backend was supposed to generate C++ code which will re-construct
the LLVM IR passed as input. This seems to me to have very marginal
usefulness in the first place.

However, the code has never been updated to use IRBuilder, which makes
its current value negative -- people who look at the output may be
steered to use the *wrong* C++ APIs to construct IR.

Furthermore, it generated code that doesn't compile since at least
2013.

Differential Revision: http://reviews.llvm.org/D19942

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8