Release fan de LLVM 13.0-kompilersuite

Nei seis moannen fan ûntwikkeling waard de frijlitting fan it LLVM 13.0-projekt presintearre - in GCC-kompatibele toolkit (kompilers, optimizers en koadegenerators) dy't programma's kompilearret yn tuskenlizzende bitcode fan RISC-like firtuele ynstruksjes (in firtuele masine op leech nivo mei in multi-level optimalisaasje systeem). De oanmakke pseudokoade kin wurde omboud mei in JIT-kompiler yn masineynstruksjes direkt op it momint fan útfiering fan it programma.

Ferbetterings yn Clang 13.0:

  • Implementearre stipe foar garandearre sturtoproppen (in subroutine ropt oan 'e ein fan in funksje, it foarmjen fan in sturtrekursje as de subroutine himsels neamt). Stipe foar garandearre sturtoproppen wurdt fersoarge troch it "[[clang :: musttail]]" attribút yn C++ en "__attribute__((musttail))" yn C, brûkt yn in "return" statement. De funksje lit jo optimisaasjes ymplementearje troch koade yn te setten yn in platte iteraasje om stapelferbrûk te besparjen.
  • "gebrûk fan" deklaraasjes en clang-útwreidingen jouwe stipe foar it definiearjen fan C++11-stylattributen mei it "[[]]"-formaat.
  • De flagge "-Wreserved-identifier" tafoege om in warskôging wer te jaan as jo reservearre identifiers yn brûkerskoade oantsjutte.
  • Flaggen "-Wunused-but-set-parameter" en "-Wunused-but-set-variable" tafoege om in warskôging wer te jaan as in parameter of fariabele ynsteld is, mar net brûkt.
  • Flagge "-Wnull-pointer-subtraction" tafoege om in warskôging út te jaan as de koade ûndefinieare gedrach kin yntrodusearje troch it brûken fan in nuloanwizer yn subtraksjeoperaasjes.
  • De flagge "-fstack-usage" tafoege om foar elke koadetriem in ekstra ".su"-bestân te generearjen mei ynformaasje oer de grutte fan stackframes foar elke funksje definieare yn it bestân dat wurdt ferwurke.
  • In nij útfiertype is tafoege oan de statyske analysator - "sarif-html", wat liedt ta it generearjen fan rapporten tagelyk yn HTML- en Sarif-formaten. Nije allocClassWithName-kontrôle tafoege. As jo ​​de opsje "-analyzer-display-progress" oantsjutte, wurdt de analysetiid fan elke funksje werjûn. De smart pointer analysator (alpha.cplusplus.SmartPtr) is hast klear.
  • De mooglikheden ferbûn mei OpenCL-stipe binne útwreide. Stipe tafoege foar nije útwreidingen cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields en __cl_clang_non_portable_kernel_param_types. De ymplemintaasje fan 'e OpenCL 3.0-spesifikaasje is trochgean. Foar C wurdt de OpenCL 1.2-spesifikaasje standert brûkt, útsein as in oare ferzje eksplisyt selektearre is. Foar C++ is stipe foar bestannen mei de tafoeging ".clcpp" tafoege.
  • Stipe foar rjochtlinen foar looptransformaasje ("#pragma omp unrol" en "#pragma omp tile") definieare yn 'e OpenMP 5.1-spesifikaasje is ymplementearre.
  • Opsjes tafoege oan it hulpprogramma clang-formaat: SpacesInLineCommentPrefix om it oantal spaasjes foar opmerkingen te definiearjen, IndentAccessModifiers, LambdaBodyIndentation en PPIndentWidth om de ôfstimming fan yngongen, lambda-útdrukkingen en preprocessor-rjochtlinen te kontrolearjen. De mooglikheden foar it sortearjen fan de opsomming fan koptekstbestannen (SortIncludes) binne útwreide. Stipe tafoege foar opmaak fan JSON-bestannen.
  • In grut part fan nije sjeks binne tafoege oan linter clang-tidy.

Wichtige ynnovaasjes yn LLVM 13.0:

  • De opsje "-ehcontguard" tafoege om CET (Windows Control-flow Enforcement Technology) technology te brûken om te beskermjen tsjin de útfiering fan eksploaten boud mei Return-Oriented Programming (ROP) techniken yn 'e útsûnderingsôfhanneling.
  • It debuginfo-testprojekt is omneamd ta cross-project-tests en is ûntworpen om komponinten út ferskate projekten te testen, net beheind ta debuggenynformaasje.
  • It assemblagesysteem biedt stipe foar it bouwen fan ferskate distribúsjes, bygelyks ien mei nutsbedriuwen, en de oare mei biblioteken foar ûntwikkelders.
  • Yn 'e efterkant foar de AArch64-arsjitektuer wurdt stipe foar de Armv9-A RME (Realm Management Extension) en SME (Scalable Matrix Extension) tafoegings ymplementearre yn' e assembler.
  • Stipe foar ISA V68 / HVX is tafoege oan 'e efterkant foar de Hexagon-arsjitektuer.
  • De x86-backend hat ferbettere stipe foar AMD Zen 3-processors.
  • Stipe tafoege foar GFX1013 RDNA2 APU oan 'e AMDGPU-backend.
  • Libc++ giet troch mei it ymplementearjen fan nije funksjes fan de C++20- en C++2b-standerts, ynklusyf it foltôgjen fan de bibleteek "konsepten". Stipe tafoege foar std :: bestânsysteem foar it MinGW-basearre Windows-platfoarm. Koptekstbestannen skieden , En . Bouwopsje LIBCXX_ENABLE_INCOMPLETE_FEATURES tafoege om koptekstbestannen út te skeakeljen mei net folslein ymplementearre funksjonaliteit.
  • De mooglikheden fan 'e LLD-linker binne útwreide, wêryn stipe foar Big-endian Aarch64-processors wurdt ymplementearre, en de Mach-O-backend is brocht nei in steat dy't it keppeljen fan reguliere programma's mooglik makket. Ynbegrepen ferbetterings nedich om Glibc te keppeljen mei LLD.
  • It hulpprogramma llvm-mca (Machine Code Analyzer) hat stipe tafoege foar processors dy't ynstruksjes yn folchoarder útfiere (in-order superscalar pipeline), lykas de ARM Cortex-A55.
  • De LLDB-debugger foar it AArch64-platfoarm biedt folsleine stipe foar Pointer Authentication, MTE (MemTag, Memory Tagging Extension) en SVE-registers. Tafoege kommando's wêrmei jo te bine tags oan eltse ûnthâld tawizing operaasje en organisearje in kontrôle fan de oanwizer by tagong ta ûnthâld, dat moat wurde assosjearre mei de juste tag.
  • De LLDB-debugger en de frontend foar de Fortran-taal - Flang binne tafoege oan de binêre assemblies dy't troch it projekt generearre binne.

Boarne: opennet.ru

Add a comment