LLVM 13.0 kompilatoru komplekta izlaišana

Pēc sešu mēnešu izstrādes tika prezentēts LLVM 13.0 projekta izlaidums - ar GCC saderīgs rīku komplekts (kompilatori, optimizētāji un kodu ģeneratori), kas apkopo programmas RISC līdzīgu virtuālo instrukciju starpposma bitkodā (zema līmeņa virtuālā mašīna ar daudzlīmeņu optimizācijas sistēma). Ģenerēto pseidokodu, izmantojot JIT kompilatoru, var pārvērst mašīnas instrukcijās tieši programmas izpildes laikā.

Clang 13.0 uzlabojumi:

  • Ieviests atbalsts garantētiem astes izsaukumiem (apakšprogrammas izsaukšana funkcijas pašās beigās, astes rekursijas veidošana, ja apakšprogramma izsauc pati sevi). Atbalstu garantētajiem izsaukumiem nodrošina atribūts "[[clang::musttail]]" valodā C++ un "__attribute__((musttail))" valodā C, ko izmanto priekšrakstā "return". Šī funkcija ļauj ieviest optimizāciju, izvietojot kodu vienotā iterācijā, lai ietaupītu steka patēriņu.
  • Deklarāciju "izmantošana" un clang paplašinājumi nodrošina atbalstu C++11 stila atribūtu definēšanai, izmantojot formātu "[[]]".
  • Pievienots karodziņš "-Wreserved-identifier", lai parādītu brīdinājumu, kad lietotāja kodā norādāt rezervētos identifikatorus.
  • Pievienoti karodziņi "-Wunused-but-set-parameter" un "-Wunused-but-set-variable", lai parādītu brīdinājumu, ja parametrs vai mainīgais ir iestatīts, bet netiek izmantots.
  • Pievienots karodziņš "-Wnull-pointer-subtraction", lai brīdinātu, ja kods var izraisīt nedefinētu darbību, jo atņemšanas darbībās tiek izmantots nulles rādītājs.
  • Pievienots karodziņš "-fstack-usage", lai katram koda failam ģenerētu papildu ".su" failu, kas satur informāciju par steka kadru lielumu katrai apstrādājamajā failā definētajai funkcijai.
  • Statiskajam analizatoram ir pievienots jauns izvades veids - “sarif-html”, kas ļauj vienlaikus ģenerēt atskaites HTML un Sarif formātos. Pievienota jauna allocClassWithName pārbaude. Norādot opciju “-analyzer-display-progress”, tiek parādīts katras funkcijas analīzes laiks. Viedais rādītāja analizators (alpha.cplusplus.SmartPtr) ir gandrīz gatavs.
  • Ar OpenCL atbalstu saistītās iespējas ir paplašinātas. Pievienots atbalsts jauniem paplašinājumiem cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields un __cl_clang_non_portable_kernel_param_types. OpenCL 3.0 specifikācijas ieviešana ir turpinājusies. C versijā pēc noklusējuma tiek izmantota OpenCL 1.2 specifikācija, ja vien nav skaidri atlasīta cita versija. Programmai C++ ir pievienots atbalsts failiem ar paplašinājumu “.clcpp”.
  • Ir ieviests atbalsts cilpas transformācijas direktīvām (“#pragma omp unrol” un “#pragma omp tile”), kas definētas OpenMP 5.1 specifikācijā.
  • Clang-format utilītai ir pievienotas opcijas: SpacesInLineCommentPrefix, lai definētu atstarpju skaitu pirms komentāriem, IndentAccessModifiers, LambdaBodyIndentation un PPIndentWidth, lai kontrolētu ierakstu, lambda izteiksmju un priekšprocesora direktīvu līdzināšanu. Ir paplašinātas galvenes failu (SortIncludes) uzskaites kārtošanas iespējas. Pievienots atbalsts JSON failu formatēšanai.
  • Liela daļa jaunu pārbaužu ir pievienota, lai šķiņķis būtu kārtībā.

Galvenie jauninājumi LLVM 13.0:

  • Pievienota opcija “-ehcontguard”, lai izmantotu CET (Windows Control-flow Enforcement Technology) tehnoloģiju, lai aizsargātu pret ekspluatāciju izpildi, kas izveidota, izmantojot uz atgriešanos orientētas programmēšanas (ROP) metodes izņēmumu apstrādes stadijā.
  • Debuginfo-test projekts ir pārdēvēts par starpprojektu testiem un ir paredzēts dažādu projektu komponentu testēšanai, ne tikai informācijas atkļūdošanai.
  • Montāžas sistēma nodrošina atbalstu vairāku izplatījumu izveidei, piemēram, vienam ar utilītprogrammām, bet otrā - izstrādātāju bibliotēkām.
  • AArch64 arhitektūras aizmugursistēmā atbalsts Armv9-A RME (Realm Management Extension) un SME (Scalable Matrix Extension) paplašinājumiem ir ieviests montētājā.
  • Hexagon arhitektūras aizmugursistēmai ir pievienots atbalsts ISA V68/HVX.
  • x86 aizmugursistēmai ir uzlabots atbalsts AMD Zen 3 procesoriem.
  • AMDGPU aizmugursistēmai ir pievienots atbalsts GFX1013 RDNA2 APU.
  • Libc++ turpina ieviest jaunas C++20 un C++2b standartu funkcijas, tostarp “jēdzienu” bibliotēkas pabeigšanu. Pievienots atbalsts std::failu sistēmai uz MinGW balstītai Windows platformai. Galvenes faili , un ir atdalīti. Pievienota veidošanas opcija LIBCXX_ENABLE_INCOMPLETE_FEATURES, lai atspējotu galvenes failus ar nepilnīgi ieviestu funkcionalitāti.
  • Paplašinātas LLD linkera iespējas, kurā ir ieviests atbalsts Big-endian Aarch64 procesoriem, un Mach-O aizmugure ir nogādāta stāvoklī, kas ļauj saistīt parastās programmas. Iekļauti uzlabojumi, kas nepieciešami, lai saistītu Glibc, izmantojot LLD.
  • Llvm-mca (Machine Code Analyzer) utilīta ir pievienojusi atbalstu procesoriem, kas izpilda instrukcijas secībā (kārtības superskalārais konveijers), piemēram, ARM Cortex-A55.
  • LLDB atkļūdotājs AArch64 platformai nodrošina pilnu atbalstu rādītāja autentifikācijai, MTE (MemTag, Memory Tagging Extension) un SVE reģistriem. Pievienotas komandas, kas ļauj saistīt tagus katrai atmiņas piešķiršanas darbībai un organizēt rādītāja pārbaudi, piekļūstot atmiņai, kurai jābūt saistītai ar pareizo tagu.
  • LLDB atkļūdotājs un Fortran valodas priekšgals - Flang ir pievienoti projekta ģenerētajiem binārajiem mezgliem.

Avots: opennet.ru

Pievieno komentāru