Демоверсия 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.
Бэкэнд 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. Соответствующее сообщение коммита объясняет это довольно хорошо.
Как вы можете видеть в следующем коммите,
Удалить бит-гнилой 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