The OpenNET Project / Index page

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

Релиз набора компиляторов LLVM 2.9

07.04.2011 10:34

После 6 месяцев разработки доступен релиз проекта LLVM 2.9 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный байт-код RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

В версию LLVM 2.9 включены наработки с реализацией расширенных методов оптимизиации и генерации кода (в частности, задействованы новые возможности современных ARM-систем), в Clang и libc++ улучшена поддержка стандарта C++'0x, значительно расширена функциональность отладчика LLDB. Из новшеств также можно отметить:

  • В LLVM-фронтэнде Clang, улучшена поддержка языков C, C++ и Objective-C. Проведена работа по обеспечению поддержки некоторых новых возможностей C++'0x, таких как rvalue-ссылки и шаблонов с переменным числом аргументов (variadic). Проведена большая работа над ошибками, налажена поддержка "__label__", продолжена работа по обеспечению возможности сборки Linux-ядра. Реализован и включен по умолчанию анализатор TBAA (Type Based Alias Analysis), который позволяет в определенных ситуациях существенно повысить оптимизации загрузки и сохранения (для отключения TBBA необходимо использовать опцию "-fno-strict-aliasing");
  • В DragonEgg, плагине к набору компиляторов GCC 4.5, заменяющем оригинальные оптимизаторы и генераторы кода GCC на аналоги, созданные в рамках проекта LLVM, повышена стабильность работы при компиляции кода на языке Fortran и Java, улучшена обработка ассемблерных inline-вставок, добавлена базовая поддержка типа __float128;
  • Добавлен новый бэкенд для виртуального набора инструкций NVIDIA PTX (Parallel Thread Execution);
  • Добавлена встроенная поддержка ассемблера для ELF-файлов;
  • Улучшена реализация техники оптимизации во время динамического связывания (LTO - Link Time Optimization), что позволило ускорить процесс сборки и обеспечить поддержку компиляции таких больших приложений, как Firefox 4;
  • Определение циклов аналогичных по действию функциям memset и memcpy и автоматическая замена цикла на вызов функции из libc (реализации memset и memcpy в libc как правило оптимизированы);
  • Улучшены средства для отладки оптимизированного кода;
  • Подготовлена инфраструктура для базирующейся на регионах оптимизации (region based optimizations);
  • Улучшено использование кода, учитывающего состояние регистров. Переписан код, занимающийся распределением регистров (register allocator);
  • Полностью переработан код использования набора инструкций MMX, добавлена поддержка наборов инструкций 3dNow! и 3DNowA;
  • Ускорена работа бэкенда для платформы ARM, обеспечена поддержка оптимизации для процессоров Cortex-A8 и Cortex-A9,

По заявлению разработчиков LLVM 2.9 будет последним релизом серии 2.x. В версии 3.0 планируется отказаться от поддержки фронтэнда llvm-gcc в пользу Си/C++/Objective-C компилятора Clang и GCC-плагина DragonEgg. В настоящее время Clang является более оптимальным решением для сборки проектов на языке Си, а DragonEgg является хорошим решением для разработчиков, заинтересованных в интеграции LLVM в GCC.

Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:

  • KLEE - символьный анализатор и генератор тестовых наборов;
  • Runtime-библиотека compiler-rt;
  • llvm-mc - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
  • VMKit - виртуальная машина для Java VM и .NET VM;
  • Реализация функционального языка программирования Pure;
  • LDC - компилятор для языка D;
  • Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
  • Виртуальные машины для Ruby: Rubinius и MacRuby;
  • Unladen Swallow - реализация языка Python;
  • LLVM-Lua
  • FlashCCompiler - средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash.
  • emscripten - компилятор байткода LLVM в JavaScript, позволяющий преобразовать для запуска в браузере приложения, изначально написанные на языке Си. Например, удалось запустить Python, Lua, Quake, Freetype.


  1. Главная ссылка к новости (http://llvm.org/docs/ReleaseNo...)
  2. OpenNews: Новая версия набора компиляторов LLVM 2.8
  3. OpenNews: В Clang обеспечена возможность сборки Linux-ядра 2.6.36
  4. OpenNews: Представлен LLDB - новый отладчик, развиваемый под эгидой проекта LLVM
  5. OpenNews: В состав базовой системы FreeBSD включен компилятор Clang
  6. OpenNews: Проект LLVM представил новую стандартную библиотеку С++
Автор новости: wandererdragon
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/30161-gcc
Ключевые слова: gcc, llvm, clang, compile
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (25) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, klalafuda (?), 13:01, 07/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как их C++ с boost-ом? Дружит?
     
     
  • 2.5, Онаним (?), 13:18, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Дружит http://blog.llvm.org/2010/05/clang-builds-boost.html
     
     
  • 3.6, klalafuda (?), 13:21, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Дружит http://blog.llvm.org/2010/05/clang-builds-boost.html

    Ну что же, молодцы, молодцы. Такой задел уже вполне себе похож на что-то, что можно реально использовать.

     

  • 1.2, Аноним (-), 13:07, 07/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    когда я смогу скомпилировать этим ядро?
     
     
  • 2.3, Онаним (?), 13:15, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Наверное когда найдется свободнное время для этого
    http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html
     
  • 2.4, bav (ok), 13:16, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ждешь избавления от 12309?
     
  • 2.7, Аноним (-), 13:23, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Смотря какое ядро, фрюшное - хоть щас.
     
  • 2.8, Vitaly_loki (ok), 13:26, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Линукс написан с использованием GCC-специфичных особенностей. А вот FreeBSD собирается им влегкую
     

  • 1.9, JL2001 (ok), 13:45, 07/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    кто пробовал LDC для D2 - им можно пользоваться (хотяб для простых программ) ?
     
     
  • 2.10, Алексей Прохин (?), 13:54, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    LDC2 проходит почти все тесты, идущие в комплекте с dmd и phobos, на linux x86 и x86_64.
     
     
  • 3.12, Frankl (?), 14:32, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    припоминается баг, или ошибка, когда компилятору нужно было указывать дополнительные пути к библиотекам. Хотя в /etc/ldc.conf все было прописано. И что удивительно, на хелловорде не надо было ничего, а что-то сложнее - надо было. Не разбирался особо в чем дело.
     

  • 1.11, Anonymousapiens (ok), 14:07, 07/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    >Unladen Swallow

    Он уже год как помер

     
  • 1.13, andy (??), 16:28, 07/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сильвия, тебе надо выпустить новую версию Wyrmtail
     
  • 1.14, hizel (ok), 17:59, 07/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    хм, похоже clang поддерживает Objective C 2.0 это ок, а из нормальных runtime для него только gnustep ? gui не интересуют
     
     
  • 2.16, Онаним (?), 19:14, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Есть еще Cocotron, не знаю на сколько он нормальный.
     

  • 1.15, xxx (??), 18:04, 07/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >Определение циклов аналогичных по действию функциям memset и memcpy и автоматическая замена цикла на вызов функции из libc (реализации memset и memcpy в libc как правило оптимизированы);

    Спорная какая-то фича.

     
     
  • 2.17, Аноним (-), 22:32, 07/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Вот-вот. libc libc рознь, я бы предпочёл встраивание наиболее эффективного кода inplace.
     
     
  • 3.20, Сергей (??), 09:48, 08/04/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а он и встраевается инплайс, вот только из libc
     

  • 1.21, Winrar777 (ok), 12:41, 08/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мне вот непонятна следующая вещь: если компилятор LLVM компилирует в промежуточный байт-код, то как на нём вообще возможно собирать linux-ядро? Или на нём всё-таки возможна компиляция в машинные коды?
    Проясните плиз, кто шарит
     
     
  • 2.22, hizel (ok), 12:44, 08/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Мне вот непонятна следующая вещь: если компилятор LLVM компилирует в промежуточный байт-код,
    > то как на нём вообще возможно собирать linux-ядро? Или на нём
    > всё-таки возможна компиляция в машинные коды?
    > Проясните плиз, кто шарит

    из байт-кода можно выхлопнуть нативный код для целевой платформы

     
     
  • 3.23, Winrar777 (ok), 12:47, 08/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А можно ли при этом просто собрать на clang программу на с++, при этом слинковав её с библиотеками, которые собраны gcc? Или придётся ещё и все библиотеки тоже пересобирать?
     
     
  • 4.24, hizel (ok), 13:45, 08/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    похоже да, gcc c++ abi поддерживается судя по:

    Clang C++ able to parse GCC 4.2 libstdc++ and generate working code for non-trivial programs[8] and was able to compile itself
    http://en.wikipedia.org/wiki/Clang#Status_history

     

  • 1.25, anonymous (??), 17:23, 08/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Определение циклов аналогичных по действию функциям memset и memcpy и автоматическая замена цикла на вызов функции из libc

    спасибо, не надо. если я пишу такой цикл — я знаю, зачем я его пишу и почему не зову функцию из библиотеки. что за манера вообще — делать то, что не просили? оптимизируйте код на здоровье, но зачем же левые функции вызывать при этом?

     
     
  • 2.26, Andrey Mitrofanov (?), 18:19, 08/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > спасибо, не надо. если я пишу такой цикл — я знаю, зачем

    Да, не за что. Найди ключ, отключающий это, в man-е и вставь его в свой Makefile, autoconf или куда у тебя там где, да. Проблемы-то, полблемы...

     
     
  • 3.27, anonymous (??), 18:25, 08/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Да, не за что. Найди ключ, отключающий это, в man-е и вставь
    > его в свой Makefile, autoconf или куда у тебя там где,
    > да. Проблемы-то, полблемы…

    конечно. потому что это должен быть геморойный opt-in, а не геморойный opt-out. а я почему-то уверен (уж пардон, лень лезть проверять), что при каком-нибудь -O2 оно превращается как раз в геморройный opt-out.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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