Vrystelling van die LLVM 13.0-samestellersuite

Na ses maande se ontwikkeling word die vrystelling van die LLVM 13.0-projek aangebied - 'n GCC-versoenbare gereedskapstel (samestellers, optimeerders en kode-opwekkers) wat programme saamstel in 'n intermediêre bitkode van RISC-agtige virtuele instruksies ('n laevlak virtuele masjien met 'n multi-vlak optimering stelsel). Die gegenereerde pseudo-kode kan omgeskakel word deur die JIT-samesteller in masjieninstruksies op die tydstip van programuitvoering.

Verbeterings in Clang 13.0:

  • Geïmplementeerde ondersteuning vir gewaarborgde stertoproepe (oproep van 'n subroetine aan die einde van 'n funksie, wat 'n stertrekursie vorm as die subroetine homself oproep). Ondersteuning vir gewaarborgde stert-oproepe word verskaf deur die "[[clang::musttail]]"-kenmerk in C++ en "__attribute__((musttail))" in C, wat in 'n "return"-stelling gebruik word. Die kenmerk laat jou toe om optimalisering te implementeer deur kode in 'n plat iterasie te ontplooi om stapelverbruik te bespaar.
  • "gebruik" verklarings en clang uitbreidings bied ondersteuning vir die definisie van C++11-styl eienskappe deur die "[[]]" formaat te gebruik.
  • Het die "-Wreserved-identifier" vlag bygevoeg om 'n waarskuwing te vertoon wanneer jy gereserveerde identifiseerders in gebruikerkode spesifiseer.
  • Bygevoeg "-Wunused-but-set-parameter" en "-Wunused-but-set-variable" vlae om 'n waarskuwing te vertoon as 'n parameter of veranderlike gestel is, maar nie gebruik word nie.
  • Bygevoeg "-Wnull-pointer-subtraction"-vlag om 'n waarskuwing uit te reik as die kode ongedefinieerde gedrag kan instel as gevolg van die gebruik van 'n nulwyser in aftrekbewerkings.
  • Het die "-fstack-usage" vlag bygevoeg om vir elke kodelêer 'n bykomende ".su"-lêer te genereer wat inligting bevat oor die grootte van stapelrame vir elke funksie wat in die lêer wat verwerk word gedefinieer.
  • 'n Nuwe uitvoertipe is by die statiese ontleder gevoeg - "sarif-html", wat lei tot die generering van verslae gelyktydig in HTML- en Sarif-formate. Nuwe allocClassWithName-tjek bygevoeg. Wanneer die opsie "-analyzer-display-progress" gespesifiseer word, word die ontledingstyd van elke funksie vertoon. Die slim wyser-ontleder (alpha.cplusplus.SmartPtr) is amper gereed.
  • Die vermoëns wat met OpenCL-ondersteuning geassosieer word, is uitgebrei. Bygevoeg ondersteuning vir nuwe uitbreidings cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields en __cl_clang_non_portable_kernel_param_types. Die implementering van die OpenCL 3.0-spesifikasie het voortgegaan. Vir C word die OpenCL 1.2-spesifikasie by verstek gebruik, tensy 'n ander weergawe uitdruklik gekies word. Vir C++ is ondersteuning vir lêers met die uitbreiding “.clcpp” bygevoeg.
  • Ondersteuning vir lustransformasie-riglyne (“#pragma omp unrol” en “#pragma omp tile”) wat in die OpenMP 5.1-spesifikasie gedefinieer is, is geïmplementeer.
  • Bygevoeg opsies by die clang-formaat nut: SpacesInLineCommentPrefix om die aantal spasies voor opmerkings te definieer, IndentAccessModifiers, LambdaBodyIndentation en PPIndentWidth om die belyning van inskrywings, lambda-uitdrukkings en voorverwerker-aanwysings te beheer. Die moontlikhede om die opsomming van koplêers (SortIncludes) te sorteer, is uitgebrei. Bygevoeg ondersteuning vir die formatering van JSON-lêers.
  • 'n Groot deel van die nuwe tjeks is bygevoeg om linter clang-netjies.

Sleutelinnovasies in LLVM 13.0:

  • Bygevoeg die "-ehcontguard" opsie om CET (Windows Control-flow Enforcement Technology) tegnologie te gebruik om te beskerm teen die uitvoering van uitbuitings wat gebou is met behulp van Return-Oriented Programming (ROP) tegnieke in die uitsonderingshanteringstadium.
  • Die debuginfo-toetsprojek is herdoop na kruisprojektoetse en is ontwerp om komponente van verskillende projekte te toets, nie beperk tot ontfoutingsinligting nie.
  • Die samestellingstelsel bied ondersteuning vir die bou van verskeie verspreidings, byvoorbeeld een met nutsprogramme en die ander met biblioteke vir ontwikkelaars.
  • In die agterkant vir die AArch64-argitektuur word ondersteuning vir die Armv9-A RME (Realm Management Extension) en SME (Scalable Matrix Extension) uitbreidings in die samesteller geïmplementeer.
  • Ondersteuning vir ISA V68/HVX is by die agterkant gevoeg vir die Hexagon-argitektuur.
  • Die x86-agterkant het verbeterde ondersteuning vir AMD Zen 3-verwerkers.
  • Bygevoeg ondersteuning vir GFX1013 RDNA2 APU by die AMDGPU backend.
  • Libc++ gaan voort om nuwe kenmerke van die C++20- en C++2b-standaarde te implementeer, insluitend die voltooiing van die "konsepte"-biblioteek. Bygevoeg ondersteuning vir std :: lêerstelsel vir die MinGW-gebaseerde Windows-platform. Koplêers geskei , En . Bygevoeg bou-opsie LIBCXX_ENABLE_INCOMPLETE_FEATURES om koplêers met nie ten volle geïmplementeerde funksionaliteit te deaktiveer nie.
  • Die vermoëns van die LLD-skakelaar is uitgebrei, waarin ondersteuning vir Big-endian Aarch64-verwerkers geïmplementeer word, en die Mach-O-backend is na 'n toestand gebring wat dit moontlik maak om gereelde programme te koppel. Ingesluit verbeterings wat nodig is om Glibc met behulp van LLD te koppel.
  • Die llvm-mca (Machine Code Analyzer) nut het ondersteuning bygevoeg vir verwerkers wat instruksies in volgorde uitvoer (in-orde superskalêre pyplyn), soos die ARM Cortex-A55.
  • Die LLDB-ontfouter vir die AArch64-platform bied volle ondersteuning vir aanwyserverifikasie, MTE (MemTag, Memory Tagging Extension) en SVE-registers. Bygevoeg opdragte wat jou toelaat om etikette aan elke geheue toewysing bewerking te bind en 'n kontrole van die wyser te organiseer wanneer toegang tot geheue verkry word, wat met die korrekte etiket geassosieer moet word.
  • Die LLDB-ontfouter en die frontend vir die Fortran-taal - Flang is bygevoeg by die binêre samestellings wat deur die projek gegenereer word.

Bron: opennet.ru

Voeg 'n opmerking