2012-01-08 5 views
14

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

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

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

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

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

+1

Немного касательная: на странице [Try Out LLVM] (http://llvm.org/demo/index.cgi) можно запросить сгенерировать эквивалентный источник LLVM C++ API, который бы сгенерировал IR. Это может помочь (или нет) при поиске конкретного перевода. –

ответ

2

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

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

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

+2

** Я спросил о чем-то больше, чем сама документация и источник llvm. Особенно я писал о небольших (даже игрушечных примерах взлома LLVM) проектов **. Я уже говорил о знании [LLVM manual] (http://llvm.org/docs/), который включает в себя: [LLVM doxygen, упомянутый в разделе «Программирование»] (http://llvm.org/doxygen/) о программирование из третьего источника в [LLVM CMake guide] (http://llvm.org/docs/CMake.html#passdev), ... Существует много документации, и вы можете получить хороший общий обзор проекта. Тем не менее, во многих отношениях документация сосет, поэтому есть вопрос о том, что еще больше. –

+1

Как вы упоминаете о документации и * «без перекомпиляции всего LLVM» *, я хотел бы сообщить вам, как сделать пропуски из исходного дерева: [Построение LLVM с помощью CMake: Разработка LLVM-доступа из источника] (http : //llvm.org/docs/CMake.html#passdev) –

+1

Хорошо, ладно, извините за нерелевантный ответ. Что касается разработки падающего дерева, эта функция была фактически разработана мной, lol. – arrowd

1

Как кто-то, кто сделал то, что вы хотите сделать 3 года назад: Lbvm codebase имеет лучшие примеры. Возможно, хорошее место для начала - анализ dominator, как это хорошо описано в книгах-компиляторах.

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

Другое место, чтобы посмотреть расписание может быть инструкция.

1

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

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

Смежные вопросы