The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Новая версия набора компиляторов LLVM 3.5

05.09.2014 08:55

Анонсирован релиз проекта 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;


  1. Главная ссылка к новости (http://lists.cs.uiuc.edu/piper...)
  2. OpenNews: Для WebKit реализован JIT-компилятор на основе наработок LLVM
  3. OpenNews: Для развития проекта LLVM создаётся отдельная некоммерческая организация
  4. OpenNews: Новая версия набора компиляторов LLVM 3.4
  5. OpenNews: Новая версия набора компиляторов LLVM 3.3
  6. OpenNews: В проект LLVM вошла разработанная в Intel runtime-библиотека OpenMP. Red Hat представил OpenMP 4.0 для GCC
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/40520-llvm
Ключевые слова: llvm, clang
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (30) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 09:44, 05/09/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –13 +/
    Глюкало. Как минимум на AMDшных GPU - это вообще самый глючный компилер из всех которые я когда либо видел.
     
     
  • 2.11, Анооооним (?), 14:10, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Глюкало. Как минимум на AMDшных GPU - это вообще самый глючный компилер
    > из всех которые я когда либо видел.

    Сынку, ты хочешь сказать, что GCC изначально не был глюкалом, поскольку код упал с неба как божественное откровение?

    Все пишут такие же недоумки, как и ты - в телогреечке.

     
     
  • 3.21, Аноним (-), 22:46, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Сынку, ты хочешь сказать, что GCC изначально не был глюкалом,

    Я хочу сказать что амдшный бэкэнд для GPU глюкавит 2 года, а у этих му... даже нет нормальной разбивки багтрекера на секции, чтобы указать что баг - в амдшном бэкэнде. Пишите на шланг вообще, дескать. Киздатый подход к качеству..

     
  • 2.20, Аноним (-), 22:24, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Что-то твою подгорелую пятую точку в каждой теме про llvm видно. Так вот в очередной раз отвечаю - ты врун, и работает оно замечательно. И без llvm такой производительности бы никак не достигло.
     
     
  • 3.22, Аноним (-), 22:47, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > вот в очередной раз отвечаю - ты врун, и работает оно замечательно.

    Только валится на сборке тривиальнейших opencl kernel-ов без особых на то причин. А так все хорошо, прекрасная маркиза.

     
     
  • 4.29, Кевин (?), 22:23, 06/09/2014 [^] [^^] [^^^] [ответить]  
  • +/
    руки из жопы это конечно обычная причина а не особая, но всётки очень значимая.
     

  • 1.2, Аноним (-), 10:58, 05/09/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    http://osdyson.org/news/74
     
  • 1.3, Штунц (?), 11:13, 05/09/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > платформонезависимый псевдокод может быть преобразован при помощи
    > JIT-компилятора в машинные инструкции непосредственно в момент
    > выполнения программы

    Растолкуйте, зачем это нужно "в момент выполнения программы". И кому понадобится распространять софт в таком виде?

     
     
  • 2.4, Andrey Mitrofanov (?), 11:23, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Растолкуйте, зачем это нужно "в момент выполнения программы". И кому понадобится распространять
    > софт в таком виде?

    Исполнение скриптовых языков со скоростью компилируемых. Почти.
    "Своевременная" оптимизация.

     
     
  • 3.23, Аноним (-), 22:53, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Исполнение скриптовых языков со скоростью компилируемых.

    Не, не так. Отгружаешь юзеру бинарь в виде intermediate кода, а он потом оттранслируется в x86. Или x86_64. Или ARM. Или что там еще у этого юзера, если оно поддерживается.

    Ну в общем посмотри на pnacl в гуглохроме. Не столь уж и поганая идея, правда нужна больше проприетарщикам всяким и тем кого в репы не берут.

     
  • 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 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Добавлена возможность сборки и установки LLVM и Clang с использованием CMake

    WAT? LLVM всегда собирали с помощью CMake

    >VMKit - виртуальная машина для Java и .NET

    на офсайте написано, что проект прекращен.

     
     
  • 2.12, Алексей (??), 15:01, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Там в списке таких где-то половина. Список копируют из новости в новость.
     
  • 2.19, Аноним (-), 20:13, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > WAT? LLVM всегда собирали с помощью CMake

    WAT? CMake и autocrap там всегда поддерживались параллельно.

     

  • 1.7, Аноним (-), 12:12, 05/09/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Roadsend PHP оно работает? несколько лет назад можно было скачать исходники, скомпилить и увидеть надпись что движка там собственно еще не написано
     
     
  • 2.8, Аноним (-), 12:26, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Похоже половину проектов тут запостили абы запостить. Этот Roadsend PHP уже с 2012 года (судя под гитхабу) никуда не движется и помер. А в новости ссылка так вообще нерабочая.
     
     
  • 3.10, Аноним (-), 13:12, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вот оно похоже дохлое с 2012 https://github.com/weyrick/roadsend-php-raven
     
  • 3.26, Аноним (-), 13:29, 06/09/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Похоже половину проектов тут запостили абы запостить.

    Синдром утенка. Пиарят какой-то левый крап, чтобы показать что LLVM хоть где-то используется. При том пиарят тyпой копипастой, так что половина этого списка давно сдохла.

     

  • 1.9, Xaionaro (ok), 12:41, 05/09/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Битая ссылка у:

    > -  Roadsend PHP (http://code.roadsend.com/rphp) - оптимизатор, статический и JIT компилятор для языка PHP;




    $ host code.roadsend.com 8.8.8.8
    Using domain server:
    Name: 8.8.8.8
    Address: 8.8.8.8#53
    Aliases:

    Host code.roadsend.com not found: 3(NXDOMAIN)



     
  • 1.13, iZEN (ok), 15:32, 05/09/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > Достижение уровня самопересборки (self host) на платформах Linux/Sparc64 и FreeBSD/Sparc64

    Как же я всё это время обходился без GCC?!

     
     
  • 2.14, Andrey Mitrofanov (?), 17:12, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    >> Достижение уровня самопересборки (self host) на платформах Linux/Sparc64 и FreeBSD/Sparc64
    > Как же я всё это время обходился без GCC?!

    Без головы-то обходишься как-то.

     
     
  • 3.17, iZEN (ok), 19:33, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >>> Достижение уровня самопересборки (self host) на платформах Linux/Sparc64 и FreeBSD/Sparc64
    >> Как же я всё это время обходился без GCC?!
    > Без головы-то обходишься как-то.

    Спасибо что поправил.


     
  • 2.15, Я (??), 19:14, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +/
    У тебя Sparc64 ?
     
     
  • 3.16, iZEN (ok), 19:32, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > У тебя Sparc64 ?

    Хм,
    % uname -rsm
    FreeBSD 10.1-PRERELEASE amd64

     
     
  • 4.18, Алексей (??), 19:47, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А теперь внимательно читаем новость, особенно про ОС где производится компиляция.
     
  • 4.24, Аноним (-), 22:55, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > FreeBSD 10.1-PRERELEASE amd64

    Что-то не очень похоже на Sparc64...

     
     
  • 5.25, iZEN (ok), 23:10, 05/09/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> FreeBSD 10.1-PRERELEASE amd64
    > Что-то не очень похоже на Sparc64...

    Ты тоже заметил? Странно...


     
     
  • 6.27, Аноним (-), 13:32, 06/09/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ты тоже заметил? Странно...

    А еще я заметил что кое-кто забыл отпустить ручник.

     

  • 1.28, Аноним (-), 16:31, 06/09/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что-то как обычно... поматросили и бросили!
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру