Scaoileadh sraith tiomsaithe LLVM 12.0

Tar éis sé mhí forbartha, cuireadh scaoileadh an tionscadail LLVM 12.0 i láthair - foireann uirlisí atá comhoiriúnach le GCC (tiomsaitheoirí, optimizers agus gineadóirí cód) a thiomsaíonn cláir i gcód giotán idirmheánach de threoracha fíorúla cosúil le RISC (meaisín fíorúil íseal-leibhéal le a. córas optamaithe illeibhéil). Is féidir an pseudocode a ghintear a thiontú trí úsáid a bhaint as tiomsaitheoir JIT go treoracha meaisín go díreach ag an am a dhéantar an clár.

Feabhsuithe ar Clang 12.0:

  • Tá tacaíocht do na tréithe “dócha” agus “dhóchúil” atá molta i gcaighdeán C++20 curtha i bhfeidhm agus cumasaithe de réir réamhshocraithe, rud a fhágann gur féidir an t-uasmhéadaitheoir a chur ar an eolas faoin dóchúlacht go spreagfar an tógáil choinníollach (mar shampla, “[[dócha ]] más rud é (randamach > 0) {“).
  • Tacaíocht bhreise do phróiseálaithe AMD Zen 3 (-march = znver3), Intel Alder Lake (-march = alderlake) agus Intel Sapphire Rapids (-march = sapphires).
  • Tacaíocht breise le haghaidh bratacha "-march=x86-64-v[234]" chun leibhéil ailtireachta x86-64 a roghnú (v2 - clúdaíonn sé síntí SSE4.2, SSSE3, POPCNT agus CMPXCHG16B; v3 - AVX2 agus MOVBE; v4 - AVX-512 ).
  • Tacaíocht bhreise do phróiseálaithe 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 shampla, chun leas iomlán a bhaint as CPUanna Neoverse-V1 a chumasú, is féidir leat “-mcpu = neoverse-v1” a shonrú.
  • Maidir leis an ailtireacht AArch64, cuireadh bratacha tiomsaitheora nua "-moutline-atomics" agus "-mno-outline-atomics" leis chun feidhmeanna cúntóra oibríochta adamhach a chumasú nó a dhíchumasú, mar "__aarch64_cas8_relax". Aimsíonn feidhmeanna den sórt sin ag am rite cibé an bhfuil tacaíocht LSE (Eisínteachtaí Córais Mhóra) ar fáil agus úsáideann siad na treoracha próiseálaithe adamhach a chuirtear ar fáil nó nach dtagann siad ar ais chuig treoracha LL/SC (Luchtaigh-nasc/siopa-coinníollach) a úsáid le haghaidh sioncrónaithe.
  • Cuireadh rogha "-fbinutils-version" leis chun an leagan sprice den tsraith binutils a roghnú le haghaidh comhoiriúnachta le hiompar nascóirí agus cóimeálaí níos sine.
  • I gcás comhaid inrite ELF, nuair a shonraítear an bhratach “-gz”, cumasaítear comhbhrú na faisnéise dífhabhtaithe ag baint úsáide as an leabharlann zlib de réir réamhshocraithe (gz=zlib). Chun na comhaid oibiachta a d'eascair as a nascadh, teastaíonn binutils lld nó GNU 2.26+. Chun comhoiriúnacht a athbhunú le leaganacha níos sine de dhéshúiligh, is féidir leat "-gz=zlib-gnu" a shonrú.
  • Próiseáiltear an pointeoir 'seo' anois le seiceálacha neamh-inchúlghairthe agus inshainaitheanta(N). Chun an aitreabúid neamhnull a bhaint nuair is gá duit luachanna NULL a úsáid, is féidir leat an rogha " -fdelete-null-pointer-checks" a úsáid.
  • Ar an ardán Linux, tá an modh "-fasynchronous-unwind-tables" cumasaithe d'ailtireacht AArch64 agus PowerPC chun táblaí glaonna unwind a ghiniúint, mar atá i GCC.
  • I "#pragma clang loop vectorize_width" cuireadh an cumas na roghanna "seasta" (réamhshocraithe) agus "Inscálaithe" a shonrú chun an modh veicteora a roghnú. Tá an modh "Inscálaithe", neamhspleách ar fhad veicteora, turgnamhach agus is féidir é a úsáid ar chrua-earraí a thacaíonn le veicteoiriú Inscálaithe.
  • Tacaíocht fheabhsaithe don ardán Windows: Tá tionóil dhénártha oifigiúla do Windows ar chórais Arm64 ullmhaithe, lena n-áirítear leabharlanna tiomsaitheoir Clang, nascóir LLD agus tiomsaitheoir-rt ama rite. Agus tú ag tógáil le haghaidh ardáin sprice MinGW, cuirtear leis an iarmhír .exe, fiú nuair a bhíonn sé á thras-thiomsú.
  • Leathnaíodh na cumais a bhaineann le tacaíocht do OpenCL, OpenMP agus CUDA. Roghanna curtha leis "-cl-std = CL3.0" agus "-cl-std = CL1.0" chun roghanna macra a roghnú le haghaidh OpenCL 3.0 agus OpenCL 1.0. Leathnaíodh uirlisí diagnóiseacha.
  • Tacaíocht bhreise do na treoracha HRESET, UNTR, agus AVXVNNI curtha i bhfeidhm i roinnt próiseálaithe atá bunaithe ar x86.
  • Ar chórais x86, cumasaítear tacaíocht don rogha "-mtune=", rud a chumasaíonn leas iomlán a bhaint as micriailtireacht roghnaithe beag beann ar an luach "-march=".
  • Tá próiseáil feabhsaithe ag an anailísí statach ar roinnt feidhmeanna POSIX agus cinneadh feabhsaithe go mór ar thoradh oibríochtaí coinníollach nuair a bhíonn roinnt luachanna siombalacha sa chomparáid. Tá seiceálacha nua curtha leis: fuchia.HandleChecker (sainmhíníonn sé láimhseálacha i struchtúir), trealamh gréasáin webkit.UncountedLambdaCapturesChecker agus alpha.webkit.UncountedLocalVarsChecker (cuireann sé san áireamh na tréithe a bhaineann le hoibriú le leideanna i gcód innill WebKit).
  • In expressions used in the context of constants, the use of built-in functions __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsrd, __bsrq, __bswap, __bswapd, __bswap64, __ is allowed bswapq , _castf*, __rol* agus __ror*.
  • Cuireadh rogha BitFieldColonSpacing leis an bhfóntas formáid clang chun an spásáil timpeall ar aitheantóirí, colúin agus sainmhínithe réimse a roghnú.
  • Tá an freastalaí caching clangd (Freastalaí Clang) ar an ardán Linux tar éis tomhaltas cuimhne a laghdú go suntasach le linn oibriú fadtéarmach (soláthraítear glaonna tréimhsiúla chuig malloc_trim chun leathanaigh cuimhne saor in aisce a chur ar ais chuig an gcóras oibriúcháin).

Príomh-nuálaíochtaí LLVM 12.0:

  • Cuireadh deireadh leis an tacaíocht don uirlis tógála llvm a scríobhadh i Python, agus ina ionad sin tá an tionscadal aistrithe go hiomlán chuig córas tógála CMake a úsáid.
  • In inneall ailtireacht AArch64, feabhsaíodh an tacaíocht d’ardán Windows: áirithíodh giniúint cheart aschuir cóimeálaí do spriocchórais Windows, tá giniúint sonraí ar ghlaonna gan ghaotha optamaithe (laghdaíodh méid na sonraí sin faoi 60). %), cuireadh treoracha .seh_* leis an gcumas sonraí unwind a chruthú trí úsáid a bhaint as cóimeálaí.
  • San inneall d’ailtireacht PowerPC tá leas iomlán a bhaint as lúba agus imscaradh inlíne, tacaíocht leathnaithe do phróiseálaithe Power10, tacaíocht bhreise do threoracha MMA maidir le hionramháil maitrís, agus tacaíocht fheabhsaithe don chóras oibriúcháin AIX.
  • Cuireann an t-inneall x86 tacaíocht do phróiseálaithe AMD Zen 3, Intel Alder Lake agus Intel Sapphire Rapids, chomh maith le treoracha próiseálaí HRESET, UITR agus AVXVNNI. Tacaíocht do MPX (Eisínteachtaí Cosanta Cuimhne) chun leideanna a sheiceáil chun a chinntiú nach dtacaítear le teorainneacha cuimhne a thuilleadh (níl an teicneolaíocht seo forleathan agus tá sé bainte cheana féin ó GCC agus clang). Cuireadh tacaíocht bhreise leis an gcóimeálaí do na réimíreanna {dip32} agus {dip8} agus na hiarmhíreanna .d32 agus .d8 chun méid fritháirimh agus geansaithe operand a rialú. Cuireadh tréith nua "tune-cpu" leis chun cuimsiú optimizations microarchitectural a rialú.
  • Tá mód nua “-fsanitize=unsigned-shift-base” curtha leis an brathadóir fadhbanna slánuimhir (sláintitheoir slánuimhir, “-fsanitize= slánuimhir”) chun ró-shreabhadh slánuimhreacha gan síniú a bhrath tar éis beagán aistrithe ar an taobh clé.
  • I mbrathadóirí éagsúla (asan, cfi, lsan, msan, tsan, ubsan sanitizer) tá tacaíocht do dháiltí Linux leis an leabharlann chaighdeánach Musl curtha leis.
  • Leathnaíodh cumais an nascóra LLD. Tacaíocht fheabhsaithe don fhormáid ELF, lena n-áirítear na roghanna breise “--dependency-file”, “-error-handling-script”, “-lto-pseudo-probe-for-profiling”, “-no-lto-whole-program -infheictheacht" " Tacaíocht fheabhsaithe MinGW. Maidir leis an bhformáid Mach-O (macOS), cuireadh i bhfeidhm tacaíocht d'ailtireacht arm64, arm, agus i386, leas iomlán a bhaint as nasc-am (LTO), agus dífhoirceannadh cruachta le haghaidh láimhseáil eisceachta.
  • Cuireann Libc++ gnéithe nua den chaighdeán C++20 i bhfeidhm agus tá tús curtha aige le gnéithe den tsonraíocht C++2b a fhorbairt. Tacaíocht bhreise le tógáil le tacaíocht logánaithe díchumasaithe (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) agus gléasanna chun uimhreacha randamacha a ghiniúint (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

Foinse: oscailtenet.ru

Add a comment