Генерировать код API LLVM C++ в качестве бэкэнда
Демонстрационная страница Online LLVM имела возможность генерировать код API LLVM C++ в качестве бэкэнда из исходного кода. Однако эта демонстрационная страница теперь отключена. Мне было интересно, как мы можем сделать это сами, используя доступные инструменты 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.
2 ответа
Бэкэнд LLVM C++ должен быть включен во время настройки при сборке LLVM. Он включен по умолчанию в configure
(autotools), но не в сборке CMake при сборке в Windows. Вы можете включить его, установив соответствующие флаги при настройке с CMake. Смотрите эту страницу для получения дополнительной информации.
Цитата:
LLVM_TARGETS_TO_BUILD: STRING Список целей, разделенных точкой с запятой, для построения или все для построения всех целей. С учетом регистра. Для Visual C++ по умолчанию используется X86. В остальных случаях по умолчанию все. Пример: -DLLVM_TARGETS_TO_BUILD="X86;PowerPC".
ОБНОВИТЬ
поскольку 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's 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/trunk@268631 91177308-0d34-0410-b5e6-96231b3b80d8
К сожалению, это, кажется, больше невозможно в более поздних версиях LLVM. Соответствующее сообщение коммита объясняет это довольно хорошо.
Как вы можете видеть в следующем коммите, Remove bit-rotten 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's 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/trunk@268631 91177308-0d34-0410-b5e6-96231b3b80d8