Ukukhishwa kwe-LLVM 13.0 compiler suite

Ngemva kwezinyanga eziyisithupha zokuthuthukiswa, kwethulwa ukukhishwa kwephrojekthi ye-LLVM 13.0 - ikhithi yamathuluzi ehambisana ne-GCC (abahlanganisi, izithuthukisi kanye namakhodi akhiqiza amakhodi) ehlanganisa izinhlelo zibe yi-bitcode ephakathi yemiyalelo ye-RISC efana ne-virtual (umshini wezinga eliphansi one- uhlelo lokusebenzisa amazinga amaningi). I-pseudocode ekhiqiziwe ingaguqulwa kusetshenziswa i-JIT compiler ibe imiyalelo yomshini ngokuqondile ngesikhathi sokwenziwa kohlelo.

Ukuthuthukiswa kwe-Clang 13.0:

  • Usekelo olusetshenziswayo lwezingcingo eziqinisekisiwe (ukushayela i-subroutine ekugcineni komsebenzi, ukwenza i-recursion yomsila uma i-subroutine izibiza ngokwayo). Ukusekela izingcingo eziqinisekisiwe kunikezwa isibaluli esithi "[[clang::musttail]]" ku-C++ kanye nokuthi "__attribute__((musttail))" ku-C, esisetshenziswe esitatimendeni "sokubuyisela". Isici sikuvumela ukuthi usebenzise ukulungiselelwa ngokufaka ikhodi ibe yi-iteration flat ukuze ulondoloze ukusetshenziswa kwesitaki.
  • "ukusebenzisa" izimemezelo nezandiso ze-clang kunikeza usekelo ekuchazeni izibaluli zesitayela se-C++11 kusetshenziswa ifomethi ethi "[[]]".
  • Kwengezwe ifulegi elithi "-Wreserved-indentifier" ukuze ubonise isexwayiso lapho ucacisa izihlonzi ezigodliwe kukhodi yomsebenzisi.
  • Kwengezwe amafulegi "-Wunused-but-set-parameter" kanye namafulegi "-Wunused-but-set-variable" ukuze kuboniswe isexwayiso uma ipharamitha isethiwe kodwa ingasetshenziswa.
  • Kwengezwe ifulegi elithi "-Wnull-pointer-subtraction" ukuze kukhishwe isexwayiso uma ikhodi ingase yethule ukuziphatha okungachazwanga ngenxa yokusetshenziswa kwesikhombi esingenalutho emisebenzini yokukhipha.
  • Kwengezwe ifulegi elithi "-fstack-usage" ukuze kukhiqizwe ifayela lekhodi ngalinye ifayela elengeziwe elithi ".su" eliqukethe ulwazi mayelana nosayizi wezitaki zefreyimu yomsebenzi ngamunye ochazwe kufayela elicutshungulwayo.
  • Uhlobo olusha lokuphumayo lwengezwe ku-static analyzer - “sarif-html”, okuholela ekukhiqizeni imibiko ngesikhathi esisodwa ngefomethi ye-HTML ne-Sarif. Kwengezwe ukuhlola okusha kwe-allocClassWithName. Uma ucacisa inketho ethi “-analyzer-display-progress”, isikhathi sokuhlaziya somsebenzi ngamunye siyaboniswa. I-smart pointer analyzer (alpha.cplusplus.SmartPtr) isicishe isilungile.
  • Amakhono ahlobene nosekelo lwe-OpenCL anwetshiwe. Usekelo olungeziwe lwezandiso ezintsha cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields kanye ne-__cl_clang_non_portable_kernel_param_types. Ukuqaliswa kokucaciswa kwe-OpenCL 3.0 kuqhubekile. Ku-C, ukucaciswa kwe-OpenCL 1.2 kusetshenziswa ngokuzenzakalelayo ngaphandle kwalapho kukhethwe enye inguqulo ngokusobala. Ku-C++, usekelo lwamafayela anesandiso esithi “.clcpp” sengeziwe.
  • Ukusekelwa kweziqondiso zokuguqulwa kwe-loop (“#pragma omp unrol” kanye “nethayela le-#pragma omp”) okuchazwe kuzicaciso ze-OpenMP 5.1 sekuqalisiwe.
  • Izinketho ezingeziwe kunsizakalo yefomethi ye-clang: I-SpacesInLineCommentPrefix ukuchaza inani lezikhala ngaphambi kwamazwana, i-IndentAccessModifiers, i-LambdaBodyIndentation kanye ne-PPIndentWidth ukuze ulawule ukuqondana kokufakiwe, izinkulumo ze-lambda neziqondiso zangaphambi kokucubungula. Amathuba okuhlunga ukubalwa kwamafayela enhlokweni (SortIncludes) anwetshiwe. Kwengezwe usekelo lokufometha amafayela e-JSON.
  • Ingxenye enkulu yamasheke amasha yengezwe ku-linter clang-tidy.

Izinto ezintsha ezibalulekile ku-LLVM 13.0:

  • Kwengezwe inketho ethi “-ehcontguard” yokusebenzisa ubuchwepheshe be-CET (Windows Control-flow Enforcement Technology) ukuze uvikele ekuqhutshweni kwemisebenzi eyakhelwe kusetshenziswa amasu e-Return-Oriented Programming (ROP) esigabeni sokuphatha esihlukile.
  • Iphrojekthi ye-debuginfo-test iqanjwe kabusha ngokuthi i-cross-project-tess futhi yakhelwe ukuhlola izingxenye ezivela kumaphrojekthi ahlukene, hhayi kuphela olwazini lokususa iphutha.
  • Uhlelo lokuhlanganisa luhlinzeka ngosekelo lokwakha ukusatshalaliswa okuningana, isibonelo, eyodwa enezinsiza, kanti enye ngamalabhulali onjiniyela.
  • Ngemuva kwesakhiwo se-AArch64, ukusekelwa kwesandiso se-Armv9-A RME (Realm Management Extension) kanye ne-SME (Scalable Matrix Extension) kusetshenziswa kusihlanganisi.
  • Usekelo lwe-ISA V68/HVX lwengeziwe ku-backend ye-Hexagon architecture.
  • I-backend ye-x86 ithuthukise ukwesekwa kwama-AMD Zen 3 processors.
  • Ukwesekwa okwengeziwe kwe-GFX1013 RDNA2 APU ku-AMDGPU backend.
  • I-Libc++ iyaqhubeka nokusebenzisa izici ezintsha zamazinga e-C++20 kanye ne-C++2b, okuhlanganisa nokuqedwa kwelabhulali "yemiqondo". Ukwesekwa okwengeziwe kwe-std::isistimu yefayela yesikhulumi se-Windows esisekelwe eMinGW. Amafayela unhlokweni , kanye ahlukene. Kwengezwe inketho yokwakha engu-LIBCXX_ENABLE_INCOMPLETE_FEATURES ukuze ukhubaze amafayela kanhlokweni ngokusebenza okungafakwanga ngokugcwele.
  • Amandla esixhumanisi se-LLD anwetshiwe, lapho ukusekelwa kwama-Big-endian Aarch64 processors kuqaliswa, futhi i-backend ye-Mach-O ilethwe esimweni esivumela ukuxhumanisa izinhlelo ezivamile. Kufakwe ukuthuthukiswa okudingekayo ukuze kuxhunywe i-Glibc kusetshenziswa i-LLD.
  • Insiza ye-llvm-mca (I-Machine Code Analyzer) yengeze ukwesekwa kwabacubungula abenza imiyalelo ngokulandelana (ipayipi le-oda le-superscalar), njenge-ARM Cortex-A55.
  • I-LLDB debugger yesikhulumi se-AArch64 inikeza ukusekelwa okugcwele kokuqinisekiswa kwe-Pointer, i-MTE (i-MemTag, i-Memory Tagging Extension) kanye namarejista e-SVE. Imiyalelo eyengeziwe ekuvumela ukuthi ubophe amathegi ekusebenzeni ngakunye kokwabiwa kwememori futhi uhlele isheke lesikhombi lapho ufinyelela inkumbulo, okufanele ihlotshaniswe nethegi efanele.
  • I-LLDB debugger kanye ne-frontend yolimi lwe-Fortran - i-Flang yengezwe kumihlangano kanambambili ekhiqizwe iphrojekthi.

Source: opennet.ru

Engeza amazwana