| |
Анонсирован релиз проекта LLVM 3.5 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
Улучшения в Clang 3.5:
- Достижение уровня самопересборки (self host) на платформах Linux/Sparc64 и FreeBSD/Sparc64;
- Начальная поддержка некоторых элементов будущего международного стандарта C++1z (С++17), идущего следом за стандартом C++ 14, полная поддержка которого уже реализована в Clang (Clang стал первым компилятором с поддержкой C++ 14);
- На платформе Windows задействован обновлённый MinGW ABI для достижения совместимости с GCC 4.7 и более новыми выпусками;
- Значительный прогресс в реализации поддержки OpenMP. Добавлен разбор и анализ семантики для всех pragma, определённых в спецификации OpenMP 3.1, за исключением atomics и ordered. Runtime-библиотека OpenMP адаптирована для поддержки арихитектур ARM и PowerPC. Частично реализованы некоторые возможности OpenMP 4.0, такие как векторизация последовательных и параллелизированных циклов с использованием инструкции SIMD, и поддержка ускорения вычислений за счёт задействования дополнительных аппаратных вычислительных устройств.
- Средство проверки наличия атрибутов __has_attribute теперь учитывает поддержку заданного атрибута в целевой платформе, для которой осуществляется сборка (ранее проверялось лишь семантическое наличие атрибута без учёта его фактической поддержки);
- Поддержка генерации ремарок (флаг "-R") - диагностических сообщений о процессе компиляции, в том числе информирующих ("-Rpass") об использовании тех или иных оптимизаций для разных частей кода. Изучение ремарок позволяет разработчику увеличить эффективность оптимизации кода;
- Расширены средства диагностики ошибок. Обеспечен вывод нефатального предупреждения вместо вывода ошибки при использовании неподдерживаемых флагов оптимизации GCC. Добавлены новые типы предупреждений: -Wabsolute-value, -Wtautological-pointer-compare и -Wtautological-undefined-compare.
- Прекращена поддержка устаревших флагов -faddress-sanitizer, -fthread-sanitizer, -fcatch-undefined-behavior и -fbounds-checking, вместо которых следует использовать семейство флагов "-fsanitize=";
- В статический анализатор добавлено выявление возможных делений на ноль, при наличии сравнения с нулём после операции деления (int avg = sum / count; if (count == 0){...});
- Для архитектуры ARM по умолчанию включён интегрированный ассемблер;
- Для улучшения диагностики интегрированный ассемблер теперь производит разбор и проверку ассемблерных inline-вставок;
Основные новшества LLVM 3.5:
- В реализацию интегрированного ассемблера для архитектуры ARM (IAS) добавлена поддержка многих директив и расширений GNU, используемых в коде таких проектов, как ядро Linux. Доведён до готовности и включён по умолчанию бэкенд EHABI, используемый для обработки исключений на системах ARM;
- В интегрированный ассемблер добавлена поддержка MIPS и PowerPC;
- Поддержка шестой редакции архитектур MIPS32 и MIPS64;
- Все бэкенды переведены на использование системы MC (LLVM Machine Code) для вывода ассемблерных инструкций. Для генерации номеров строк в отладочных данных теперь используются только секции .loc;
- llvm-ar теперь обрабатывает IR-файлы по аналогии с обычными объектными файлами;
- Значительно улучшена поддержка архитектуры AArch64, в том числе улучшен процесс генерации кода, добавлена поддержка iOS (arm64-apple-ios7.0) и значительно ускорен процесс компиляции при выборе уровня оптимизации "-O0";
- Сборка и установка документации LLVM, Clang и lld sphinx теперь может быть проведена при сборке в CMake. В системах сборки Autoconf/Makefile и CMake обеспечена генерация файла LLVMConfig.cmake для экспорта установленных библиотек;
В процессе разработки LLVM 3.5 компания Apple открыла исходные тексты своих наработок, используемых для генерации 64-разрядного ARM кода на платформе iOS. Данные наработки по функциональности пересекаются с развиваемым в LLVM генератором кода, но проекты развивались параллельно и не пересекаются между собой. Поддержание двух близких по функциональности бэкендов признано нецелесообразным, поэтому решено оставить в качестве базового бэкенд Apple ARM64, как более зрелый и проверенный на практике, и понемногу переносить оптимизации и расширенную функциональность из ранее развиваемого бэкенда LLVM. В итоге планируется подготовить комбинируемую реализацию, включающую лучшие возможности обоих бэкендов. Для избежания путаницы комбинированная реализация бэкенда развивается под именем AArch64.
Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:
- KLEE - символьный анализатор и генератор тестовых наборов;
- Runtime-библиотека compiler-rt;
- llvm-mc - автогенератор ассемблера, дизассемблера и других связанных с машинным кодом компонентов на основе описаний параметров LLVM-совместимых платформ.
- Реализация функционального языка программирования 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);
- PNaCl (Portable Native Client) - интегрированная в браузер Chrome система, которая позволяет организовать выполнение приложений, написанных на языках C и С++, в специальном изолированном окружении web-браузера, независимо от текущей аппаратной архитектуры;
- PoCL (Portable Computing Language OpenCL) - реализация стандарта OpenCL, независимая от производителей графических ускорителей и позволяющая использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров;
- Likely - открытый предметно-ориентированный язык для распознавания изображений. Алгоритмы распознавания на лету компилируются (JIT) при помощи инфраструктуры LLVM MCJIT для выполнения на одно- или многоядерных CPU, а также на GPU с использованием OpenCL SPIR или CUDA.
- LibBeauty - инструментарий для декомпиляции и обратного инжиниринга, построенный с использованием дизассемблера LLVM и LLVM IR Builder. Приняв на входе объектный файл (.o) на выходе генерирует файл в промежуточном представлении LLVM (.bc или .ll);
- McSema - фреймворк для преобразования машинного кода в биткод LLVM;
- Swift - основанный на LLVM язык программирования, развиваемый компанией Apple;
- FTL (Fourth Tier LLVM) - JIT-компилятор для движка WebKit;
|
|
- Главная ссылка к новости (http://lists.cs.uiuc.edu/pipermail/llvm-...)
- OpenNews: Для WebKit реализован JIT-компилятор на основе наработок LLVM
- OpenNews: Для развития проекта LLVM создаётся отдельная некоммерческая организация
- OpenNews: Новая версия набора компиляторов LLVM 3.4
- OpenNews: Новая версия набора компиляторов LLVM 3.3
- OpenNews: В проект LLVM вошла разработанная в Intel runtime-библиотека OpenMP. Red Hat представил OpenMP 4.0 для GCC
| Тип: Интересно / Программы | Ключевые слова: llvm, clang, (найти похожие документы) | При перепечатке указание ссылки на opennet.ru обязательно | Реклама |
id=adv>
| |
|
2.11, Анооооним, 14:10, 05/09/2014 [^] [ответить] [смотреть все] [показать ветку] [к модератору] | +2 +/– |
> Глюкало. Как минимум на AMDшных GPU - это вообще самый глючный компилер
> из всех которые я когда либо видел.
Сынку, ты хочешь сказать, что GCC изначально не был глюкалом, поскольку код упал с неба как божественное откровение?
Все пишут такие же недоумки, как и ты - в телогреечке.
| | |
| 2.20, Аноним, 22:24, 05/09/2014 [ ^] [ ответить] [ смотреть все] [ показать ветку] [ к модератору] –2 +/–Что-то твою подгорелую пятую точку в каждой теме про llvm видно Так вот в очере... весь текст скрыт [ показать] [ показать ветку]
1.2, Аноним, 10:58, 05/09/2014 [ответить] [смотреть все] [к модератору] +/–
1.3, Штунц, 11:13, 05/09/2014 [ответить] [смотреть все] [к модератору] –3 +/–Растолкуйте, зачем это нужно в момент выполнения программы И кому понадобится... весь текст скрыт [ показать]
2.5, Pbibi, 11:25, 05/09/2014 [ ^] [ ответить] [ смотреть все] [ показать ветку] [ к модератору] +1 +/–
Нажимаете кнопку "Turbo" и компьютер работает быстрее.
Просто раньше для этого добавляли тактовой частоты процессора.
2.30, Кевин, 22:27, 06/09/2014 [ ^] [ ответить] [ смотреть все] [ показать ветку] [ к модератору] +/–
>> платформонезависимый псевдокод может быть преобразован при помощи
>> JIT-компилятора в машинные инструкции непосредственно в момент
>> выполнения программы
> Растолкуйте, зачем это нужно "в момент выполнения программы". И кому понадобится распространять
> софт в таком виде?
что-бы с джавой конкурировать и да для скриптов это очень полезная фича. более того имея JiT можно при необходимости перейти на AoT.. не говоря о том что тот же код всё также можно просто скомпилировать...
короткий ответ: тем ребятам у которых больше денег чем у тебя.
1.6, Аноним, 12:07, 05/09/2014 [ответить] [смотреть все] [к модератору] +/–WAT LLVM всегда собирали с помощью CMake на офсайте написано, что проект прекра... весь текст скрыт [ показать]
1.7, Аноним, 12:12, 05/09/2014 [ответить] [смотреть все] [к модератору] +/–Roadsend PHP оно работает несколько лет назад можно было скачать исходники, ско... весь текст скрыт [ показать]
1.13, iZEN, 15:32, 05/09/2014 [ответить] [смотреть все] [к модератору] –3 +/–Как же я всё это время обходился без GCC ... весь текст скрыт [ показать]
1.28, Аноним, 16:31, 06/09/2014 [ответить] [смотреть все] [к модератору] +/–Что-то как обычно поматросили и бросили ... весь текст скрыт [ показать] Ваш комментарий
Read more |