LLVM 13.0 կոմպիլյատորների փաթեթի թողարկում

Զարգացումից վեց ամիս հետո ներկայացվում է LLVM 13.0 նախագծի թողարկումը՝ GCC-ի հետ համատեղելի գործիքակազմ (կոմպիլյատորներ, օպտիմիզատորներ և կոդերի գեներատորներ), որը ծրագրերը կազմում է RISC-անման վիրտուալ հրահանգների միջանկյալ բիթկոդի մեջ (ցածր մակարդակի վիրտուալ մեքենա բազմամակարդակ օպտիմալացման համակարգ): Ստեղծված կեղծ կոդը կարող է JIT կոմպիլյատորը վերածել մեքենայի հրահանգների հենց ծրագրի կատարման պահին:

Բարելավումներ Clang 13.0-ում.

  • Իրականացված աջակցություն երաշխավորված պոչային զանգերի համար (ենթածրագրի կանչում ֆունկցիայի ամենավերջում, պոչի ռեկուրսիայի ձևավորում, եթե ենթածրագրն ինքն իրեն կանչում է): Երաշխավորված պոչային զանգերի աջակցությունը տրամադրվում է «[[clang::musttail]]» հատկանիշով C++-ում և «__attribute__((musttail))» C-ում, որն օգտագործվում է «վերադարձ» հայտարարության մեջ: Հատկանիշը թույլ է տալիս իրականացնել օպտիմիզացումներ՝ տեղադրելով ծածկագիրը հարթ կրկնության մեջ՝ խնայելու կույտի սպառումը:
  • «օգտագործելով» հռչակագրերը և թրթռացող ընդլայնումները ապահովում են «[[]]» ձևաչափի միջոցով C++11 ոճի ատրիբուտների սահմանման աջակցություն:
  • Ավելացրել է «-Wreserved-identifier» դրոշը՝ նախազգուշացում ցուցադրելու համար, երբ դուք նշում եք վերապահված նույնացուցիչները օգտվողի կոդում:
  • Ավելացվել են «-Wunused-but-set-parameter» և «-Wunused-but-set-variable» դրոշները՝ նախազգուշացում ցուցադրելու համար, եթե պարամետրը կամ փոփոխականը սահմանված է, բայց չի օգտագործվում:
  • Ավելացվեց «-Wnull-pointer-subtraction» դրոշը՝ նախազգուշացում տալու համար, եթե կոդը կարող է չսահմանված վարքագիծ դրսևորել հանման գործողություններում զրոյական ցուցիչի օգտագործման պատճառով:
  • Ավելացրել է «-fstack-usage» դրոշը՝ յուրաքանչյուր կոդային ֆայլի համար լրացուցիչ «.su» ֆայլ ստեղծելու համար, որը պարունակում է տեղեկատվություն մշակվող ֆայլում սահմանված յուրաքանչյուր ֆունկցիայի համար stack frame-ների չափի մասին:
  • Ստատիկ անալիզատորին ավելացվել է նոր ելքային տեսակ՝ «sarif-html», որը հանգեցնում է զեկույցների միաժամանակ ստեղծմանը HTML և Sarif ձևաչափերով: Ավելացվեց նոր allocClassWithName ստուգում: «-analyzer-display-progress» տարբերակը նշելիս ցուցադրվում է յուրաքանչյուր ֆունկցիայի վերլուծության ժամանակը: Խելացի ցուցիչի անալիզատորը (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-format» հավելվածին ավելացվել են տարբերակներ՝ SpacesInLineCommentPrefix՝ մեկնաբանություններից առաջ բացատների քանակը սահմանելու համար, IndentAccessModifiers, LambdaBodyIndentation և PPIndentWidth՝ մուտքերի, լամբդա արտահայտությունների և նախապրոցեսորի հրահանգների հավասարեցումը վերահսկելու համար: Ընդլայնվել են վերնագրի ֆայլերի (SortIncludes) թվարկումը տեսակավորելու հնարավորությունները։ Ավելացվել է JSON ֆայլերի ձևաչափման աջակցություն:
  • Նոր չեկերի զգալի մասը ավելացվել է ծալքավոր խրճիթին:

Հիմնական նորամուծությունները LLVM 13.0-ում.

  • Ավելացվեց «-ehcontguard» տարբերակը՝ օգտագործելու CET (Windows Control-flow Enforcement Technology) տեխնոլոգիան՝ բացառությունների մշակման փուլում կառուցված շահագործումներից կառուցված «Վերադարձի վրա կողմնորոշված ​​ծրագրավորման» (ROP) տեխնիկայի միջոցով պաշտպանվելու համար:
  • Debuginfo-test նախագիծը վերանվանվել է cross-project-tests և նախատեսված է տարբեր նախագծերի բաղադրիչները փորձարկելու համար՝ չսահմանափակվելով վրիպազերծման տեղեկություններով:
  • Հավաքման համակարգը ապահովում է մի քանի բաշխումներ կառուցելու աջակցություն, օրինակ՝ մեկը կոմունալ ծառայություններով, իսկ մյուսը՝ գրադարաններ մշակողների համար:
  • AArch64 ճարտարապետության հետին պլանում Armv9-A RME (Realm Management Extension) և SME (Scalable Matrix Extension) ընդարձակման աջակցությունն իրականացվում է assembler-ում:
  • ISA V68/HVX-ի աջակցությունն ավելացվել է վեցանկյուն ճարտարապետության հետին պլանում:
  • x86 backend-ը բարելավվել է AMD Zen 3 պրոցեսորների աջակցությունը:
  • Ավելացվել է GFX1013 RDNA2 APU-ի աջակցությունը AMDGPU հետին պլանին:
  • Libc++-ը շարունակում է C++20 և C++2b ստանդարտների նոր հնարավորությունների ներդրումը, ներառյալ «հասկացությունների» գրադարանի ավարտը: MinGW-ի վրա հիմնված Windows պլատֆորմի համար std::filesystem-ի համար ավելացվել է աջակցություն: Վերնագրի ֆայլերը , և առանձնացված են: Ավելացվեց LIBCXX_ENABLE_INCOMPLETE_FEATURES կառուցման տարբերակ՝ ամբողջությամբ չիրագործված ֆունկցիոնալությամբ վերնագրի ֆայլերն անջատելու համար:
  • Ընդլայնվել են LLD կապիչի հնարավորությունները, որոնցում իրականացվում է Big-endian Aarch64 պրոցեսորների աջակցությունը, իսկ Mach-O backend-ը բերվել է մի վիճակի, որը թույլ է տալիս կապել կանոնավոր ծրագրերը: Ներառված են բարելավումներ, որոնք անհրաժեշտ են Glibc-ին LLD-ի միջոցով կապելու համար:
  • llvm-mca (Machine Code Analyzer) կոմունալ ծրագիրը ավելացրել է աջակցություն պրոցեսորների համար, որոնք հրահանգներ են կատարում հերթականությամբ (ըստ կարգի սուպերսկալար խողովակաշար), ինչպիսին է ARM Cortex-A55-ը:
  • AArch64 պլատֆորմի LLDB կարգաբերիչը լիարժեք աջակցություն է տրամադրում Pointer Authentication, MTE (MemTag, Memory Tagging Extension) և SVE ռեգիստրներին: Ավելացվեցին հրամաններ, որոնք թույլ են տալիս պիտակները կապել յուրաքանչյուր հիշողության բաշխման գործողության հետ և կազմակերպել ցուցիչի ստուգում հիշողություն մուտք գործելու ժամանակ, որը պետք է կապված լինի ճիշտ պիտակի հետ:
  • LLDB վրիպազերծիչը և Fortran լեզվի ճակատը՝ Flang-ն ավելացվել են նախագծի կողմից ստեղծված երկուական հավաքներին:

Source: opennet.ru

Добавить комментарий