LLVM 13.0 компилятор топтомунун чыгарылышы

Алты айлык иштеп чыгуудан кийин LLVM 13.0 долбоорунун релизинин бет ачары болду - программаларды RISC сымал виртуалдык нускамалардын ортоңку биткоддоруна компиляциялоочу GCC шайкеш инструменттер топтому (компиляторлор, оптимизаторлор жана код генераторлор). көп деңгээлдүү оптималдаштыруу системасы). Түзүлгөн псевдокод JIT компиляторунун жардамы менен программаны аткаруу учурунда түздөн-түз машиналык көрсөтмөлөргө айландырылат.

Clang 13.0 жакшыртуулары:

  • Кепилденген куйрук чалуулар үчүн колдоо ишке ашырылган (функциянын эң аягында подпрограмманы чакыруу, эгерде подпрограмма өзүн чакырса, куйрук рекурсиясын түзүү). Кепилденген чалууларды колдоо C++ тилиндеги "[[clang::musttail]]" атрибуту жана C тилиндеги "__attribute__((musttail))" "кайтаруу" билдирүүсүндө колдонулат. Функция стек керектөөнү үнөмдөө үчүн кодду жалпак итерацияга жайгаштыруу аркылуу оптималдаштырууну ишке ашырууга мүмкүндүк берет.
  • "колдонуу" декларациялары жана кланг кеңейтүүлөрү "[[]]" форматын колдонуу менен C++ 11 стилиндеги атрибуттарды аныктоого колдоо көрсөтөт.
  • Колдонуучу кодунда сакталган идентификаторлорду көрсөткөндө эскертүү көрсөтүү үчүн "-Wreserved-identifier" желекчеси кошулду.
  • Кошулган "-Wunused-but-set-parameter" жана "-Wunused-but-set-variable" желекчелери параметр же өзгөрмө коюлуп, бирок колдонулбаса, эскертүү көрсөтүү.
  • Код кемитүү операцияларында нөл көрсөткүчтү колдонуудан улам аныкталбаган жүрүм-турумду киргизиши мүмкүн болсо, эскертүү берүү үчүн "-Wnull-көрсөткүч-субстракция" желеги кошулду.
  • Ар бир код файлы үчүн иштетилип жаткан файлда аныкталган ар бир функция үчүн стек алкактарынын өлчөмү жөнүндө маалыматты камтыган кошумча ".su" файлын түзүү үчүн "-fstack-usage" желеги кошулду.
  • Статикалык анализаторго жаңы чыгаруу түрү кошулду - “sarif-html”, ал HTML жана Sarif форматтарында бир эле убакта отчетторду түзүүгө алып келет. Жаңы allocClassWithName текшерүүсү кошулду. “-анализер-дисплей-прогресс” опциясын көрсөтүүдө ар бир функциянын талдоо убактысы көрсөтүлөт. Акылдуу көрсөткүч анализатору (alpha.cplusplus.SmartPtr) дээрлик даяр.
  • OpenCL колдоосу менен байланышкан мүмкүнчүлүктөр кеңейтилген. cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields жана __cl_clang_non_portable_kernel_param_types жаңы кеңейтүүлөрү үчүн колдоо кошулду. OpenCL 3.0 спецификациясын ишке ашыруу улантылды. C үчүн OpenCL 1.2 спецификациясы демейки боюнча колдонулат, эгерде башка версия ачыктан-ачык тандалбаса. C++ үчүн “.clcpp” кеңейтүүсү бар файлдарды колдоо кошулду.
  • OpenMP 5.1 спецификациясында аныкталган циклди трансформациялоо директивалары («#pragma omp unrol» жана «#pragma omp tile») үчүн колдоо ишке ашырылган.
  • Clang форматындагы утилитага кошумча опциялар кошулду: комментарийлердин алдындагы боштуктардын санын аныктоо үчүн SpacesInLineCommentPrefix, IndentAccessModifiers, LambdaBodyIndentation жана PPIndentWidth жазуулардын, ламбда туюнтмаларынын жана препроцессордун директиваларынын тегиздөөсүн көзөмөлдөө. Баш файлдардын (SortIncludes) тизмегин сорттоо мүмкүнчүлүктөрү кеңейтилди. JSON файлдарын форматтоо үчүн кошумча колдоо.
  • Жаңы чектердин чоң бөлүгү линтер кланг-тидейге кошулду.

LLVM 13.0 негизги инновациялар:

  • "-ehcontguard" опциясы кошулду CET (Windows Control-flow Enforcement Technology) технологиясын колдонуунун өзгөчөлүгүн иштетүү баскычында Return-Oriented Programming (ROP) ыкмаларын колдонуу менен курулган эксплуатациялардын аткарылышынан коргоо.
  • Debuginfo-test долбоору кайчылаш долбоорлор тесттери деп өзгөртүлдү жана мүчүлүштүктөрдү оңдоо маалыматы менен эле чектелбестен, ар кандай долбоорлордун компоненттерин сыноо үчүн иштелип чыккан.
  • Монтаж системасы бир нече дистрибуцияларды курууга колдоо көрсөтөт, мисалы, бири коммуналдык кызматтар менен, экинчиси иштеп чыгуучулар үчүн китепканалар менен.
  • AArch64 архитектурасынын аркасында Armv9-A RME (Realm Management Extension) жана SME (Scalable Matrix Extension) кеңейтүүлөрүн колдоо ассемблерде ишке ашырылат.
  • ISA V68/HVX колдоо алты бурчтук архитектура үчүн артка кошулду.
  • x86 сервери AMD Zen 3 процессорлорун жакшыртты.
  • AMDGPU серверине GFX1013 RDNA2 APU үчүн колдоо кошулду.
  • Libc++ C++20 жана C++2b стандарттарынын жаңы мүмкүнчүлүктөрүн ишке ашырууну улантууда, анын ичинде «түшүнүктөр» китепканасын аяктоо. MinGW негизиндеги Windows платформасы үчүн std::filesystem үчүн кошумча колдоо. , жана баш файлдары бөлүнгөн. LIBCXX_ENABLE_INCOMPLETE_FEATURES куруу опциясы толук ишке ашырыла элек башкы файлдарды өчүрүү үчүн кошулду.
  • LLD шилтемесинин мүмкүнчүлүктөрү кеңейтилген, анда Big-endian Aarch64 процессорлорун колдоо ишке ашырылган жана Mach-O бэкэнди кадимки программаларды байланыштырууга мүмкүндүк берген абалга келтирилген. Glibcти LLD аркылуу байланыштыруу үчүн зарыл болгон жакшыртуулар камтылган.
  • llvm-mca (Machine Code Analyzer) утилитасы ARM Cortex-A55 сыяктуу нускамаларды иретте аткарган процессорлорго колдоону кошту (тартипте суперскалярдык түтүк), мисалы.
  • AArch64 платформасы үчүн LLDB мүчүлүштүктөрдү оңдоочу көрсөткүчтүн аныктыгын текшерүү, MTE (MemTag, эстутум теги кеңейтүү) жана SVE регистрлерине толук колдоо көрсөтөт. Ар бир эстутум бөлүштүрүү операциясына тегдерди байлоого жана эстутумга кирүү учурунда көрсөткүчтү текшерүүнү уюштурууга мүмкүндүк берүүчү командалар кошулду, алар туура тег менен байланыштырылышы керек.
  • LLDB мүчүлүштүктөрдү оңдоочу жана Fortran тили үчүн фронтон - Фланг долбоор тарабынан түзүлгөн бинардык ассамблеяларга кошулду.

Source: opennet.ru

Комментарий кошуу