Hoʻokuʻu ʻia o ka LLVM 15.0 compiler suite

Ma hope o ʻeono mahina o ka hoʻomohala ʻana, ua hōʻike ʻia ka hoʻokuʻu ʻana o ka papahana LLVM 15.0 - kahi hāmeʻa GCC-compatible (compilers, optimizers and code generators) e hōʻuluʻulu i nā papahana i loko o ka bitcode intermediate o nā ʻōlelo kuhikuhi virtual e like me RISC (he mīkini virtual haʻahaʻa haʻahaʻa me kahi. multi-level optimization system). Hiki ke hoʻololi ʻia ka pseudocode i hana ʻia me ka hoʻohana ʻana i kahi compiler JIT i nā kuhikuhi mīkini pololei i ka manawa o ka hoʻokō ʻana o ka papahana.

Nā hoʻomaikaʻi nui ma Clang 15.0:

  • No nā ʻōnaehana e pili ana i ka hoʻolālā x86, ua hoʻohui ʻia ka hae "-fzero-call-used-regs", e hōʻoiaʻiʻo ana e hoʻihoʻi ʻia nā papa inoa CPU āpau i hoʻohana ʻia i ka hana ma mua o ka hoʻihoʻi ʻana i ka mana mai ka hana. ʻAe kēia koho iā ʻoe e pale aku i ka leakage ʻike mai nā hana a hōʻemi i ka helu o nā poloka kūpono no ke kūkulu ʻana i nā hāmeʻa ROP (Return-Oriented Programming) i nā hana ma kahi o 20%.
  • Ua hoʻokō ʻia ka randomization o ka hoʻonohonoho hoʻomanaʻo o nā hale no ka code C, kahi e hoʻopiʻi ai i ka unuhi ʻana o ka ʻikepili mai nā hale i ka wā o ka hoʻohana ʻana i nā nāwaliwali. Hoʻopau ʻia ka randomize_layout a me ka ʻano no_randomize_layout, a pono e hoʻonohonoho i kahi hua me ka hoʻohana ʻana i ka hae "-frandomize-layout-seed" a i ʻole "-frandomize-layout-seed-file".
  • Hoʻohui ʻia ka hae "-fstrict-flex-arrays=" ", me ka hiki iā ʻoe ke hoʻomalu i nā palena no kahi mea hoʻonohonoho maʻalahi i nā hale (Flexible Array Members, kahi ʻano nui ʻole ma ka hopena o ka hale). Ke hoʻonoho ʻia i ka 0 (paʻamau), e hana mau ʻia ka mea hope loa o ka hale me kahi laha ma ke ʻano he laha maʻalahi, 1 - nā nui [], [0] a me [1] wale nō e hana ʻia ma ke ʻano he laʻa maʻalahi, 2 - nā nui wale nō. [] a me [0] ua hana ʻia e like me ke ʻano maʻalahi.
  • Hoʻohui ʻia ke kākoʻo hoʻokolohua no ka ʻōlelo C-like HLSL (High-Level Shader Language), i hoʻohana ʻia ma DirectX no ke kākau ʻana i nā shaders.
  • Hoʻohui ʻia "-Warray-parameter" e aʻo e pili ana i nā hana overriding me nā ʻōlelo hoʻopaʻapaʻa like ʻole e pili ana me nā papa hoʻonohonoho paʻa a me nā ʻano lōʻihi.
  • Hoʻomaikaʻi maikaʻi ʻia me MSVC. Hoʻohui ʻia ke kākoʻo no "#pragma function" (aʻo i ka mea hoʻopili e hana i kahi kelepona hana ma mua o ka hoʻonui inline) a me "#pragma alloc_text" (wehewehe i ka inoa o ka ʻāpana me ke code hana) i hāʻawi ʻia ma MSVC. Kākoʻo hoʻohui ʻia no nā hae MSVC kūpono / JMC a me / JMC.
  • Ke hoʻomau nei ka hana i ke kākoʻo i nā kūlana C2X a me C++23 e hiki mai ana. No ka ʻōlelo C, ua hoʻokō ʻia kēia mau mea: ke ʻano noreturn, nā huaʻōlelo wahaheʻe a ʻoiaʻiʻo, ke ʻano _BitInt(N) no nā helu helu o kahi hohonu bit, *_WIDTH macros, ka prefix u8 no nā huaʻōlelo i hoʻopaʻa ʻia UTF-8.

    No C ++, ua hoʻokō ʻia kēia mau mea: ka hoʻohui ʻana o ka module, ka hoʻokaʻawale ʻana o ABI o nā lālā hana, kauoha ʻia ka hoʻomaka ʻana o ka hoʻomaka ʻana o nā ʻano ʻokoʻa ʻole i loko o nā modula, nā mea hoʻohana kuhikuhi multidimensional, auto(x), nā ʻano like ʻole, goto a me nā lepili i nā hana i haʻi ʻia he constexpr , hoʻokaʻawale i nā kaʻina pakele, i kapa ʻia nā huaʻōlelo pakele.

  • Ua hoʻonui ʻia nā mana e pili ana me OpenCL a me OpenMP. Hoʻohui i ke kākoʻo no ka hoʻonui OpenCL cl_khr_subgroup_rotate.
  • No ka hoʻolālā x86, ua hoʻohui ʻia ka pale e kūʻē i nā nāwaliwali o nā kaʻina hana i hoʻokō ʻia e ka hoʻokō speculative o nā ʻōlelo aʻo ma hope o nā hana lele mua ʻole. Loaʻa ka pilikia ma muli o ka hana mua ʻana o nā ʻōlelo aʻo ma hope koke o ke aʻo ʻana o ka lālā i ka hoʻomanaʻo (SLS, Straight Line Speculation). No ka hoʻohana ʻana i ka pale, ua koho ʻia ke koho "-mharden-sls=[ʻaʻohe|all|hoʻi|indirect-jmp]".
  • No nā paepae e kākoʻo ana i ka hoʻonui SSE2, ua hoʻohui ʻia ke ʻano _Float16, i hoʻohālikelike ʻia me ka hoʻohana ʻana i ke ʻano lana i ka hihia o ke kākoʻo ʻole no nā ʻōlelo kuhikuhi AVX512-FP16.
  • Hoʻohui ʻia ka hae "-m[no-]rdpru" e hoʻomalu i ka hoʻohana ʻana i ke aʻo RDPRU, kākoʻo ʻia e hoʻomaka me nā kaʻina hana AMD Zen2.
  • Hoʻohui ʻia ka hae "-mfunction-return=thunk-extern" e pale aku i ka vulnerability RETBLEED, e hana ana me ka hoʻohui ʻana i kahi ʻano o nā ʻōlelo aʻoaʻo e kāpae ʻole i ke komo ʻana o ka mīkini hoʻokō speculative no nā lālā indirect.

Nā hana hou nui ma LLVM 15.0:

  • Hoʻohui ʻia ke kākoʻo no ka Cortex-M85 CPU, Armv9-A, Armv9.1-A a me Armv9.2-A architectures, Armv8.1-M PACBTI-M hoʻonui.
  • Ua hoʻohui ʻia kahi hope hoʻokolohua no DirectX e kākoʻo ana i ke ʻano DXIL (DirectX Intermediate Language) i hoʻohana ʻia no nā shaders DirectX. Hoʻohana ʻia ka ʻaoʻao hope ma ke kuhikuhi ʻana i ka ʻāpana "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" i ka wā e hui ai.
  • Ke hoʻomau nei ʻo Libc ++ i ka hoʻokō ʻana i nā hiʻohiʻona hou o ka C++20 a me C++2b maʻamau, me ka hoʻopau ʻana i ka hoʻokō ʻana o ka waihona "format" a me ka mana hoʻokolohua i manaʻo ʻia o ka waihona "ranges".
  • Hoʻomaikaʻi ʻia nā ʻaoʻao hope no x86, PowerPC a me RISC-V hoʻolālā.
  • Ua hoʻonui ʻia nā mana o ka LLD linker a me ka LLDB debugger.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka