Добавление новой цели LLVM в llvmlite
Можно ли добавить новую цель в llvmlite (библиотека Python)? Для нового оборудования (например, ASIC) мне нужно иметь новую и пользовательскую цель LLVM. Это не очень ясно из документации .
Если невозможно добавить новую цель в llvmlite, могу ли я сгенерировать IR в llvmlite, а остальное сделать другим способом?
1 ответ
Ответ смешанный.
Вполне возможно, что новая цель не совсем новая, но что-то, что LLVM может собрать, если вы вызовете create_target_machine() llvmlite с правильными аргументами. Многие ASIC на самом деле не уникальны.
Если цель действительно новая, вам с вероятностью 99% потребуется написать C++. Подклассы подклассов LLVM, и я недостаточно смел , чтобы попробовать это в python. Объем необходимого кода составит не менее сотни строк, даже если уже есть бэкенд для процессора вашего ASIC, а если вам нужно написать генератор кода для сложного процессора, то вам действительно не повезло.
Однако, как только у вас появится новая цель, llvmlite сможет использовать ее без прямого обращения к какому-либо целевому или бэкэнд-специфичному коду. Ваш код Python запрашивает у llvmlite create_target_machine, а затем вызывает диспетчер проходов LLVM через существующие вызовы llvmlite, который, в свою очередь, вызывает правильный бэкэнд.