Rhyddhau'r gyfres casglu LLVM 12.0

Ar ôl chwe mis o ddatblygiad, cyflwynwyd rhyddhau'r prosiect LLVM 12.0 - pecyn cymorth sy'n gydnaws â'r GCC (casglu, optimeiddio a generaduron cod) sy'n crynhoi rhaglenni i god did canolradd o gyfarwyddiadau rhithwir tebyg i RISC (peiriant rhithwir lefel isel gyda a system optimeiddio aml-lefel). Gellir trosi'r ffuggod a gynhyrchir gan ddefnyddio casglwr JIT yn gyfarwyddiadau peiriant yn uniongyrchol ar adeg gweithredu'r rhaglen.

Gwelliannau yn Clang 12.0:

  • Mae cefnogaeth i'r priodoleddau “tebygol” ac “annhebygol” a gynigir yn safon C++20 wedi'i weithredu a'i alluogi yn ddiofyn, gan ganiatáu i'r optimeiddiwr gael gwybod am y tebygolrwydd y bydd y lluniad amodol yn cael ei sbarduno (er enghraifft, “[[tebygol ]] os (ar hap > 0) {“).
  • Cefnogaeth ychwanegol ar gyfer proseswyr AMD Zen 3 (-march = znver3), Intel Alder Lake (-march = alderlake) ac Intel Sapphire Rapids (-march = sapphirerapids).
  • Cefnogaeth ychwanegol ar gyfer baneri "-march=x86-64-v[234]" i ddewis lefelau pensaernïaeth x86-64 (v2 - yn cwmpasu estyniadau SSE4.2, SSSE3, POPCNT a CMPXCHG16B; v3 - AVX2 a MOVBE; v4 - AVX-512 ).
  • Cefnogaeth ychwanegol ar gyfer proseswyr Arm Cortex-A78C (cortecs-a78c), Arm Cortex-R82 (cortecs-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) a Fujitsu A64FX (a64fx). Er enghraifft, er mwyn galluogi optimeiddio ar gyfer CPUs Neoverse-V1, gallwch nodi “-mcpu=neoverse-v1”.
  • Ar gyfer pensaernïaeth AArch64, mae baneri casglwr newydd "-moutline-atomics" a "-mno-outline-atomics" wedi'u hychwanegu i alluogi neu analluogi swyddogaethau cynorthwyydd gweithrediad atomig, megis "__aarch64_cas8_relax". Mae swyddogaethau o'r fath yn canfod yn ystod amser rhedeg a oes cymorth LSE (Estyniadau System Fawr) ar gael ac yn defnyddio'r cyfarwyddiadau prosesydd atomig a ddarperir neu'n dychwelyd i ddefnyddio cyfarwyddiadau LL/SC (Llwytho-dolen/storfa-amodol) ar gyfer cydamseru.
  • Ychwanegwyd opsiwn "-fbinutils-version" i ddewis y fersiwn darged o'r gyfres binutils ar gyfer cydnawsedd ag ymddygiad cysylltydd a chydosodwr hŷn.
  • Ar gyfer ffeiliau gweithredadwy ELF, pan nodir y faner "-gz", mae cywasgu gwybodaeth dadfygio gan ddefnyddio'r llyfrgell zlib wedi'i alluogi yn ddiofyn (gz=zlib). Mae angen binutils lld neu GNU 2.26+ i gysylltu'r ffeiliau gwrthrych canlyniadol. Er mwyn adfer cydnawsedd â fersiynau hŷn o binutils, gallwch nodi "-gz=zlib-gnu".
  • Mae'r pwyntydd 'hwn' bellach yn cael ei brosesu gyda gwiriadau di-nwl a digyfeiriad(N). I gael gwared ar y priodoledd nonnull, os oes angen i chi ddefnyddio gwerthoedd NULL, gallwch ddefnyddio'r opsiwn "-fdelete-null-pointer-checks".
  • Ar y platfform Linux, mae'r modd "-fasynchronous-unwind-tables" wedi'i alluogi ar gyfer pensaernïaeth AArch64 a PowerPC i gynhyrchu tablau galwadau dad-ddirwyn, fel yn GCC.
  • Yn "#pragma clang loop vectorize_width" ychwanegodd y gallu i nodi'r opsiynau "sefydlog" (diofyn) a "scalable" i ddewis y dull fectoreiddio. Mae'r modd "scalable", yn annibynnol ar hyd fector, yn arbrofol a gellir ei ddefnyddio ar galedwedd sy'n cefnogi fectoreiddio graddadwy.
  • Gwell cefnogaeth i blatfform Windows: Mae cynulliadau deuaidd swyddogol ar gyfer Windows ar systemau Arm64 wedi'u paratoi, gan gynnwys y compiler Clang, LLD linker a llyfrgelloedd runtime compiler-rt. Wrth adeiladu ar gyfer llwyfannau targed MinGW, ychwanegir yr ôl-ddodiad .exe, hyd yn oed wrth groes-gasglu.
  • Mae'r galluoedd sy'n gysylltiedig â chymorth ar gyfer OpenCL, OpenMP a CUDA wedi'u hehangu. Ychwanegwyd opsiynau "-cl-std=CL3.0" a "-cl-std=CL1.0" i ddewis opsiynau macro ar gyfer OpenCL 3.0 ac OpenCL 1.0. Mae offer diagnostig wedi'u hehangu.
  • Cefnogaeth ychwanegol i gyfarwyddiadau HRESET, UTR, ac AVXVNNI a weithredwyd mewn rhai proseswyr seiliedig ar x86.
  • Ar systemau x86, mae cefnogaeth ar gyfer yr opsiwn "-mtune=" wedi'i alluogi, gan alluogi optimeiddiadau microarchitectural dethol waeth beth fo'r gwerth "-march=".
  • Mae'r dadansoddwr statig wedi gwella prosesu rhai swyddogaethau POSIX ac wedi gwella'n sylweddol benderfyniad canlyniad gweithrediadau amodol pan fo nifer o werthoedd symbolaidd yn y gymhariaeth. Mae gwiriadau newydd wedi'u hychwanegu: fuchia.HandleChecker (diffinio dolenni mewn strwythurau), webkit.UncountedLambdaCapturesChecker ac alpha.webkit.UncountedLocalVarsChecker (yn cymryd i ystyriaeth hynodion gweithio gydag awgrymiadau yng nghod injan WebKit).
  • Mewn ymadroddion a ddefnyddir yng nghyd-destun cysonion, defnyddir ffwythiannau adeiledig __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bit_scan_reverse, __bsfq, __bit_scan_reverse, __bsfq, __bit_scan_reverse, __bsw__, __bit_scan_reverse, __bsfq, __bit_scan_reverse, __bsfq, __bit_scan_reverse, __bsfq, __bit_scan_reverse, __bit_scan_reverse, __bit_scan_reverse, __bit_scan_reverse, __bit_scan_reverse, __bit_scan_reverse, __builtin_rotateleft*, __builtin_rotateleft*, __builtin_rotateleft. 64, __ caniateir bswapq , _castf*, __rol* a __ror*.
  • Ychwanegwyd opsiwn BitFieldColonSpacing at y cyfleustodau fformat clang i ddewis y bylchau o amgylch dynodwyr, colofnau, a diffiniadau maes.
  • Mae'r gweinydd caching clangd (Clang Server) ar y platfform Linux wedi lleihau'r defnydd o gof yn sylweddol yn ystod gweithrediad hirdymor (darperir galwadau cyfnodol i malloc_trim i ddychwelyd tudalennau cof am ddim i'r system weithredu).

Datblygiadau arloesol allweddol yn LLVM 12.0:

  • Mae cefnogaeth i'r offeryn adeiladu llvm-build a ysgrifennwyd yn Python wedi dod i ben, ac yn lle hynny mae'r prosiect wedi newid yn llwyr i ddefnyddio system adeiladu CMake.
  • Yn y cefn ar gyfer pensaernïaeth AArch64, mae cefnogaeth ar gyfer platfform Windows wedi'i wella: sicrhawyd cynhyrchu allbwn cydosodwr yn gywir ar gyfer systemau Windows targed, mae cynhyrchu data ar alwadau dad-ddirwyn wedi'i optimeiddio (mae maint data o'r fath wedi'i leihau 60 %), mae'r gallu i greu data dad-ddirwyn gan ddefnyddio cyfosodwr wedi'i ychwanegu cyfarwyddebau .seh_*.
  • Mae'r backend ar gyfer pensaernïaeth PowerPC yn cynnwys optimeiddiadau newydd ar gyfer dolenni a defnydd mewnol, cefnogaeth estynedig i broseswyr Power10, cefnogaeth ychwanegol i gyfarwyddiadau MMA ar gyfer trin matrics, a gwell cefnogaeth i system weithredu AIX.
  • Mae'r backend x86 yn ychwanegu cefnogaeth ar gyfer proseswyr AMD Zen 3, Intel Alder Lake ac Intel Sapphire Rapids, yn ogystal â chyfarwyddiadau prosesydd HRESET, UINTR ac AVXVNNI. Cefnogaeth i MPX (Estyniadau Diogelu Cof) ar gyfer gwirio awgrymiadau i sicrhau nad yw ffiniau cof yn cael eu cefnogi mwyach (nid yw'r dechnoleg hon yn eang ac mae eisoes wedi'i thynnu oddi wrth GCC a chlang). Ychwanegwyd cefnogaeth i'r cydosodwr ar gyfer y rhagddodiaid {dip32} a {dip8} a'r ôl-ddodiaid .d32 a .d8 i reoli maint gwrthbwyso operand a neidiau. Ychwanegwyd priodoledd newydd "tune-cpu" i reoli cynnwys optimeiddio micro-bensaernïaeth.
  • Mae modd newydd “-fsanitize = unsigned-shift-base” wedi’i ychwanegu at y synhwyrydd problem cyfanrif (glanweithydd cyfanrif, “-fsanitize = cyfanrif”) i ganfod gorlifoedd o gyfanrifau heb eu harwyddo ar ôl shifft ychydig i'r chwith.
  • Mewn amrywiol synwyryddion (asan, cfi, lsan, msan, tsan, ubsan sanitizer) mae cefnogaeth ar gyfer dosbarthiadau Linux gyda'r llyfrgell Musl safonol wedi'i ychwanegu.
  • Mae galluoedd y cysylltydd LLD wedi'u hehangu. Gwell cefnogaeth i fformat ELF, gan gynnwys yr opsiynau ychwanegol “--dependency-file”, “-error-handling-script”, “-lto-pseudo-probe-for-profiling”, “-no-lto-whole-program - gwelededd" " Gwell cefnogaeth MinGW. Ar gyfer y fformat Mach-O (macOS), mae cefnogaeth ar gyfer pensaernïaeth arm64, braich, ac i386, optimeiddio amser cyswllt (LTO), a dad-ddirwyn stac ar gyfer trin eithriadau wedi'i roi ar waith.
  • Mae Libc++ yn gweithredu nodweddion newydd o'r safon C++20 ac wedi dechrau datblygu nodweddion y fanyleb C++2b. Ychwanegwyd cefnogaeth ar gyfer adeiladu gyda chymorth lleoleiddio analluogi (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) a dyfeisiau ar gyfer cynhyrchu rhifau ffug ar hap (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

Ffynhonnell: opennet.ru

Ychwanegu sylw