The OpenNET Project / Index page

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



"Релиз набора компиляторов LLVM 8.0"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Присылайте удачные настройки в раздел примеров файлов конфигурации на WIKI.opennet.ru.
"Релиз набора компиляторов LLVM 8.0" +/
Сообщение от opennews (?), 20-Мрт-19, 23:04 
После шести месяцев разработки представлен (http://lists.llvm.org/pipermail/llvm-dev/2019-March/131157.h... релиз проекта LLVM 8.0 (http://llvm.org/) (Low Level Virtual Machine) - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

Из новых возможностей LLVM 8.0 отмечается включение защиты от атак Spectre, поддержка распараллеленной компиляции в ORC JIT, стабилизация компиляции в WebAssembly, добавление в Clang опции для инициализации автоматически распределяемых переменных, улучшение предкомпиляции и поддержка флага /Zc:dllexportInlines в clang-cl, поддержка архитектуры RISC-V в компоновщике lld, расширение средств диагностики.

Улучшения (http://releases.llvm.org/8.0.0/tools/clang/docs/ReleaseNotes... в Clang 8.0:


-  Добавлена возможность инициализации автоматически распределяемых переменных (https://en.wikipedia.org/wiki/Automatic_variable) (например, локальных переменных, определённых внутри конструкций). По умолчанию автоматические переменные остаются неинициализированными. Инициализация осуществляется при указании опции  "-ftrivial-auto-var-init=pattern" и позволяет избавиться от некоторых форм неопределённого поведения, вызванных заполнением переменных случайными остаточными данными из стека и регистров. Для принудительного отключения инициализации, например, для больших массивов, предусмотрен атрибут "dont_initialize_me";
-  Добавлена поддержка  файлов повторного сопоставления данных профилировния (profile-remapping (http://releases.llvm.org/8.0.0/tools/clang/docs/UsersManual.... которые позволяют сопоставить символьные имена и данные профилирования для использования ранее сгенерированных профилей выполнения с другой версией программы с изменёнными таблицами символов (например, из-за переименования класса или пространства имён);

-  Добавлены новые диагностические опции: "-Wextra-semi-stmt" для выявления лишних ";" и  "-Wempty-init-stmt" для выявления пустых блоков инициализации в конструкциях if, switch и for;

-  Помимо ранее добавленной защиты Retpoline в  состав включены изменения (http://releases.llvm.org/8.0.0/docs/SpeculativeLoadHardening... для генерации последовательностей инструкций для получения данных из памяти с блокированием утечек, вызванных  спекулятивным выполнением инструкций в современных CPU. Защита может быть выборочно включена или отключена для определённых функций через указание атрибутов speculative_load_hardening и no_speculative_load_hardening, а также включена глобально при помощи опции "-mspeculative-load-hardening";

-  Добавлены опции "-fprofile-filter-files=[regexes]" и "-fprofile-exclude-files=[regexes]" для выборочной фильтрации или исключения определённых файлов с данными профилирования в формате gcov;

-  В clang-cl, альтернативном интерфейсе командной строки, обеспечивающем совместимость на уровне опций с компилятором cl.exe из состава Visual Studio, добавлена поддержка опций  "/Yc" и "/Yu" для предварительной компиляции заголовочных файлов. Добавлена поддержка флага "/Zc:dllexportInlines", аналогичного флагу "-fvisibility-inlines-hidden", для неприменения атрибутов dllexport и dllimport  к inline-функциям;

-  Обеспечена возможность использования инструментов Address Sanitizer и Undefined Behaviour Sanitizer с MinGW;

-  Расширены возможности, связанные с поддержкой OpenCL, OpenMP и CUDA. В том числе добавлены некоторые новые возможности OpenMP 5.0 и расширены средства диагностики;

-  Расширены возможности UBSan (Undefined Behavior Sanitizer), детектора неопределенного поведения (http://ru.wikipedia.org/wiki/%D0%9D%D0%B... выявляющего во время выполнения программы ситуации, когда поведение программы становится неопределенным. Расширен спектр ситуаций, охватываемых в режиме "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer), например, добавлено выявление проблем с составными операторами присваивания и обеспечено определение неявных изменений знака целых чисел ("-fsanitize=implicit-integer-sign-change"). При проверке выравнивания теперь выполняется проверка атрибутов, подобных "assume_aligned";


Основные новшества LLVM 7.0:


-  Снят флаг экспериментальной разработки с целевой платформы WebAssembly, поддержка которой теперь включена по умолчанию и не требует указания опции  LLVM_EXPERIMENTAL_TARGETS_TO_BUILD. В разряд стабильных также переведены формат объектных файлов и C ABI для платформы WebAssembly. Экспериментальной пока остаётся только поддержка многопоточности в WebAssembly;


-  В утилиту llvm-cov добавлена опция "-format=lcov" для экспорта coverage-статистики в формате lcov;

-  Добавлена опция "-x86-discriminate-memops", использующая отладочную информацию для точной идентификации инструкций x86 с обращающимися к памяти операндами для упреждающей загрузки в кэш (https://lists.llvm.org/pipermail/llvm-dev/2018-November/1274... (cache prefetching (https://en.wikipedia.org/wiki/Cache_prefetching));


-  В libFuzzer добавлена поддержка платформы     Windows  (x86_64);
-   JIT API для компиляции по запросу (ORC, On Request Compilation) добавлена поддержка параллельной компиляции. Старый однопоточный API объявлен устаревшим, переименован в LegacyIRCompileLayer и будет удалён в LLVM 9. На основе нового API реализован демонстрационный JIT LLJIT. Поддержка MCJIT и ExecutionEngine будет продолжена, но для новых проектов  ORC отмечен как предпочтительный JIT API;
-  В отладчике LLDB обеспечена подсветка синтаксиса выводимого кода на языке Си. В команде "expression" обеспечено автодополнение ввода табуляцией;


-   В бэкенд для архитектуры x86 добавлена поддержка CPU AMD bdver2  на базе микроархитектуры Piledriver. Для указания в опции "-march" добавлен новый идентификатор CPU "cascadelake", идентичный skylake-avx512 с включением дополнительного набора инструкций avx512vnni. Прекращена подстановка инструкции ADCX, которая мало чем отличается от инструкции ADC, но увеличивает размер кода;
-  Внесены многочисленные улучшения в бэкенды для архитектур  AArch64, ARM, SystemZ, Hexagon, MIPS и PowerPC.

URL: http://lists.llvm.org/pipermail/llvm-dev/2019-March/131157.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=50360

Ответить | Правка | Cообщить модератору

Оглавление
Релиз набора компиляторов LLVM 8.0, opennews, 20-Мрт-19, 23:04  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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