Примеры кода для обучения программному обеспечению 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/
просто загрузите то, что считаете нужным для вас, и играйте вместе.