LLVM 12, последний выпуск с открытым исходным кодом Платформа инфраструктуры компилятора LLVM, опубликованный 14 апреля, содержит оптимизацию для целевой платформы x86, а также изменения в серверной части AArch64 Arm.

Для цели x86 – новый атрибут функции, tune-cpu, добавлен в поддержку -mtune как GCC, что позволяет применять оптимизацию микроархитектуры независимо от target-cpu атрибут или ЦП TargetMachine, который будет использоваться для выбора набора команд. Если этот атрибут отсутствует, ЦП настройки будет следовать за целевым ЦП. Также для целевой платформы x86 ассемблер теперь поддерживает {disp32} а также {disp8} псевдопрефиксы для управления размером смещения для операндов памяти и размещения переходов.

Для серверной части AArch64 Arm были внесены улучшения в генерацию данных размотки Windows, при этом данные размотки оптимизированы и записаны в упакованной форме, где это возможно, уменьшая размер данных размотки примерно на 60 процентов по сравнению с LLVM 11. Генерация прологов / эпилогов выполняется изменен при ориентации на Windows, чтобы повысить шансы использования упакованного формата информации о размотке.

Еще одно изменение в LLVM 12: внутренняя llvm-build Сценарий сборки Python и связанные файлы LLVMBuild.text, описывающие структуру компонента LLVM, были удалены, заменены чистым CMake подход. С этим изменением каждый компонент сохраняет дополнительные свойства в созданных целевых объектах, причем свойства обрабатываются после того, как все компоненты определены для разрешения библиотечных зависимостей и создания заголовка, ожидаемого llvm-config.

Другие новые функции и улучшения в LLVM 12:

  • Улучшения LLVM IR (Промежуточное представление) включают добавление byref атрибут, чтобы лучше представить аргумент, передаваемый для amdgpu_kernel соглашение о вызовах и добавление параметра типа в sret атрибут, чтобы продолжить работу по удалению типов точечных элементов.
  • В llvm.experimental.vector.reduce семейство инстринсиков было переименовано, в нем исключено слово «экспериментальный», чтобы отразить поддержку в IR.
  • Целочисленное дезинфицирующее средство -fsanitize=integer теперь есть новое дезинфицирующее средство, -fsanitize=unsigned-shift-base. Это не неопределенное поведение для беззнакового сдвига влево для переполнения, но оно было источником ошибок и эксплойтов в определенных кодовых базах.
  • В цель PowerPC были внесены изменения, включая поддержку векторизации эпилога.

Авторские права © 2021 IDG Communications, Inc.


#LLVM #поставляется #оптимизацией #x86 #AArch

Source link