Liberasyon LLVM 13.0 konpilatè suite a

Apre sis mwa nan devlopman, yo te prezante liberasyon pwojè LLVM 13.0 la - yon zouti ki konpatib ak GCC (konpilateur, optimisateur ak jeneratè kòd) ki konpile pwogram yo nan bitkod entèmedyè enstriksyon vityèl ki tankou RISC (yon machin vityèl ki ba nivo ak yon sistèm optimize milti-nivo). Pseudokod pwodwi a ka konvèti lè l sèvi avèk yon du JIT nan enstriksyon machin dirèkteman nan moman ekzekisyon pwogram lan.

Amelyorasyon nan Clang 13.0:

  • Aplike sipò pou garanti ke apèl (rele yon sousroutine nan fen yon fonksyon, fòme yon rekursion ke si sousroutine a rele tèt li). Sipò pou apèl garanti ke yo bay nan atribi "[[clang::musttail]]" nan C++ ak "__attribute__((musttail))" nan C, yo itilize nan yon deklarasyon "retounen". Karakteristik la pèmèt ou aplike optimize pa deplwaye kòd nan yon iterasyon plat pou konsève pou konsomasyon chemine.
  • "itilize" deklarasyon ak ekstansyon clang bay sipò pou defini atribi estil C++11 lè l sèvi avèk fòma "[[]]".
  • Te ajoute drapo "-Wreserved-identifier" pou montre yon avètisman lè yo espesifye idantifyan rezève yo nan kòd itilizatè.
  • Te ajoute drapo "-Wunused-but-set-parameter" ak "-Wunused-but-set-variable" pou montre yon avètisman si yon paramèt oswa yon varyab mete men li pa itilize.
  • Te ajoute drapo "-Wnull-pointer-subtraction" pou bay yon avètisman si kòd la ta ka prezante yon konpòtman ki pa defini akòz itilizasyon yon pointeur nil nan operasyon soustraksyon.
  • Te ajoute drapo "-fstack-usage" pou jenere pou chak fichye kòd yon fichye adisyonèl ".su" ki gen enfòmasyon sou gwosè ankadreman pile pou chak fonksyon ki defini nan dosye k ap trete a.
  • Yon nouvo kalite pwodiksyon te ajoute nan analizè estatik la - "sarif-html", ki mennen nan jenerasyon an nan rapò ansanm nan fòma HTML ak Sarif. Te ajoute yon nouvo chèk allocClassWithName. Lè w presize opsyon "-analyzer-display-progress" la, tan analiz chak fonksyon parèt. Analyseur konsèy entelijan (alpha.cplusplus.SmartPtr) prèske pare.
  • Kapasite ki asosye ak sipò OpenCL yo te elaji. Te ajoute sipò pou nouvo ekstansyon cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ak __cl_clang_non_portable_kernel_param_types. Aplikasyon spesifikasyon OpenCL 3.0 la kontinye. Pou C, yo itilize spesifikasyon OpenCL 1.2 pa default sof si yo chwazi yon lòt vèsyon klèman. Pou C++, yo te ajoute sipò pou dosye ki gen ekstansyon ".clcpp".
  • Sipò pou direktiv transfòmasyon bouk ("#pragma omp unrol" ak "#pragma omp mozayik") defini nan spesifikasyon OpenMP 5.1 yo te aplike.
  • Te ajoute opsyon nan sèvis piblik fòma clang la: SpacesInLineCommentPrefix pou defini kantite espas anvan kòmantè, IndentAccessModifiers, LambdaBodyIndentation ak PPIndentWidth pou kontwole aliyman antre, ekspresyon lambda ak direktiv preprosesè yo. Posiblite yo pou klasman enimerasyon an nan dosye header (SortIncludes) yo te elaji. Te ajoute sipò pou fòma fichye JSON.
  • Yon gwo pòsyon nan nouvo chèk yo te ajoute nan linter clang-tidy.

Inovasyon kle nan LLVM 13.0:

  • Te ajoute opsyon "-ehcontguard" pou itilize teknoloji CET (Windows Control-flow Enforcement Technology) pou pwoteje tèt ou kont ekzekisyon eksplwatasyon ki te konstwi lè l sèvi avèk teknik ROP (Retounen-Oriented Programming) nan etap manyen eksepsyon yo.
  • Pwojè debuginfo-tès la te chanje non kwa-pwojè-tès epi li fèt pou teste konpozan ki soti nan diferan pwojè, pa limite a enfòmasyon debogaj.
  • Sistèm asanble a bay sipò pou bati plizyè distribisyon, pou egzanp, youn ak sèvis piblik, ak lòt la ak bibliyotèk pou devlopè.
  • Nan backend pou achitekti AArch64, sipò pou ekstansyon Armv9-A RME (Realm Management Extension) ak SME (Scalable Matrix Extension) aplike nan asanblaj la.
  • Sipò pou ISA V68/HVX te ajoute nan backend pou achitekti Egzagòn lan.
  • Backend x86 la amelyore sipò pou processeurs AMD Zen 3.
  • Te ajoute sipò pou GFX1013 RDNA2 APU nan backend AMDGPU la.
  • Libc++ kontinye aplike nouvo karakteristik estanda C++20 ak C++2b, ki gen ladann fini bibliyotèk "konsèp". Te ajoute sipò pou std::filesystem pou platfòm Windows ki baze sou MinGW la. Fichye header , ak yo separe. Te ajoute opsyon bati LIBCXX_ENABLE_INCOMPLETE_FEATURES pou enfim fichye header ak fonksyon ki pa aplike totalman.
  • Kapasite LLD linker yo te elaji, kote sipò pou processeurs Big-endian Aarch64 yo aplike, epi backend Mach-O te mennen nan yon eta ki pèmèt lyen pwogram regilye yo. Amelyorasyon enkli ki nesesè pou konekte Glibc lè l sèvi avèk LLD.
  • Sèvis piblik llvm-mca (Machine Code Analyzer) te ajoute sipò pou processeurs ki egzekite enstriksyon yo nan lòd (nan lòd sipèskalar tiyo), tankou ARM Cortex-A55.
  • Debugger LLDB pou platfòm AArch64 bay sipò total pou Pointer Authentication, MTE (MemTag, Memory Tagging Extension) ak anrejistreman SVE. Te ajoute kòmandman ki pèmèt ou mare tags nan chak operasyon alokasyon memwa epi òganize yon chèk nan konsèy la lè w ap jwenn aksè nan memwa, ki dwe asosye ak tag ki kòrèk la.
  • Debugger LLDB ak entèfas pou lang Fortran - Flang yo te ajoute nan asanble binè pwojè a te kreye.

Sous: opennet.ru

Add nouvo kòmantè