09 Октября 2024, 01:18

LLVM Compiler

Автор turbo, 26 Октября 2009, 22:00

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

turbo

26 Октября 2009, 22:00 Последнее редактирование: 08 Апреля 2011, 00:59 от Zhek@Ch
[size="3"]Новая версия набора компиляторов LLVM Compiler 2.6[/size]

После шести месяцев разработки анонсирован новый релиз LLVM 2.6 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный байткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
Основные новшества:
Clang, фронтенд для C и Objective-C, который можно использовать вместо GCC, объявлен стабильным и готовым для промышленной эксплуатации. Исходные тексты Clang распространяются в рамках лицензии BSD;
 Значительно улучшено качество генерации кода для платформы x86_64;
 Реализация поддержки оптимизации во время связывания (link-time) для систем, использующих формат исполняемых файлов ELF;
 Добавлены новые генераторы кода для архитектур MSP430, SystemZ и BlackFin;
 Поддержка генерации многопоточного кода и реализация соответствующих оптимизаций;
 Интеграция с системой профилирования OProfile для JIT;
 Добавлена поддержка архитектуры ARM V7 (включая Thumb2 и NEON);
 В состав включены биндинги для языка Ada2005;
 Реализована поддержка SSE 4.2;
 Представлены новые субпроекты, основанные на LLVM, но не включенные в базовую поставку:
llvm-gcc плагин DragonEgg, нацеленный на совместимость с еще не выпущенным GCC 4.5;
KLEE - символьный анализатор и генератор тестовых наборов;
 Runtime-библиотека compiler-rt;
llvm-mc - автогенератор ассемблера, дизассемблера и других, связанных с машинным кодом компонентов, на основе описаний параметров LLVM-совместимых платформ.
Из параллельно развивающихся сторонних проектов, основанных на LLVM , можно отметить VMKit ( виртуальная машина для Java VM и .NET VM), реализацию функционального языка программирования Pure, LDC (компилятор для языка D), Roadsend PHP (оптимизатор, статический и JIT компилятор для языка PHP), виртуальные машины для Ruby (Rubinius и MacRuby), Unladen Swallow (реализация языка Python), LLVM-Lua, FlashCCompiler (средство для компиляции кода на языке Си в вид пригодный для выполнения в виртуальной машине Adobe Flash).

http://www.opennet.r...shtml?num=23985

Rubik

07 Апреля 2011, 17:54 #1 Последнее редактирование: 07 Апреля 2011, 17:55 от Rubik
[size="3"]Релиз набора компиляторов LLVM 2.9 [/size]

После 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;
  • Добавлен новый бэкенд для виртуальных ISA-чипов 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.