Pagpagawas sa LLVM 12.0 compiler set

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

  • Ang suporta alang sa "lagmit" ug "dili mahimo" nga mga hiyas nga gisugyot sa C ++ 20 nga sumbanan gipatuman ug gipalihok pinaagi sa default, nga gitugotan ang optimizer nga mahibal-an bahin sa posibilidad nga ma-trigger ang conditional construct (pananglitan, "[[lagmit] ]] kon (random > 0) {β€œ).
  • Gidugang nga suporta alang sa AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) ug Intel Sapphire Rapids (-march=sapphirerapids) nga mga processor.
  • Gidugang nga suporta alang sa "-march=x86-64-v[234]" nga mga bandila aron mapili ang x86-64 nga lebel sa arkitektura (v2 - naglangkob sa SSE4.2, SSSE3, POPCNT ug CMPXCHG16B nga mga extension; v3 - AVX2 ug MOVBE; v4 - AVX-512 .
  • Gidugang nga suporta alang sa Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) ug Fujitsu A64FX (a64fx) nga mga processor. Pananglitan, aron mahimo ang mga pag-optimize alang sa Neoverse-V1 nga mga CPU, mahimo nimong ipiho ang "-mcpu=neoverse-v1".
  • Alang sa arkitektura sa AArch64, ang bag-ong mga flag sa compiler nga "-moutline-atomics" ug "-mno-outline-atomics" gidugang aron mahimo o ma-disable ang mga function sa pagtabang sa atomic operation, sama sa "__aarch64_cas8_relax". Ang maong mga function makamatikod sa runtime kon ang LSE (Large System Extensions) nga suporta anaa ug gamiton ang gihatag nga atomic processor nga mga instruksiyon o mobalik sa paggamit sa LL/SC (Load-link/store-conditional) nga mga instruksiyon para sa pag-synchronize.
  • Gidugang ang "-fbinutils-version" nga kapilian aron mapili ang target nga bersyon sa binutils suite para sa pagkaangay sa mas daan nga linker ug assembler nga kinaiya.
  • Para sa ELF executable files, sa diha nga ang "-gz" nga bandera gipiho, ang compression sa debugging nga impormasyon gamit ang zlib library gi-enable pinaagi sa default (gz=zlib). Ang pagsumpay sa resulta nga mga file sa butang nagkinahanglan og lld o GNU binutils 2.26+. Aron ibalik ang pagkaangay sa mga daan nga bersyon sa binutils, mahimo nimong ipiho ang "-gz=zlib-gnu".
  • Ang 'kini' nga pointer giproseso na karon gamit ang nonnull ug dereferenceable(N) checks. Aron matangtang ang nonnull attribute kung kinahanglan nimo gamiton ang NULL values, mahimo nimong gamiton ang opsyon nga "-fdelete-null-pointer-checks".
  • Sa plataporma sa Linux, ang "-fasynchronous-unwind-tables" mode gipagana para sa AArch64 ug PowerPC nga mga arkitektura aron makamugna og unwind call tables, sama sa GCC.
  • Sa "#pragma clang loop vectorize_width" gidugang ang abilidad sa pagtino sa "fixed" (default) ug "scalable" nga mga kapilian sa pagpili sa pamaagi sa vectorization. Ang "scalable" mode, independente sa vector length, kay experimental ug magamit sa hardware nga nagsuporta sa scalable vectorization.
  • Gipauswag nga suporta alang sa plataporma sa Windows: Ang opisyal nga binary nga mga asembliya alang sa Windows sa Arm64 nga mga sistema giandam na, lakip ang Clang compiler, LLD linker ug compiler-rt runtime nga mga librarya. Kung nagtukod alang sa MinGW target nga mga platform, ang .exe suffix gidugang, bisan kung nag-cross-compile.
  • Ang mga kapabilidad nga may kalabutan sa suporta alang sa OpenCL, OpenMP ug CUDA gipalapdan. Gidugang nga mga opsyon "-cl-std=CL3.0" ug "-cl-std=CL1.0" aron mapili ang macro nga mga opsyon para sa OpenCL 3.0 ug OpenCL 1.0. Ang mga himan sa diagnostic gipalapdan.
  • Gidugang nga suporta alang sa HRESET, UITR, ug AVXVNNI nga mga instruksyon nga gipatuman sa pipila ka x86-based nga mga processor.
  • Sa x86 nga mga sistema, ang suporta alang sa "-mtune=" nga opsyon gi-enable, nga makapahimo sa pinili nga microarchitectural optimizations bisan unsa pa ang "-march=" nga bili.
  • Ang static nga analista nagpauswag sa pagproseso sa pipila ka mga gimbuhaton sa POSIX ug labi nga gipauswag ang determinasyon sa sangputanan sa mga operasyon sa kondisyon kung adunay daghang mga simbolo nga kantidad sa pagtandi. Bag-ong mga tseke ang gidugang: fuchia.HandleChecker (naghubit sa mga gunitanan sa mga istruktura), webkit.UncountedLambdaCapturesChecker webkit ug alpha.webkit.UncountedLocalVarsChecker (nag-isip sa mga peculiarities sa pagtrabaho sa mga pointer sa WebKit engine code).
  • Sa mga ekspresyon nga gigamit sa konteksto sa mga constants, ang paggamit sa built-in nga mga function __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, bswapq , _castf*, __rol* ug __ror*.
  • Gidugang ang opsyon sa BitFieldColonSpacing sa clang-format nga utility aron mapili ang spacing sa palibot sa mga identifier, column, ug field definitions.
  • Ang clangd caching server (Clang Server) sa plataporma sa Linux nakamenos pag-ayo sa konsumo sa panumduman atol sa dugay nga operasyon (ang mga pana-panahong tawag sa malloc_trim gihatag aron ibalik ang libre nga mga pahina sa memorya sa operating system).

Pangunang mga inobasyon sa LLVM 12.0:

  • Ang suporta alang sa llvm-build build tool nga gisulat sa Python gihunong na, ug sa baylo ang proyekto hingpit nga gibalhin sa paggamit sa CMake build system.
  • Sa backend alang sa AArch64 nga arkitektura, ang suporta alang sa plataporma sa Windows gipauswag: ang husto nga henerasyon sa assembler nga output alang sa target nga mga sistema sa Windows nasiguro, ang henerasyon sa mga datos sa unwind nga mga tawag na-optimize (ang gidak-on sa maong mga datos gikunhoran sa 60 %), ang abilidad sa paghimo og unwind data gamit ang assembler gidugang mga direktiba .seh_*.
  • Ang backend alang sa arkitektura sa PowerPC adunay mga bag-ong pag-optimize alang sa mga loop ug inline nga pag-deploy, gipalapdan nga suporta alang sa mga processor sa Power10, dugang nga suporta alang sa mga panudlo sa MMA alang sa pagmaniobra sa matrix, ug gipaayo nga suporta alang sa operating system sa AIX.
  • Ang x86 backend nagdugang suporta alang sa AMD Zen 3, Intel Alder Lake ug Intel Sapphire Rapids nga mga processor, ingon man usab sa HRESET, UITR ug AVXVNNI nga mga instruksyon sa processor. Suporta para sa MPX (Memory Protection Extension) para sa pagsusi sa mga pointer aron masiguro nga ang mga utlanan sa memorya dili na suportado (kini nga teknolohiya dili kaylap ug gikuha na gikan sa GCC ug clang). Gidugang nga suporta sa assembler para sa {disp32} ug {disp8} prefixes ug ang .d32 ug .d8 suffixes aron makontrol ang gidak-on sa operand offsets ug jumps. Gidugang ang usa ka bag-ong hiyas nga "tune-cpu" aron makontrol ang paglakip sa mga pag-optimize sa microarchitectural.
  • Usa ka bag-ong mode nga "-fsanitize=unsigned-shift-base" ang gidugang sa integer problem detector (integer sanitizer, "-fsanitize=integer") aron makit-an ang pag-awas sa mga unsigned nga integer pagkahuman sa gamay nga pagbalhin sa wala.
  • Sa lain-laing mga detector (asan, cfi, lsan, msan, tsan, ubsan sanitizer) suporta alang sa Linux distributions uban sa standard Musl librarya gidugang.
  • Ang mga kapabilidad sa LLD linker gipalapdan. Gipauswag nga suporta alang sa ELF format, lakip ang dugang nga mga kapilian "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program -pagkakita" " Gipauswag nga suporta sa MinGW. Para sa Mach-O format (macOS), suporta para sa arm64, arm, ug i386 nga mga arkitektura, link-time optimizations (LTO), ug stack unwinding para sa exception handling gipatuman.
  • Ang Libc++ nagpatuman ug mga bag-ong feature sa C++20 standard ug nagsugod na sa pagpalambo sa mga feature sa C++2b specification. Gidugang nga suporta alang sa pagtukod nga adunay dili pagpagana sa suporta sa lokalisasyon ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") ug mga himan alang sa pagmugna og pseudo-random nga mga numero ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").

Source: opennet.ru

Idugang sa usa ka comment