Kuburitswa kweLLVM 12.0 compiler suite

Mushure memwedzi mitanhatu yebudiriro, kuburitswa kwechirongwa cheLLVM 12.0 kwakaunzwa - chishandiso chinoenderana neGCC (macompilers, optimizers uye macode jenareta) anounganidza zvirongwa kuita yepakati bitcode yeRISC-senge mirairo chaiyo (yakaderera-level virtual muchina une Multi-level optimization system). Iyo pseudocode inogadzirwa inogona kushandurwa uchishandisa JIT compiler kuita mirairo yemuchina zvakananga panguva yekuitwa kwechirongwa.

Kuvandudzwa muClang 12.0:

  • Tsigiro ye "zvichida" uye "zvisingaite" hunhu hunotsanangurwa muC ++ 20 chiyero chakaitwa uye chakagoneswa nekusarudzika, zvichibvumira iyo optimizer kuti iziviswe nezve mukana weiyo yemamiriro ekuvaka inokonzereswa (semuenzaniso, β€œ[[zvichida]. ]] kana (zvisina kurongeka> 0) {β€œ).
  • Yakawedzerwa rutsigiro rwe AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) uye Intel Sapphire Rapids (-march=sapphirerapids) processors.
  • Yakawedzerwa rutsigiro rwe "-march=x86-64-v[234]" mireza kusarudza x86-64 mazinga ekuvaka (v2 - inovhara SSE4.2, SSSE3, POPCNT uye CMPXCHG16B ekuwedzera; v3 - AVX2 uye MOVBE; v4 - AVX-512 ) .
  • Yakawedzerwa rutsigiro rweArm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) uye Fujitsu A64FX (a64fx) processors. Semuenzaniso, kugonesa optimizations yeNeoverse-V1 CPUs, unogona kudoma "-mcpu=neoverse-v1".
  • Kune iyo AArch64 dhizaini, mireza mitsva yekubatanidza "-moutline-atomics" uye "-mno-outline-atomics" yakawedzerwa kugonesa kana kudzima maatomu emubatsiri mabasa, akadai se "__aarch64_cas8_relax". Mabasa akadaro anoona panguva yekumhanya kana LSE (Large System Extensions) tsigiro iripo uye shandisa iyo yakapihwa atomic processor mirairo kana kudzokera kukushandisa LL/SC (Load-link/store-conditional) mirairo yekuyananisa.
  • Yakawedzerwa "-fbinutils-version" sarudzo yekusarudza iyo yakanangwa vhezheni yebinutils suite kuti ienderane neyekare linker uye assembler maitiro.
  • Kune ELF mafaera anogona kuitiswa, kana "-gz" mureza watsanangurwa, kudzvanya kweruzivo rwekugadzirisa uchishandisa zlib raibhurari kunogoneswa nekusarudzika (gz=zlib). Kubatanidza mafaera echinhu chabuda kunoda lld kana GNU binutils 2.26+. Kuti udzorere kuenderana neshanduro dzekare dzebinutils, unogona kutsanangura "-gz=zlib-gnu".
  • Iyo 'iyi' pointer ikozvino yakagadziriswa nenonnull uye dereferenceable (N) cheki. Kubvisa iyo nonnull hunhu kana iwe uchida kushandisa NULL tsika, unogona kushandisa "-fdelete-null-pointer-checks" sarudzo.
  • Papuratifomu yeLinux, iyo "-fasynchronous-unwind-tables" modhi inogoneswa kune iyo AArch64 uye PowerPC zvivakwa kugadzira unwind yekufona matafura, senge muGCC.
  • Mu "#pragma clang loop vectorize_width" yakawedzera kugona kutsanangura "yakagadziriswa" (default) uye "scalable" sarudzo dzekusarudza nzira yevectorization. Iyo "scalable" modhi, yakazvimirira yevector kureba, ndeyekuyedza uye inogona kushandiswa pane Hardware inotsigira scalable vectorization.
  • Rutsigiro rwakavandudzwa rweWindows platform: Magungano epamutemo emabhinari eWindows paArm64 masisitimu akagadzirirwa, kusanganisira iyo Clang compiler, LLD linker uye compiler-rt runtime raibhurari. Kana uchivaka yeMinGW yakananga mapuratifomu, iyo .exe suffix inowedzerwa, kunyangwe kana ichiyambuka-kunyora.
  • Iwo masimba ane chekuita nerutsigiro rweOpenCL, OpenMP uye CUDA akawedzerwa. Yakawedzerwa sarudzo "-cl-std=CL3.0" uye "-cl-std=CL1.0" kusarudza macro sarudzo dzeOpenCL 3.0 uye OpenCL 1.0. Zvishandiso zvekuongorora zvakawedzerwa.
  • Yakawedzerwa rutsigiro rweiyo HRESET, UINTR, uye AVXVNNI mirairo inoshandiswa mune mamwe x86-based processors.
  • Pa x86 masisitimu, tsigiro ye "-mtune=" sarudzo inogoneswa ", iyo inomutsa yakasarudzwa microarchitectural optimizations, zvisinei nekukosha kwe "-march= "
  • Iyo static analyzer yakavandudza kugadziridzwa kwemamwe mabasa ePOSIX uye yakanyanya kuvandudza kutsunga kwemhedzisiro yemamiriro ekuita kana paine akati wandei ekufananidzira maitiro mukuenzanisa. Macheki matsva awedzerwa: fuchia.HandleChecker (inotsanangura mibato muzvimiro), webkit.UncountedLambdaCapturesChecker webkit uye alpha.webkit.UncountedLocalVarsChecker (inofunga nezvezvakasiyana zvekushanda nemapoinger muWebKit engine code).
  • Mumataurirwo anoshandiswa muchirevo chezvinoramba zviripo, kushandiswa kwemabasa akavakwa-mukati __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, _bit_bit_scan_bsrverse, _bsrverse, _bsrverse_wap, d, __bswap64, inotenderwa __bswapq , _castf*, __rol* uye __ror*.
  • Yakawedzera sarudzo yeBitFieldColonSpacing kune clang-fomati yekushandisa kusarudza nzvimbo yakatenderedza zviziviso, makoramu, uye tsananguro yemunda.
  • Iyo clangd caching server (Clang Server) paLinux papuratifomu yakadzora zvakanyanya kushandiswa kwendangariro panguva yekushanda kwenguva refu (nguva nenguva inofona ku malloc_trim inopihwa kudzosera emahara mapeji endangariro kune inoshanda sisitimu).

Makiyi ekuvandudza muLLVM 12.0:

  • Tsigiro yellvm-kuvaka kuvaka chishandiso chakanyorwa muPython chakamiswa, uye panzvimbo pezvo chirongwa chachinja zvachose kushandisa CMake kuvaka system.
  • Mumashure meiyo AArch64 architecture, rutsigiro rweWindows chikuva rwakavandudzwa: kwakaringana chizvarwa chekuunganidza kuburitsa kwechinangwa Windows masisitimu akavimbiswa, kugadzirwa kwedata pakufona kwekusunungura kwakagadziridzwa (saizi yedata yakadaro yakaderedzwa ne60. %), kugona kugadzira kusunungura data uchishandisa assembler kwawedzerwa mirairo .seh_*.
  • Iyo yekumashure yePowerPC yekuvakisa inoratidzira mitsva yekukwirisa zvishwe uye inline deployment, yakawedzera rutsigiro rwePower10 processors, yakawedzera tsigiro yeMMA mirairo ye matrix manipulation, uye yakagadziridzwa rutsigiro rweAIX inoshanda sisitimu.
  • Iyo x86 backend inowedzera rutsigiro rwe AMD Zen 3, Intel Alder Lake uye Intel Sapphire Rapids processors, pamwe neHRESET, UINTR uye AVXVNNI processor mirairo. Tsigiro yeMPX (Memory Dziviriro Mawedzero) ekutarisa anonongedzera kuti ave nechokwadi chekuti ndangariro miganhu haichatsigirwi (iyi tekinoroji haina kupararira uye yakatobviswa kubva kuGCC uye clang). Yakawedzera tsigiro kumuunganidzi ye {disp32} uye {disp8} prefixes uye .d32 uye .d8 suffixes kudzora saizi ye operand offset uye kusvetuka. Yakawedzera hunhu hutsva "tune-cpu" kudzora kubatanidzwa kweiyo microarchitectural optimizations.
  • Iyo nyowani modhi "-fsanitize = isina kusaina-shift-base" yawedzerwa kune yakazara dambudziko detector (integer sanitizer, "-fsanitize=integer") yekuona mafashama ehuwandu husina kusaina mushure mekuchinja zvishoma kuruboshwe.
  • Mune akasiyana madhijitari (asan, cfi, lsan, msan, tsan, ubsan sanitizer) tsigiro yekugovera Linux neyakajairwa Musl raibhurari yakawedzerwa.
  • Kugona kweLLD linker kwakawedzerwa. Rutsigiro rwakavandudzwa rweiyo ELF fomati, kusanganisira yakawedzerwa sarudzo "--dependency-file", "-error-kubata-script", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program -kuonekwa"" Yakavandudzwa MinGW rutsigiro. Kune iyo Mach-O fomati (macOS), tsigiro yearm64, ruoko, uye i386 zvivakwa, chinongedzo-nguva optimizations (LTO), uye stack unwinding yekusarudzika kubata yaitwa.
  • Libc ++ inoshandisa mitsva yeC++20 yakajairwa uye yatanga kuvandudza maficha eiyo C++2b yakatarwa. Yakawedzera tsigiro yekuvaka nekudzima tsigiro yenzvimbo ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") uye zvishandiso zvekugadzira pseudo-random nhamba (β€œ-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

Source: opennet.ru

Voeg