Pagpagawas sa LLVM 13.0 compiler set

Human sa unom ka bulan nga pag-uswag, ang pagpagawas sa proyekto sa LLVM 13.0 gipresentar - usa ka GCC-compatible toolkit (compilers, optimizers ug code generators) nga nag-compile sa mga programa ngadto sa intermediate bitcode sa RISC-like virtual instructions (usa ka low-level virtual machine nga adunay multi-level nga sistema sa pag-optimize). Ang namugna nga pseudocode mahimong mabag-o gamit ang JIT compiler ngadto sa mga instruksiyon sa makina direkta sa panahon sa pagpatuman sa programa.

Mga Pag-uswag sa Clang 13.0:

  • Gipatuman nga suporta alang sa garantisadong mga tawag sa ikog (pagtawag sa usa ka subroutine sa katapusan sa usa ka function, paghimo sa usa ka ikog recursion kung ang subroutine nagtawag sa iyang kaugalingon). Ang suporta alang sa garantisadong mga tawag sa ikog gihatag sa "[[clang::musttail]]" attribute sa C++ ug "__attribute__((musttail))" sa C, gigamit sa "return" nga pahayag. Gitugotan ka sa bahin nga ipatuman ang mga pag-optimize pinaagi sa pag-deploy sa code sa usa ka patag nga pag-uli aron makatipig sa pagkonsumo sa stack.
  • Ang "paggamit" sa mga deklarasyon ug mga extension sa clang naghatag og suporta alang sa pagtino sa C++ 11-style nga mga hiyas gamit ang "[[]]" format.
  • Gidugang ang bandila nga "-Wreserved-identifier" aron ipakita ang usa ka pasidaan kung ang mga gireserba nga mga identifier gitakda sa code sa gumagamit.
  • Gidugang ang "-Wunused-but-set-parameter" ug "-Wunused-but-set-variable" nga mga bandila aron ipakita ang usa ka pasidaan kung ang usa ka parameter o variable gitakda apan wala gigamit.
  • Gidugang ang "-Wnull-pointer-subtraction" nga bandila aron mag-isyu og pasidaan kung ang code mahimong magpaila sa dili matino nga kinaiya tungod sa paggamit sa usa ka null pointer sa mga operasyon sa pagkunhod.
  • Gidugang ang bandila nga "-fstack-usage" aron makamugna alang sa matag code file og dugang nga ".su" file nga adunay impormasyon mahitungod sa gidak-on sa stack frames alang sa matag function nga gihubit sa file nga giproseso.
  • Usa ka bag-ong tipo sa output ang gidugang sa static analyzer - "sarif-html", nga nanguna sa paghimo sa mga taho nga dungan sa mga format sa HTML ug Sarif. Gidugang bag-ong allocClassWithName check. Kung gipiho ang kapilian nga "-analyzer-display-progress", ang oras sa pagtuki sa matag function gipakita. Ang smart pointer analyzer (alpha.cplusplus.SmartPtr) hapit na andam.
  • Ang mga kapabilidad nga nalangkit sa suporta sa OpenCL gipalapdan. Gidugang nga suporta alang sa bag-ong mga extension cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ug __cl_clang_non_portable_kernel_param_types. Ang pagpatuman sa OpenCL 3.0 nga detalye nagpadayon. Para sa C, ang espesipikasyon sa OpenCL 1.2 gigamit nga default gawas kung ang lain nga bersyon klaro nga gipili. Para sa C++, gidugang ang suporta sa mga file nga adunay extension nga ".clcpp".
  • Ang suporta alang sa mga direktiba sa pagbag-o sa loop (β€œ#pragma omp unrol” ug β€œ#pragma omp tile”) nga gihubit sa espesipikasyon sa OpenMP 5.1 gipatuman.
  • Gidugang nga mga kapilian sa clang-format nga utility: SpacesInLineCommentPrefix aron itakda ang gidaghanon sa mga espasyo sa wala pa ang mga komento, IndentAccessModifiers, LambdaBodyIndentation ug PPIndentWidth aron makontrol ang pag-align sa mga entri, mga ekspresyon sa lambda ug mga direktiba sa preprocessor. Ang mga posibilidad sa paghan-ay sa enumeration sa mga file sa header (SortIncludes) gipalapdan. Gidugang nga suporta alang sa pag-format sa mga file sa JSON.
  • Daghang bahin sa bag-ong mga tseke ang gidugang sa linter clang-tidy.

Pangunang mga inobasyon sa LLVM 13.0:

  • Gidugang ang "-ehcontguard" nga kapilian sa paggamit sa CET (Windows Control-flow Enforcement Technology) nga teknolohiya aron mapanalipdan batok sa pagpatuman sa mga pagpahimulos nga gitukod gamit ang Return-Oriented Programming (ROP) nga mga teknik sa exception handling stage.
  • Ang proyekto sa debuginfo-test giilisan ug ngalan nga cross-project-tests ug gidesinyo sa pagsulay sa mga component gikan sa lain-laing mga proyekto, dili limitado sa impormasyon sa pag-debug.
  • Ang sistema sa asembliya naghatag suporta alang sa pagtukod sa daghang mga pag-apod-apod, pananglitan, ang usa adunay mga utilities, ug ang lain adunay mga librarya alang sa mga developer.
  • Sa backend alang sa arkitektura sa AArch64, ang suporta alang sa Armv9-A RME (Realm Management Extension) ug SME (Scalable Matrix Extension) nga mga extension gipatuman sa assembler.
  • Ang suporta alang sa ISA V68/HVX gidugang sa backend alang sa arkitektura nga Hexagon.
  • Ang backend sa x86 nakapauswag sa suporta alang sa mga processor sa AMD Zen 3.
  • Gidugang nga suporta alang sa GFX1013 RDNA2 APU sa AMDGPU backend.
  • Ang Libc++ nagpadayon sa pagpatuman sa mga bag-ong feature sa C++20 ug C++2b nga mga sumbanan, lakip ang pagkompleto sa "concepts" library. Gidugang nga suporta alang sa std:: filesystem alang sa MinGW-based nga Windows platform. Ang mga file sa header gibulag , Ug . Gidugang ang kapilian sa pagtukod LIBCXX_ENABLE_INCOMPLETE_FEATURES aron ma-disable ang mga file sa header nga wala’y hingpit nga gipatuman nga gamit.
  • Ang mga kapabilidad sa LLD linker gipalapdan, diin ang suporta alang sa Big-endian Aarch64 processors gipatuman, ug ang Mach-O backend gidala sa usa ka estado nga nagtugot sa pag-link sa mga regular nga programa. Lakip ang mga pag-uswag nga gikinahanglan aron masumpay ang Glibc gamit ang LLD.
  • Ang llvm-mca (Machine Code Analyzer) nga utility nagdugang og suporta alang sa mga processor nga nagpatuman sa mga instruksiyon sa han-ay (in-order superscalar pipeline), sama sa ARM Cortex-A55.
  • Ang LLDB debugger para sa AArch64 nga plataporma naghatag og bug-os nga suporta para sa Pointer Authentication, MTE (MemTag, Memory Tagging Extension) ug SVE nga mga rehistro. Gidugang nga mga mando nga nagtugot kanimo sa pagbugkos sa mga tag sa matag operasyon sa alokasyon sa panumduman ug pag-organisar sa usa ka tseke sa pointer kung mag-access sa memorya, nga kinahanglan nga kauban sa husto nga tag.
  • Ang LLDB debugger ug ang frontend alang sa Fortran nga pinulongan - Flang gidugang sa binary assemblies nga gihimo sa proyekto.

Source: opennet.ru

Idugang sa usa ka comment