Примеры кода для обучения программному обеспечению LLVM

Я изучаю программы LLVM.

В настоящее время меня интересуют аналитические проходы, более поздние программные преобразования. (Я предполагаю, что, когда я буду более свободно анализировать, тогда будет время для программных преобразований).

Не могли бы вы посоветовать ресурсы для обучения? (Я знаю LLVM Programmers manual и Dragon Book;)).

Посредством ресурсов я имею в виду не только учебники, книги, но особенно маленькие хорошо написанные проекты. Я бы хотел прочитать примеры кода, скомпилировать их и поиграть с ними (немного взломать), чтобы узнать больше о практической реализации.

Эти коды не должны ограничиваться частью анализа. Тема - основное программирование LLVM в целом, в то время как анализ и преобразования программ наиболее интересны.

Ответы

Ответ 1

Все преобразования LLVM организованы как автономные проходы внутри lib/Transforms dir, вы можете читать его источники и запускать любой произвольный проход в вашем коде с помощью инструмента opt.

Кроме того, есть хорошее руководство по написанию собственного прохода и его использование в качестве загружаемого модуля без перекомпиляции всего LLVM.

Итак, уже есть довольно широкая игровая площадка.

Ответ 2

Как кто-то, кто сделал то, что вы хотите сделать 3 года назад: Наилучшие примеры имеют кодовая база LLVM. Возможно, хорошим местом для начала является анализ доминанта, поскольку он хорошо описан в книгах компилятора.

Проверьте, как это делается в LLVM: http://llvm.org/doxygen/Dominators_8h_source.html

Другим местом для поиска может быть планирование инструкций.

Ответ 3

Я искал нечто похожее, код, который использует библиотеки llvm, и после долгого сеанса в google я только что нашел его на веб-сайте llvm в разделе "Проекты llvm": http://llvm.org/ProjectsWithLLVM/

просто загрузите то, что считаете нужным для вас, и играйте вместе.