Новая версия набора компиляторов LLVM 3.4
Опубликовано 06 Январь 2014 21:30:21
Увидел свет релиз проекта LLVM 3.4 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
Источник: http://www.opennet.ru/opennews/art.shtml?num=38798
Основные новшества LLVM 3.4:
- Существенно увеличена производительность генератора кода. При использовании флагов оптимизации "-Os" и "-O2" по умолчанию включена поддержка автоматической векторизации циклов, ранее применяемой только при указании флага "-O3". Также включен по умолчанию представленный в прошлом выпуске новый SLP-векторизатор.
- Сборка по умолчанию бэкенда для использования в качестве целевой платформы GPU семейства R600 (HD2XXX - HD7XXX). Бэкенд необходим для компилятора шейдеров LLVM, который в свою очередь требуется для открытой реализации стандарта OpenCL;
- В llvm-ar задействована новая библиотека объектов и обеспечена генерация архивов и таблиц символов в формате GNU;
- Значительно расширены биндинги для языка OCaml, которые теперь охватывают возможности всех библиотек LLVM;
- Внесены заметные изменения в бэкенд для процессоров PowerPC, положительно повлиявшие на качество кода и скорость сборки;
- В бэкенд MIPS добавлена поддержка архитектуры MSA (MIPS SIMD Architecture);
- Добавлен экспериментальный бэкенд для архитектуры SPARC V9;
- В бэкенд для архитектуры SPARC добавлена поддержка JIT, fp128, обработки исключений и TLS (Thread-Local Storage);
- Расширены возможности бэкендов X86, ARM32, AArch64 и SystemZ;
- LLVM 3.4 является последним выпуском, который может быть собран компилятором с поддержкой стандарта C++'98, для сборки следующих версий потребуется компилятор, совместимый с C++'11.
Улучшения в Clang:
- Обеспечена полная поддержка всех возможностей текущего чернового варианта будущего стандарта C++1y;
- В Clang Static Analyzer существенно улучшена поддержка C++, сокращено число ложных срабатываний и расширено число выявляемых ошибок;
- В состав включена новая утилита "clang-format", которую можно использовать для автоматического форматирования кода в текстовых редакторах или интегрированных средах разработки на основе заданного набора правил стилевого оформления кода;
- Добавлен драйвер с экспериментальным альтернативным интерфейсом командной строки, обеспечивающим совместимость на уровне опций с компилятором cl.exe из состава Visual Studio. Драйвер может применяться для упрощения миграции проектов на Clang без переработки сборочных сценариев;
- При использовании флага "-O4" теперь не включается оптимизации на стадии компоновки (link-time optimization), для которой следует явно указать флаг "-flto", применяемый при любом уровне оптимизации.
Новые субпроекты на базе LLVM 3.4:
- Проект Mozilla начал развитие проекта DXR, в рамках которого подготовлен инструментарий для поиска и навигации по большим кодовым базам, таким как исходные тексты Firefox. Поддерживается полнотекстовый поиск, запросы с использованием регулярных выражений и структурированные запросы в форме "найти все вызовы такой-то функции".
- Обновлена реализация LDC - компилятора для языка программирования D, комбинирующего фронтэнд из состава эталонного компилятора D с бэкендом на базе LLVM, позволяющим генерировать эффективный нативный код. LDC поддерживает генерацию кода для систем x86/x86_64 Linux, OS X, FreeBSD и Windows, и PPC64 для Linux. В разработке находится создание генератора кода для архитектур ARM и AArch64.
- Представлен LibBeauty, инструментарий для декомпиляции и обратного инжиниринга, построенный с использованием дизассемблера LLVM и LLVM IR Builder. Приняв на входе объектный файл (.o) на выходе генерирует файл в промежуточном представлении LLVM (.bc или .ll). Пока поддерживается только архитектура x86_64.
- Likely - открытый предметно-ориентированный язык для распознавания изображений. Алгоритмы распознавания на лету компилируются (JIT) при помощи инфраструктуры LLVM MCJIT для выполнения на одно- или многоядерных CPU, а также на GPU с использованием OpenCL SPIR или CUDA.
- Прогресс в реализации проекта Portable Computing Language OpenCL (PoCL), в рамках которого ведётся разработка полностью открытой реализации стандарта OpenCL, независимой от производителей графических ускорителей. PoCL позволит разработчикам не задумываться об особенностях той или иной реализации стандарта и использовать предоставляемые компилятором оптимизации вместо применения специфических для каждой платформы техник ручной оптимизации. PoCL реализован по модульному принципу, позволяющему использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров;
- PNaCl (Portable Native Client) - интегрированная в браузер Chrome система, которая позволяет организовать выполнение приложений, написанных на языках C и С++, в специальном изолированном окружении web-браузера, независимо от текущей аппаратной архитектуры. Например, скомпилированный для PNaCl исполняемый файл может быть выполнен в различных версиях Chrome и Chrome OS, независимо от аппаратной архитектуры (x86, x86_64, ARM, MIPS) и типа операционной системы, демонстрируя при этом производительность, близкую к родному для данной целевой платформы исполняемому файлу. В PNaCl вместо генерации машинного кода приложение компилируется в универсальный биткод LLVM и поставляется в непривязанном к конкретной платформе исполняемом формате ".pexe". В процессе запуска приложения промежуточный биткод LLVM транслируется в машинный код текущей платформы на стороне локальной системы пользователя.
- WebCL Validator - позволяет проверять корректность языка WebCL C, который является подмножеством OpenCL ES 1.1;
Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:
- KLEE - символьный анализатор и генератор тестовых наборов;
- Runtime-библиотека compiler-rt;
- llvm-mc - автогенератор ассемблера, дизассемблера и других связанных с машинным кодом компонентов на основе описаний параметров LLVM-совместимых платформ.
- VMKit - виртуальная машина для Java и .NET;
- Реализация функционального языка программирования Pure;
- LDC - компилятор для языка D;
- Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
- Виртуальные машины для Ruby: Rubinius и MacRuby;
- 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.
- Jade (Just-in-time Adaptive Decoder Engine) - универсальный движок для декодирования видео, использующий LLVM для JIT-компиляции адаптивных конфигураций декодера видео, определённых комитетом MPEG Reconfigurable Video Coding (RVC);
Источник: http://www.opennet.ru/opennews/art.shtml?num=38798
|
0 | Tweet | Нравится |
|