Новая версия набора компиляторов LLVM 3.1
Опубликовано 23 Май 2012 09:16:03
После 6 месяцев разработки доступен релиз проекта LLVM 3.1 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
Источник: http://www.opennet.ru/opennews/art.shtml?num=33915
Основные новшества LLVM 3.1:
- Представлен инструмент для автоматизированного выявления ошибок с распределением памяти AddressSanitizer, позволяющий определить факты обращения к освобождённым областям памяти, выхода за пределы границ выделенного буфера и некоторые другие типы ошибок при работе с памятью;
- Значительное улучшение поддержки стандарта C++'11 в LLVM-фронтэнде Clang. В том числе добавлена поддержка лямбда-выражений, списков инициализации, атомарных операций, ключевого слова "constexpr", пользовательских литералов и т.п. Поддержка языков C, C++, Objective-C++ и Objective-C в настоящее время полностью стабилизирована для целевых плафторм x86 (32- и 64-bit) и ARM. В новой версии также добавлена расширенная поддержка литералов для Objective C и интегрирована библиотека tooling для упрощения разработки собственных инструментариев на базе Clang;
- В генератор кода добавлена поддержка "связок инструкций" (instruction bundles), позволяющих смоделировать поддержку VLIW-групп через упаковку произвольного числа параллельных инструкций. В итоге, значительно улучшена поддержка генерации кода для целевых архитектур процессоров VLIW (например, применяется в некоторых GPU), в которых одна инструкция содержит несколько параллельно выполняющихся операций. Кроме того, в генератор кода добавлена поддержка алгоритма "Basic Block Placement", поддерживающий вероятностные методы размещения блоков кода;
- Добавлена реализация интегрированного макро-ассемблера для архитектуры ARM, который ускорил время компиляции и дал возможность реализовать некоторые дополнительные возможности для целевых систем ARM, такие как Thumb1, Thumb2 и ARM режимы, а также поддержку специфичных расширений для VFP2, VFP3 и NEON;
- Значительное улучшение работы MIPS-бэкенда, теперь полноценно поддерживающего архитектуру MIPS64;
- Добавлен новый порт с поддержкой процессоров Qualcomm Hexagon VLIW;
- В DragonEgg, плагине к набору компиляторов GCC, заменяющем оригинальные оптимизаторы и генераторы кода GCC на аналоги, созданные в рамках проекта LLVM, в дополнение к полной поддержке работы в виде плагина к GCC 4.5 и 4.6 без применения дополнительных патчей, добавлена базовая поддержка GCC 4.7. Также добавлена возможность сборки для архитектуры ARM;
- Улучшена работа библиотек libc++ и compiler_rt, которые распространяются под двойной лицензией MIT и UIUC. Библиотека libc++ представляет собой реализацию стандартной библиотеки классов C++, распространяемую под BSD-подобной лицензией и нацеленную на высокоэффективную генерацию кода и на максимальное обеспечение совместимости с существующими и будущими стандартами. Библиотека обеспечивает минимальное потребление памяти, высокую скорость выполнения функций, быструю компиляцию и совместимость на уровне ABI с libstdc++ из состава GCC для некоторых низкоуровневых возможностей, таких как объекты-исключения (exception objects), rtti и распределение памяти. В настоящее время libc++ уже интегрирована в базовую систему FreeBSD и планируется к использованию по умолчанию в FreeBSD 10. Отмечается также портирование libc++ для Solaris и возможность полноценного использования на данной платформе в сочетании с libcxxrt и clang;
- Значительное увеличение производительности проекта VMKit, виртуальной машины Java VM, использующей LLVM для статической и JIT-компиляции;
- В число официально поддерживаемых проектов включён экспериментальный оптимизатор Polly, в настоящий момент поддерживающий несколько техник оптимизации циклов и позволяющий организовать автоматическое распараллеливание кода с задействованием OpenMP. Для использования polly в clang следует указать "-O3 -mllvm -polly";
- Для целевых платформ X86-32 и X86-64 значительно расширена поддержка набора инструкций AVX 2 (Advanced Vector Extensions), устранены проблемы с ранее реализованной поддержкой AVX1, добавлена поддержка расширений FMA4 и XOP;
- Добавлены официально поддерживаемые биндинги для языка Python, которые пока поддерживают только интерфейс для работы с объектными файлами и дизасемблер;
- Добавлена утилита llvm-stress для проведения стресс-тестирования различных компонентов LLVM путем генерации случайных ll-файлов.
Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:
- KLEE - символьный анализатор и генератор тестовых наборов;
- Runtime-библиотека compiler-rt;
- llvm-mc - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
- VMKit - виртуальная машина для Java и .NET;
- Реализация функционального языка программирования Pure;
- LDC - компилятор для языка D;
- Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
- Виртуальные машины для Ruby: Rubinius и MacRuby;
- Unladen Swallow - реализация языка Python;
- LLVM-Lua
- FlashCCompiler - средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash;
- LLDB - новая модульная инфраструктура отладки, использующая такие подсистемы LLVM как API для дизассемблирования, Clang AST (Abstract Syntax Tree), парсер выражений, генератор кода и JIT-компилятор. LLDB поддерживает отладку многопоточных программ на языках C, Objective-C и C++; отличается возможностью подключения плагинов и скриптов на языке Python; демонстрирует экстремально высокое быстродействие при отладке программ большого размера;
- emscripten - компилятор биткода LLVM в JavaScript, позволяющий преобразовать для запуска в браузере приложения, изначально написанные на языке Си. Например, удалось запустить Python, Lua, Quake, Freetype;
- sparse-llvm - бэкенд, нацеленный на создание Си-компилятора, способного собирать ядро Linux.
- Portable OpenCL - открытая и независимая реализация стандарта OpenCL;
- CUDA Compiler - позволяет сгенерировать GPU-инструкции из кода, написанного на языках Си, Си++ и Fortran;
- Julia - открытый динамический язык программирования, использующий наработки проекта LLVM.
Источник: http://www.opennet.ru/opennews/art.shtml?num=33915
|
0 | Tweet | Нравится |
|