Sgaoileadh an t-sreath cruinneachaidh LLVM 12.0

Às deidh sia mìosan de leasachadh, chaidh sgaoileadh a’ phròiseict LLVM 12.0 a thaisbeanadh - pasgan inneal a tha co-chosmhail ri GCC (luchd-cruinneachaidh, optimizers agus gineadairean còd) a bhios a ’cur ri chèile prògraman ann an còd bit eadar-mheadhanach de stiùiridhean brìgheil coltach ri RISC (inneal brìgheil aig ìre ìosal le inneal-lìonaidh. siostam optimization ioma-ìre). Faodar am pseudocode a chaidh a chruthachadh a thionndadh le bhith a’ cleachdadh inneal-cruinneachaidh JIT gu stiùireadh inneal gu dìreach aig àm coileanadh a’ phrògraim.

Leasachaidhean ann an Clang 12.0:

  • Chaidh taic airson na buadhan “dualtach” agus “eu-coltach” a tha air am moladh ann an inbhe C ++20 a chuir an gnìomh agus a chomasachadh gu bunaiteach, a’ leigeil leis an optimizer fios fhaighinn mu cho coltach ‘s a tha an togalach cumhach a bhith air a phiobrachadh (mar eisimpleir,“ [[coltach ]] ma tha (air thuaiream > 0) {“).
  • Taic a bharrachd airson pròiseasairean AMD Zen 3 (-march = znver3), Intel Alder Lake (-march = alderlake) agus Intel Sapphire Rapids (-march = sapphire).
  • Taic a bharrachd airson brataichean “-march = x86-64-v[234]” gus ìrean ailtireachd x86-64 a thaghadh (v2 - a’ còmhdach leudachain SSE4.2, SSSE3, POPCNT agus CMPXCHG16B; v3 - AVX2 agus MOVBE; v4 - AVX-512 ).
  • Taic a bharrachd airson pròiseasairean Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) agus Fujitsu A64FX (a64fx). Mar eisimpleir, gus optimizations a chomasachadh airson CPUan Neoverse-V1, faodaidh tu “-mcpu = neoverse-v1” a shònrachadh.
  • Airson ailtireachd AArch64, chaidh brataichean cruinneachaidh ùr “-moutline-atomics” agus “-mno-outline-atomics” a chur ris gus gnìomhan neach-cuideachaidh gnìomhachd atamach a chomasachadh no a chuir à comas, leithid “__aarch64_cas8_relax”. Bidh na gnìomhan sin a’ lorg aig àm ruith a bheil taic LSE (Leudachadh Siostam Mòr) ri fhaighinn agus a’ cleachdadh an stiùireadh pròiseasar atamach a chaidh a thoirt seachad no a’ tuiteam air ais gu bhith a’ cleachdadh stiùiridhean LL/SC (Load-link/store-condition) airson sioncronadh.
  • Chaidh roghainn “-fbinutils-version” a chuir ris gus an dreach targaid den t-sreath binutils a thaghadh airson co-chòrdalachd le giùlan ceangail nas sine agus cruinneachaidh.
  • Airson faidhlichean so-ghnìomhaichte ELF, nuair a tha am bratach “-gz” air a shònrachadh, tha teannachadh fiosrachadh deasbaid a’ cleachdadh leabharlann zlib air a chomasachadh gu bunaiteach (gz = zlib). Gus na faidhlichean nì a thig às a cheangal feumaidh lld no GNU binutils 2.26+. Gus co-chòrdalachd a thoirt air ais le dreachan nas sine de bhinutils, faodaidh tu “-gz=zlib-gnu” a shònrachadh.
  • Tha am puing 'seo' a-nis air a phròiseasadh le sgrùdaidhean neo-ghluasadach agus so-ruigsinneach (N). Gus am feart nonnull a thoirt air falbh, ma dh'fheumas tu luachan NULL a chleachdadh, faodaidh tu an roghainn " -fdelete-null-pointer-checks" a chleachdadh.
  • Air an àrd-ùrlar Linux, tha am modh “-fasynchronous-unwind-tables” air a chomasachadh airson ailtireachd AArch64 agus PowerPC gus clàran gairm a ghineadh, mar ann an GCC.
  • Ann an “#pragma clang loop vectorize_width” chuir e ris a’ chomas na roghainnean “stèidhichte” (bunaiteach) agus “scalable” a shònrachadh gus am modh vectorization a thaghadh. Tha am modh “scalable”, neo-eisimeileach bho fhaid vectar, deuchainneach agus faodar a chleachdadh air bathar-cruaidh a bheir taic do vectar scalable.
  • Taic nas fheàrr airson àrd-ùrlar Windows: Chaidh co-chruinneachaidhean dà-chànanach oifigeil airson Windows air siostaman Arm64 ullachadh, a’ gabhail a-steach leabharlann Clang compiler, LLD linker agus compiler-rt runtime. Nuair a bhios tu a’ togail airson àrd-ùrlaran targaid MinGW, tha an iar-leasachan .exe air a chur ris, eadhon nuair a thèid tar-chur ri chèile.
  • Chaidh na comasan co-cheangailte ri taic airson OpenCL, OpenMP agus CUDA a leudachadh. Roghainnean a bharrachd "-cl-std = CL3.0" agus "-cl-std = CL1.0" gus roghainnean macro a thaghadh airson OpenCL 3.0 agus OpenCL 1.0. Tha innealan breithneachaidh air an leudachadh.
  • Taic a bharrachd airson an stiùireadh HRESET, UINTR, agus AVXVNNI air an cur an gnìomh ann an cuid de phròiseasan stèidhichte air x86.
  • Air siostaman x86, tha taic airson an roghainn “-mtune=” air a chomasachadh, a’ comasachadh optimizations microarchitectural taghte ge bith dè an luach “-march=” a th’ ann.
  • Tha an anailisiche statach air giullachd cuid de ghnìomhan POSIX a leasachadh agus air dearbhadh gu mòr air toradh gnìomhachd gun chumhachan nuair a tha grunn luachan samhlachail anns a’ choimeas. Chaidh sgrùdaidhean ùra a chur ris: fuchia.HandleChecker (a’ mìneachadh làmhan ann an structaran), webkit.UncountedLambdaCapturesChecker webkit agus alpha.webkit.UncountedLocalVarsChecker (a’ toirt aire do na feartan sònraichte a bhith ag obair le comharran ann an còd einnsean WebKit).
  • Ann an abairtean a thathar a’ cleachdadh ann an co-theacs nan cunntachail, thathar a’ cleachdadh gnìomhan togte __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bit_scan_reverse, __bsfq, __bit_scan_reverse, __bsap, __bit_scan_reverse, __bs_ap, __bit_scan_reverse, __bsfq, __bit_scan_reverse. 64, __ ceadaichte bswapq , _castf*, __rol* agus __ror*.
  • Chuir sinn roghainn BitFieldColonSpacing ris a’ ghoireas cruth clang gus am farsaingeachd timcheall air aithnichearan, colbhan, agus mìneachaidhean achaidh a thaghadh.
  • Tha am frithealaiche clangd caching (Clang Server) air an àrd-ùrlar Linux air caitheamh cuimhne a lughdachadh gu mòr rè obrachadh fad-ùine (tha fiosan bho àm gu àm gu malloc_trim air an toirt seachad gus duilleagan cuimhne an-asgaidh a thilleadh chun t-siostam obrachaidh).

Prìomh innleachdan ann an LLVM 12.0:

  • Chaidh stad a chuir air taic don inneal togail llvm-build a chaidh a sgrìobhadh ann am Python, agus an àite sin tha am pròiseact air atharrachadh gu tur gu bhith a’ cleachdadh siostam togail CMake.
  • Anns an deireadh-sheachdain airson ailtireachd AArch64, chaidh taic airson àrd-ùrlar Windows a leasachadh: chaidh gineadh ceart de thoraidhean cruinneachaidh airson siostaman targaid Windows a dhèanamh cinnteach, chaidh gineadh dàta air fiosan gun fhiosta a mheudachadh (chaidh meud an dàta sin a lughdachadh le 60). %), chaidh an comas dàta unwind a chruthachadh a’ cleachdadh assembler a chur ris stiùiridhean .seh_*.
  • Tha an backend airson ailtireachd PowerPC a’ nochdadh optimizations ùra airson lùban agus cleachdadh in-loidhne, taic leudaichte do phròiseasan Power10, taic a bharrachd airson stiùireadh MMA airson làimhseachadh matrix, agus taic nas fheàrr airson siostam obrachaidh AIX.
  • Bidh an backend x86 a’ cur taic ri pròiseasairean AMD Zen 3, Intel Alder Lake agus Intel Sapphire Rapids, a bharrachd air stiùireadh pròiseasar HRESET, UINTR agus AVXVNNI. Taic do MPX (Leudachain Dìon Cuimhne) airson sùil a thoirt air comharran gus dèanamh cinnteach nach eil crìochan cuimhne a’ faighinn taic tuilleadh (chan eil an teicneòlas seo farsaing agus chaidh a thoirt air falbh bho GCC agus clang mu thràth). Chuir sinn taic ris a’ cho-chomhairliche airson na ro-leasachain {dip32} agus {dip8} agus na h-iar-leasachain .d32 agus .d8 gus smachd a chumail air meud nan oparan agus na geansaidhean. Chuir sinn feart ùr ris “tune-cpu” gus smachd a chumail air toirt a-steach optimizations microarchitectural.
  • Chaidh modh ùr “-fsanitize = unsigned-shift-base” a chur ris an lorgaire duilgheadas simplidh (slànaighear sanitizer, “-fsanitize = integer”) gus faighinn thairis air sruthan de shlànaichean gun ainm às deidh gluasad beag air an taobh chlì.
  • Ann an grunn lorgairean (asan, cfi, lsan, msan, tsan, ubsan sanitizer) chaidh taic airson sgaoilidhean Linux leis an leabharlann àbhaisteach Musl a chuir ris.
  • Chaidh comasan an ceangal LLD a leudachadh. Taic nas fheàrr airson cruth ELF, a’ gabhail a-steach na roghainnean a bharrachd “--dependency-file”, “-error-handling-script”, “-lto-pseudo-probe-for-profiling”, “-no-lto-whole-program - faicsinneachd" " Taic nas fheàrr do MinGW. Airson cruth Mach-O (macOS), chaidh taic airson ailtireachd arm64, gàirdean, agus i386, optimizations ùine ceangail (LTO), agus stad stac airson làimhseachadh eisgeachd a chuir an gnìomh.
  • Bidh Libc ++ a’ buileachadh feartan ùra den inbhe C ++20 agus tha e air tòiseachadh air feartan an t-sònrachadh C ++2b a leasachadh. Taic a bharrachd airson togail le taic ionadail à comas (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) agus innealan airson àireamhan meallta a ghineadh (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

Source: fosgailtenet.ru

Cuir beachd ann