Pagpagawas sa LLVM 15.0 compiler set

Human sa unom ka bulan nga pag-uswag, ang pagpagawas sa proyekto sa LLVM 15.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.

Daghang mga pag-uswag sa Clang 15.0:

  • Alang sa mga sistema nga gibase sa x86 nga arkitektura, ang bandila nga "-fzero-call-used-regs" gidugang, nga nagsiguro nga ang tanan nga mga rehistro sa CPU nga gigamit sa function gi-reset sa zero sa wala pa ibalik ang kontrol gikan sa function. Gitugotan ka sa kini nga kapilian nga mapanalipdan batok sa pagtulo sa kasayuran gikan sa mga gimbuhaton ug makunhuran ang gidaghanon sa mga bloke nga angay alang sa pagtukod sa mga gadget sa ROP (Return-Oriented Programming) sa mga pagpahimulos sa gibana-bana nga 20%.
  • Gipatuman ang randomization sa memory placement sa mga istruktura alang sa C code, nga nagpakomplikado sa pagkuha sa datos gikan sa mga istruktura kung adunay pagpahimulos sa mga kahuyangan. Gi-on ug gi-off ang randomize gamit ang randomize_layout ug no_randomize_layout attributes, ug gikinahanglan ang pagbutang og liso gamit ang "-frandomize-layout-seed" o "-frandomize-layout-seed-file" nga bandera.
  • Gidugang ang "-fstrict-flex-arrays=" flag ", diin makontrol nimo ang mga utlanan alang sa usa ka flexible array nga elemento sa mga istruktura (Flexible Array Members, usa ka han-ay sa dili tino nga gidak-on sa katapusan sa istruktura). Kung gibutang sa 0 (default), ang katapusan nga elemento sa istruktura nga adunay array kanunay nga giproseso ingon usa ka flexible array, 1 - ang mga gidak-on lamang [], [0] ug [1] giproseso ingon usa ka flexible array, 2 - mga gidak-on ra. Ang [] ug [0] giproseso sama sa usa ka flexible array.
  • Gidugang ang eksperimento nga suporta alang sa C-like nga pinulongan nga HLSL (High-Level Shader Language), nga gigamit sa DirectX alang sa pagsulat sa mga shaders.
  • Gidugang ang "-Warray-parameter" aron magpasidaan bahin sa nag-overriding nga mga gimbuhaton nga adunay dili magkatugma nga mga deklarasyon sa argumento nga adunay kalabotan sa mga pirmi ug variable nga gitas-on nga mga arrays.
  • Gipauswag nga pagkaangay sa MSVC. Gidugang nga suporta alang sa "#pragma function" (nagtudlo sa compiler sa paghimo ug function call imbes sa inline nga pagpalapad) ug "#pragma alloc_text" (naghubit sa ngalan sa seksyon uban sa function code) nga gihatag sa MSVC. Gidugang nga suporta alang sa MSVC-compatible /JMC ug /JMC nga mga bandila.
  • Ang trabaho nagpadayon sa pagsuporta sa umaabot nga mga sumbanan sa C2X ug C++23. Alang sa C nga pinulongan, ang mosunod gipatuman: ang noreturn attribute, ang keywords false ug true, ang _BitInt(N) type para sa integers sa gihatag nga bit depth, *_WIDTH macros, ang u8 prefix para sa UTF-8 encoded characters.

    Para sa C ++, ang mosunod gipatuman: module merging, ABI isolation of function members, ordered dynamic initialization of non-local variables in modules, multidimensional index operators, auto(x), non-literal variables, goto ug labels sa functions nga gideklarar isip constexpr , gilimitahan ang mga han-ay sa pag-ikyas, ginganlan og mga karakter sa pag-ikyas.

  • Ang mga kapabilidad nga nalangkit sa suporta sa OpenCL ug OpenMP gipalapdan. Gidugang nga suporta alang sa OpenCL extension cl_khr_subgroup_rotate.
  • Alang sa x86 nga arkitektura, gidugang ang proteksyon batok sa mga kahuyangan sa mga processor nga gipahinabo sa espekulatibo nga pagpatuman sa mga panudlo pagkahuman sa wala’y kondisyon nga operasyon sa paglukso sa unahan. Ang problema mahitabo tungod sa preemptive nga pagproseso sa mga instruksyon diha-diha dayon human sa instruksiyon sa sanga sa memorya (SLS, Straight Line Speculation). Aron mahimo ang proteksyon, ang opsyon nga "-mharden-sls=[walay|tanan|balik|dili direkta-jmp]" gisugyot.
  • Alang sa mga plataporma nga nagsuporta sa extension sa SSE2, ang _Float16 nga tipo gidugang, nga gisundog gamit ang float type sa kaso sa kakulang sa suporta alang sa AVX512-FP16 nga mga instruksyon.
  • Gidugang ang "-m[no-]rdpru" nga bandila aron makontrol ang paggamit sa panudlo sa RDPRU, gisuportahan sugod sa mga processor sa AMD Zen2.
  • Gidugang ang bandera nga "-mfunction-return=thunk-extern" aron mapanalipdan batok sa pagkahuyang sa RETBLEED, nga naglihok pinaagi sa pagdugang usa ka han-ay sa mga panudlo nga wala maglakip sa pag-apil sa mekanismo sa espekulatibo nga pagpatuman alang sa dili direkta nga mga sanga.

Pangunang mga inobasyon sa LLVM 15.0:

  • Gidugang nga suporta alang sa Cortex-M85 CPU, Armv9-A, Armv9.1-A ug Armv9.2-A nga mga arkitektura, Armv8.1-M PACBTI-M nga mga extension.
  • Usa ka eksperimento nga backend alang sa DirectX ang gidugang nga nagsuporta sa format nga DXIL (DirectX Intermediate Language) nga gigamit alang sa DirectX shaders. Gipaandar ang backend pinaagi sa pagpiho sa parameter nga "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" sa panahon sa asembliya.
  • Ang Libc++ nagpadayon sa pagpatuman sa mga bag-ong feature sa C++20 ug C++2b nga mga sumbanan, lakip ang pagkompleto sa pagpatuman sa "format" nga librarya ug ang gisugyot nga eksperimento nga bersyon sa "ranges" library.
  • Gipaayo nga mga backend alang sa x86, PowerPC ug RISC-V nga mga arkitektura.
  • Ang mga kapabilidad sa LLD linker ug ang LLDB debugger gipauswag.

Source: opennet.ru

Idugang sa usa ka comment