Релиз набора компиляторов LLVM 12.0
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
После шести месяцев разработки представлен релиз проекта LLVM 12.0 - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
Улучшения в Clang 12.0:
- Реализована и включена по умолчанию поддержка предложенных в стандарте C++20 атрибутов "likely" и "unlikely", позволяющих информировать оптимизатор о вероятности срабатывания условной конструкции (например, "[[likely]] if (random > 0) {").
- Добавлена поддержка процессоров AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) и Intel Sapphire Rapids (-march=sapphirerapids).
- Добавлена поддержка флагов "-march=x86-64-v[234]" для выбора уровней архитектуры x86-64 (v2 - охватывает расширения SSE4.2, SSSE3, POPCNT и CMPXCHG16B; v3 - AVX2 и MOVBE; v4 - AVX-512).
- Добавлена поддержка процессоров Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) и Fujitsu A64FX (a64fx). Например, для включения оптимизаций для CPU Neoverse-V1 можно указать "-mcpu=neoverse-v1".
- Для архитектуры AArch64 добавлены новые флаги компилятора "-moutline-atomics" и "-mno-outline-atomics", предназначенные для включения и отключения вспомогательных функций с реализацией атомарных операций, таких как "__aarch64_cas8_relax". Подобные функции во время выполнения определяют наличие поддержки расширений LSE (Large System Extensions) и используют предоставляемые атомарные процессорные инструкции или откатываются на использование инструкций LL/SC (Load-link/store-conditional) для синхронизации.
- Добавлена опция "-fbinutils-version" для выбора целевой версии набора binutils для обеспечения совместимости со старым поведением компоновщика и ассемблера.
- Для исполняемых файлов ELF при указании флага "-gz" по умолчанию включено сжатие отладочной информации с использованием библиотеки zlib
(gz=zlib). Для компоновки результирующих объектных файлов требуется lld или GNU binutils 2.26+. Для восстановления совместимости со старыми версиями binutils можно указать "-gz=zlib-gnu".
- Указатель 'this' теперь обрабатывается с проверками nonnull и dereferenceable(N). Для удаления атрибута nonnull, при необходимости использования значений NULL, можно использовать опцию "-fdelete-null-pointer-checks".
- На платформе Linux для архитектур AArch64 и PowerPC включён режим
"-fasynchronous-unwind-tables" для генерации "раскрученных" (unwind) таблиц вызовов, как в GCC.
- В "#pragma clang loop vectorize_width" добавлена возможность указания опций "fixed" (по умолчанию) и "scalable" для выбора метода векторизации. Режим "scalable", независимый от длины вектора, является экспериментальным и может использоваться на оборудовании с поддержкой масштабируемой векторизации.
- Улучшена поддержка платформы Windows: Подготовлены официальные бинарные сборки для Windows на системах Arm64, включающие компилятор Clang, компоновщик LLD и runtime-библиотеки compiler-rt. При сборке для целевых платформ MinGW реализовано добавление суффикса .exe, даже при выполнении кросс-компиляции.
- Расширены возможности, связанные с поддержкой OpenCL, OpenMP и CUDA. Добавлены опции "-cl-std=CL3.0" и "-cl-std=CL1.0" для выбора вариантов макросов для OpenCL 3.0 и OpenCL 1.0. Расширены средства диагностики.
- Добавлена поддержка инструкций HRESET, UINTR и AVXVNNI, реализованных в некоторых процессорах на базе архитектуры x86.
- На системах x86 включена поддержка опции "-mtune=<cpu>", активирующей выбранные микроархитектурные оптимизации, независимо от значения
"-march=<cpu>".
- В статическом анализаторе улучшена обработка некоторых POSIX-функций и значительно улучшено определение результата условных операций при наличии в сравнении нескольких символьных значений. Добавлены новые проверки: fuchia.HandleChecker (определяет дескрипторы в структурах), webkit.UncountedLambdaCapturesChecker webkit и alpha.webkit.UncountedLocalVarsChecker (учитывают особенности работы с указателями в коде движка WebKit).
- В выражениях, используемых в контексте констант, разрешено использование встроенных функций __builtin_bitreverse*,
__builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsrd, __bsrq, __bswap, __bswapd, __bswap64, __bswapq, _castf*, __rol* и __ror*.
- В утилиту clang-format добавлена опция BitFieldColonSpacing для выбора расстановки пробелов вокруг идентификаторов, столбцов и определений полей.
- В кеширующем сервере clangd (Clang Server) на платформе Linux значительно сокращено потребление памяти при длительной работе (обеспечен периодический вызов malloc_trim для отдачи свободных страниц памяти операционной системе).
Основные новшества LLVM 12.0:
- Прекращена поддержка написанного на языке Python сборочного инструментария llvm-build, вместо которого проект полностью перешёл на использование сборочной системы CMake.
- В бэкенде для архитектуры AArch64 улучшена поддержка платформы Windows: обеспечена корректная генерация ассемблерного вывода для целевых систем Windows, оптимизирована генерация данных о "раскрутке" (unwind) вызовов (размер подобных данных сократился на 60%), добавлена возможность создания unwind-данных при помощи ассемблерных директив .seh_*.
- В бэкенде для архитектуры PowerPC реализованы новые оптимизации циклов и inline-развёртывания, расширения поддержка процессоров Power10, добавлена поддержка инструкций MMA для манипуляций с матрацами, улучшена поддержка операционной системы AIX.
- В бэкенде для архитектуры x86 добавлена поддержка процессоров AMD Zen 3, Intel Alder Lake и Intel Sapphire Rapids, а также процессорных инструкций HRESET, UINTR и AVXVNNI. Прекращена поддержка расширений MPX (Memory Protection Extensions) для проверки указателей на соблюдение границ областей памяти (указанная технология не получила распространения и уже удалена из GCC и clang). В ассемблер добавлена поддержка префиксов {disp32} и {disp8} и суффиксов .d32 и .d8 для управления размером смещения операндов и переходов. Добавлен новый атрибут "tune-cpu" для управления включением микроархитектурных оптимизаций.
- В детектор проблем при работе с целыми числами (integer sanitizer, "-fsanitize=integer") добавлен новый режим "-fsanitize=unsigned-shift-base" для выявления переполнений беззнаковых целых чисел после битового сдвига влево.
- В различных детекторы (asan, cfi, lsan, msan, tsan, ubsan sanitizer) добавлена поддержка Linux-дистрибутивов с стандартной библиотекой Musl.
- Расширены возможности компоновщика LLD. Улучшена поддержка формата ELF, в том числе добавлены опции "--dependency-file", "--error-handling-script", "--lto-pseudo-probe-for-profiling", "--no-lto-whole-program-visibility". Улучшена поддержка MinGW. Для формата Mach-O (macOS) реализована поддержка архитектур arm64, arm и i386, оптимизаций на этапе связывания (LTO) и раскрутки стека при обработке исключений.
- В Libc++ реализованы новые возможности стандарта C++20 и началась разработка возможностей спецификации C++2b. Добавлена поддержка сборки с отключением поддержки локализации ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") и устройств для генерации псевдо-случайных чисел ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://lists.llvm.org/piperma...)
- OpenNews: Проект LLVM представил HPVM 1.0, компилятор для CPU, GPU, FPGA и ускорителей
- OpenNews: Релиз набора компиляторов LLVM 11.0
- OpenNews: В OpenBSD-current импортирован LLVM 10
- OpenNews: Разработчики LLVM обсуждают прекращение использования слова "master"
- OpenNews: Разработчики из Google предложили разработать свою libc для LLVM
Похожие новости:
- Проект LLVM представил HPVM 1.0, компилятор для CPU, GPU, FPGA и ускорителей
- [Высокая производительность, Компиляторы, Процессоры, Криптовалюты, Суперкомпьютеры] Мультиклеточная архитектура: тесты и развитие
- [Системное программирование, Компиляторы, Машинное обучение, Интервью] Ускоряем нейросеть на уровне железа: интервью с разработчиком компиляторов
- [Open source, Разработка под iOS, Разработка мобильных приложений, Swift] Как мы ускоряли работу отладчика Swift
- [Программирование, C++] C++17. Функция стандартной библиотеки std::launder и задача девиртуализации
- Выпуск системной библиотеки Glibc 2.33
- Из Mesa удалён драйвер программной отрисовки swrast
- [Программирование, C++, Проектирование и рефакторинг] Как легко и просто модернизировать код на C++ (перевод)
- [Программирование, C++, Компиляторы, IT-стандарты] С++23: международный стандарт на удалёнке
- Релиз набора компиляторов LLVM 11.0
Теги для поиска: #_llvm, #_clang
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 02:32
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
После шести месяцев разработки представлен релиз проекта LLVM 12.0 - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы. Улучшения в Clang 12.0:
Основные новшества LLVM 12.0:
=========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 02:32
Часовой пояс: UTC + 5