как-то к LLVM подключать свои плагины через clang?
Я просто хочу написать свои пассы, которые не связанны с оптимизациями, а скорее с некоторым анализом LLVM IR, но не хочу для этого использовать целую монорепу.
Я знаю что к clang'у можно писать свои плагины, но как делать это с LLVM — не нашёл.
И если это реально всё-таки, то ограничивается ли функционал плагина от написания в монорепу напрямую?
Привет, лучше считать что Clang и LLVM независимы друг от друга. Плагины/линтеры/чекеры Clang основаны на работе с AST (и частично с препроцессором), и LLVM IR не трогают. Поэтому лучше смотреть, что предлагает сам LLVM.
Я так понимаю все, что вы хотите это out of tree pass в so либе, с дальнейшим подключением через параметры драйверу. И в самой доке LLVM этот кейс описан: от как создать, до как подключить и что послать: https://llvm.org/docs/CMake.html#developing-llvm-passes-out-of-source Ну и далее, как вариант : clang -Xclang -load -Xclang mypass.so
Скорее, я хочу семейство пассов
Спасибо, посмотрю!
А из такого плагина можно влиять на LLVM'ные пассы? Например, запретить оптимизировать какую-нибудь функцию? И как контролировать до оптимизаций этот пасс будет работать или после?
Немного не понял, Что значит влиять? В вашем можете сделать, что «угодно». В других, логика уже зашита в имплементации. Как контролировать, там есть ряд опций на это, предлагаю посмотреть существующие пассы и работу PassManager. Если же вы хотите в принципе «пересобрать» пайплайн , то это тоже можно сделать у нового PM есть опция, которая в виде строки принимает инициализирует и тп нужные вам проходы
Влиять — в смысле порядок выполнения стандартных пассов и моих пассов И запретить выполнять пасс внутри/на какой-то функции Например, если она помечена каким-то атрибутом
Если это ваш проход, то это тривиальная проверка атрибута функции при обработке. Если не ваш, велком менять исходный код.
Обсуждают сегодня