LLVM Воронин Дмитрий. Agenda Что такое LLVM LLVM проекты Промежуточное представление LLVM Пример создания новой фазы компиляции в LLVM Пример внедрения.

Презентация:



Advertisements
Похожие презентации
Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО.
Advertisements

Date: Filename:SCL_3e.1 SIMATIC S7 Siemens AG All rights reserved. Создание и вызов блоков.
Microsoft.NET Первая лекция. COM Доступ к компонентам только через интерфейсы Назначение уникальных идентификаторов компонентам и интерфейсам Регистрация.
1 Кубенский А.А. Функциональное программирование. Глава 5. Системы исполнения функциональных программ. Глава 5. Системы исполнения функциональных программ.
Составление программ Разработка программ в среде Турбо- Паскаль.
Новиков Сергей Анализ потока управления и потока данных в программе.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Лекция 3. Введение в C++ Примеры взяты из книги Брюса Эккеля Думаем на С++
Прикладное программирование кафедра прикладной и компьютерной оптики Полиморфизм.
Символьные вычисления Денис С. Мигинский. Задача Реализовать аналитическое вычисление производной выражений, содержащих основные алгебраические операции.
2 из 21 Введение в Cache-oblivious алгоритмы: –Определение Cache-oblivious алгоритмов. –Модель памяти компьютера. –Cache-oblivious модель –Примеры сache-oblivious.
Модули Информатика. Наличие модулей в Turbo-Pascal позволяет программировать и отлаживать программу по частям, создавать библиотеки программ и данных.
Лекция 23. Шаблоны (часть 3) Красс Александр СПбГУ ИТМО, 2008.
Объектно-ориентированное программирование С++. Лекция 9 Карпов В.Э.
Заглавные и строчные латинские буквы цифры 0…9 специальные символы + - * / = > <., : ^ () {} [] $ #
1 Процессоры семейства Intel® XScale®. Разработка эффективных приложений Василий Басов Intel
Инкапсуляция полей и констант в языке C# (1) Поле: - инициализация факультативна, однако запрещен доступ к полям и методам того же типа; - поля структуры.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Объектно-ориентированное программирование Карпов В.Э. Смолток. Лекция 4. Байт-код.
Дипломная работа «Оптимизации генерации кода в JIT- компиляторе виртуальной машины Java» Научный руководитель Куксенко С.В. Рецензент Салищев С.И. Выполнил.
Транксрипт:

LLVM Воронин Дмитрий

Agenda Что такое LLVM LLVM проекты Промежуточное представление LLVM Пример создания новой фазы компиляции в LLVM Пример внедрения новой фазы в компилятор clang Пример использования JIT компиляции в LLVM 2

LLVM LLVM – набор средств разработки (компиляторы, ассемблеры, дебаггеры, библиотеки и пр.), тесно связанных между собой. Идея разработки: -создать блоки (библиотеки), из которых можно «собирать» готовые решения (или внедрять блоки в свои проекты) -максимально переиспользовать разработанный код Примеры: -использование парсера фронтенда для нужд IDE (индексирование, подсветка ситаксиса, рефакторинг) -использование единого промежуточного представление (IR) для всех входных языков, как для статической так и для динамической компиляции. 3

LLVM проекты Clang – C/C++/Objective-C фронтент DragonEgg – плагин к GCC, заменяющий GCC оптимизатор LLVMовским LLDB – дебаггер (для Mac OS X) Libc++ - реализация C++ библиотеки для нового стандарта C++0X VMKit – реализация Java Virtual Machine 4

СПО проекты (на базе LLVM) Crack – скриптовый язык программирования, объединяющий парадигмы C++, Java, Python TCE – TTA-based Co-design Environment (TTA – Transport Triggered Architecture), тулчейн для преобразования C/C++ программы в VHDL PinaVM – SystemC фронтенд, SystemC – язык для системного моделирования, дизайна и верификации IcedTea – замена «несвободных» компонент в OpenJDK GHC – Glasgow Haskel Compiler Rubinius – реализация Ruby FAUST – Functional AUdio Stream (real time audio signal processing language) 5

Проприетарные проекты (на базе LLVM) Компилятор фирмы Apple Копилятор GPGPU фирмы Nvidia Компилятор GPGPU фирмы AMD Компилятор фирмы RapidMind (куплена фирмой Intel) Portable Native Client фирмы Google 6

LLVM IRs 7 C Fortran Ada Optimizer ARM Backend Power PC Backend X86 Backend LLVM IRCodeGen IR AST

Основные объекты LLVM IR LLVMContext -constants maps and predefined constants -types maps and predefined types -map of value handles Module -list of global variables and aliases -values and types sym-tabs -list of functions Function -list of arguments -list of basic blocks -values sym-tab BasicBlock -list of instructions Instruction -list of uses -result type Use - pointer to argument (Value) Constant Type 8

Типы 9 DerivedType Type* IntegerTypeFunctionTypeCompositeTypeOpaqueType StructTypeSequentialType ArrayTypeVectorTypePointerType *Type has a list of its uses

Значения 10 User* Value InstructionConstant ArgumentBasicBlock * User has a list of its uses

Константы 11 ConstantExpr Constant UnaryConstantExpr BinaryConstantExpr GetElementPtrConstantExpr SelectConstantExpr ExtractElementConstantExpr InsertElementConstantExpr ShuffleVectorConstantExpr ExtractValueConstantExpr InsertValueConstantExpr CompareConstantExpr ConstantInt ConstantFP ConstantArray ConstantStruct ConstantVector BlockAddress GlobalValue GlobalVariable GlobalAlias Function

Инструкции 12 UnaryInstruction Instruction AllocaInst LoadInst VAArgInst ExtractValueInst StoreInst GetElementPtrInst SelectInst BinaryOperator CastInst CmpInst ICmpInst FCmpInst TruncInst ZExtInst SExtInst FPTruncInst FPExtInst UIToFPInst SIToFPInst FPToUIInst FPToSIInst IntToPtrInst PtrToIntInst BitCastInst TerminatorInst ReturnInst BranchInst SwitchInst IndirectInst InvokeInst UnwindInst UnreachableInst CallInst _other_

Специальные инструкции (intrinsic) 13 IntrinsicInst CallInst EHExceptionIntrinsic EHSelectIntrinsic MemIntrinsic MemTransferInst MemCpyInst MemMoveInst MemSetInst DbgInfoIntrinsic DbgDeclareInst DbgValueInst

Пример IR 14 int foo( int *a, int size) { int i, sum = 0; for( i=0; i

Приведения объектов IR (isa, cast, dyn_cast) Каждый класс реализует метод static inline bool classof( Value* val); template inline bool isa( Y *val); template inline X cast( Y *val); template inline X dyn_cast( Y *val); for ( BasicBlock::iterator it = bb->begin(), …) { Instruction *inst = it; if ( isa ( inst) ) { // inst можно привести к BranchInst BranchInst *br = cast ( inst); } if ( InvokeInst *invoke = dyn_cast ( inst) ) { // invoke приведен к InvokeInst } 15

QA 16