185 похожих чатов

Привет всем! У меня как-то не удалось нагуглить, но можно ли

как-то к LLVM подключать свои плагины через clang?
Я просто хочу написать свои пассы, которые не связанны с оптимизациями, а скорее с некоторым анализом LLVM IR, но не хочу для этого использовать целую монорепу.
Я знаю что к clang'у можно писать свои плагины, но как делать это с LLVM — не нашёл.

И если это реально всё-таки, то ограничивается ли функционал плагина от написания в монорепу напрямую?

9 ответов

18 просмотров

Привет, лучше считать что 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

Danya🔥- Автор вопроса
Danya🔥- Автор вопроса
Danya🔥- Автор вопроса
alekum
Я так понимаю все, что вы хотите это out of tree p...

А из такого плагина можно влиять на LLVM'ные пассы? Например, запретить оптимизировать какую-нибудь функцию? И как контролировать до оптимизаций этот пасс будет работать или после?

Danya🔥
А из такого плагина можно влиять на LLVM'ные пассы...

Немного не понял, Что значит влиять? В вашем можете сделать, что «угодно». В других, логика уже зашита в имплементации. Как контролировать, там есть ряд опций на это, предлагаю посмотреть существующие пассы и работу PassManager. Если же вы хотите в принципе «пересобрать» пайплайн , то это тоже можно сделать у нового PM есть опция, которая в виде строки принимает инициализирует и тп нужные вам проходы

Danya🔥- Автор вопроса
alekum
Немного не понял, Что значит влиять? В вашем может...

Влиять — в смысле порядок выполнения стандартных пассов и моих пассов И запретить выполнять пасс внутри/на какой-то функции Например, если она помечена каким-то атрибутом

Danya🔥
Влиять — в смысле порядок выполнения стандартных п...

Если это ваш проход, то это тривиальная проверка атрибута функции при обработке. Если не ваш, велком менять исходный код.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта