LLVM 13.0 konpiladore-multzoaren kaleratzea

Sei hilabeteko garapenaren ondoren, LLVM 13.0 proiektuaren oharra aurkezten da: GCC-rekin bateragarria den tresna-kit bat (konpilatzaileak, optimizatzaileak eta kode-sorgailuak) programak RISC moduko instrukzio birtualen bitarteko bitkode batean konpilatzen dituena (maila baxuko makina birtuala duena). maila anitzeko optimizazio sistema). Sortutako sasi-kodea JIT konpilatzaileak makinaren instrukzioetan bihur dezake programa exekutatzen den unean bertan.

Hobekuntzak Clang 13.0-n:

  • Bermatutako buztan-deien euskarria inplementatu da (azpirutina bati funtzio baten amaieran deitzea, buztan errekurtsioa osatuz azpierrutinak bere buruari deitzen badio). "[[clang::musttail]]" C++-n eta "__attribute__((musttail))" C-ko "[[clang::musttail]]" atributuek eskaintzen dute bermatutako buztan-deien euskarria, "return" adierazpen batean erabiltzen da. Eginbide honek optimizazioak ezartzeko aukera ematen du kodea iterazio lau batean zabalduz pila-kontsumoa aurrezteko.
  • "erabiltzea" adierazpenak eta clang luzapenak C++11 estiloko atributuak definitzeko laguntza eskaintzen dute "[[]]" formatua erabiliz.
  • "-Wreserved-identifier" marka gehitu da erabiltzaile-kodean erreserbatutako identifikatzaileak zehazten dituzunean abisua bistaratzeko.
  • "-Wunused-but-set-parameter" eta "-Wunused-but-set-variable" marka gehitu dira parametro edo aldagai bat ezarri baina erabiltzen ez bada abisua bistaratzeko.
  • "-Wnull-pointer-subtraction" marka gehitu da, kenketa-eragiketetan erakusle nulua erabiltzeagatik kodeak definitu gabeko portaera sor dezakeen abisua emateko.
  • "-fstack-usage" marka gehitu da kode-fitxategi bakoitzeko ".su" fitxategi gehigarri bat sortzeko, prozesatzen ari den fitxategian definitutako funtzio bakoitzeko pila-marken tamainari buruzko informazioa duena.
  • Irteera mota berri bat gehitu zaio analizatzaile estatikoari - "sarif-html", eta horrek aldi berean HTML eta Sarif formatuetan txostenak sortzea dakar. AllocClassWithName egiaztapen berria gehitu da. β€œ-analyzer-display-progress” aukera zehaztean, funtzio bakoitzaren analisi-denbora bistaratzen da. Erakusle adimendunaren analizatzailea (alpha.cplusplus.SmartPtr) ia prest dago.
  • OpenCL laguntzarekin lotutako gaitasunak zabaldu dira. Luzapen berrietarako laguntza gehitu da cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields eta __cl_clang_non_portable_kernel_param_types. OpenCL 3.0 zehaztapena inplementatzen jarraitu da. C-rako, OpenCL 1.2 zehaztapena lehenespenez erabiltzen da, beste bertsio bat esplizituki hautatzen ez bada. C++-rako, ".clcpp" luzapena duten fitxategientzako euskarria gehitu da.
  • OpenMP 5.1 zehaztapenean definitutako begiztak eraldatzeko zuzentarauentzako laguntza ("#pragma omp unrol" eta "#pragma omp tile") inplementatu da.
  • Clang-format utilitateari aukerak gehitu zaizkio: SpacesInLineCommentPrefix iruzkinen aurretik dagoen zuriune kopurua definitzeko, IndentAccessModifiers, LambdaBodyIndentation eta PPIndentWidth sarreren, lambda esamoldeen eta prozesadorearen zuzentarauen lerrokatzea kontrolatzeko. Goiburuko fitxategien zenbaketa (SortIncludes) ordenatzeko aukerak zabaldu dira. JSON fitxategiak formateatzeko laguntza gehitu da.
  • Txeke berrien zati handi bat linter clang-tidy gehitu da.

LLVM 13.0-ko berrikuntza nagusiak:

  • "-ehcontguard" aukera gehitu da CET (Windows Control-flow Enforcement Technology) teknologia erabiltzeko, salbuespenak kudeatzeko fasean itzulera zuzendutako programazioa (ROP) tekniken bidez eraikitako ustiapenen exekuzioaren aurka babesteko.
  • Debuginfo-test proiektua cross-project-tests izena hartu du eta proiektu ezberdinetako osagaiak probatzeko diseinatuta dago, ez arazketa informaziora mugatu.
  • Muntatze-sistemak hainbat banaketa eraikitzeko laguntza eskaintzen du, adibidez, bata utilitateekin, eta bestea garatzaileentzako liburutegiekin.
  • AArch64 arkitekturaren backend-ean, Armv9-A RME (Realm Management Extension) eta SME (Scalable Matrix Extension) luzapenetarako euskarria inplementatzen da muntatzailean.
  • ISA V68/HVX-rako euskarria gehitu da Hexagon arkitekturaren backend-ean.
  • x86 backend-ak AMD Zen 3 prozesadoreetarako laguntza hobetu du.
  • GFX1013 RDNA2 APUrako euskarria gehitu da AMDGPU backend-era.
  • Libc++ C++20 eta C++2b estandarren ezaugarri berriak ezartzen jarraitzen du, "kontzeptuak" liburutegia osatzea barne. MinGW-n oinarritutako Windows plataformarako std::fitxategi-sistemarako euskarria gehitu da. Goiburuko fitxategiak bereizita , Eta . LIBCXX_ENABLE_INCOMPLETE_FEATURES eraikitze-aukera gehitu da goiburuko fitxategiak guztiz inplementatutako funtzionalitateak desgaitzeko.
  • LLD estekatzailearen gaitasunak zabaldu dira, eta bertan Big-endian Aarch64 prozesadoreentzako euskarria ezartzen da eta Mach-O backend-a ohiko programak lotzea ahalbidetzen duen egoera batera eraman da. Glibc LLD erabiliz lotzeko beharrezkoak diren hobekuntzak barne.
  • Llvm-mca (Machine Code Analyzer) utilitateak jarraibideak ordenan exekutatzen dituzten prozesadoreentzako laguntza gehitu du (ordena supereskalar kanalizazioa), hala nola ARM Cortex-A55.
  • AArch64 plataformarako LLDB araztatzaileak laguntza osoa eskaintzen du Pointer Authentication, MTE (MemTag, Memory Tagging Extension) eta SVE erregistroetarako. Memoria esleitzeko eragiketa bakoitzari etiketak lotzeko eta memorian sartzean erakuslearen egiaztapena antolatzeko aukera ematen duten komandoak gehitu dira, etiketa zuzenarekin lotu behar direnak.
  • LLDB araztailea eta Fortran hizkuntzaren frontend-a - Flang proiektuak sortutako muntaketa bitarrei gehitu zaizkie.

Iturria: opennet.ru

Gehitu iruzkin berria