ืฉื—ืจื•ืจ ืžืขืจืš ื”ืžื”ื“ืจ LLVM 15.0

ืœืื—ืจ ืฉื™ืฉื” ื—ื•ื“ืฉื™ื ืฉืœ ืคื™ืชื•ื—, ื”ื•ืฆื’ื” ื”ืฉื—ืจื•ืจ ืฉืœ ืคืจื•ื™ืงื˜ LLVM 15.0 - ืขืจื›ืช ื›ืœื™ื ืชื•ืืžืช GCC (ืžื”ื“ืจื™ื, ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื•ืžื—ื•ืœืœื™ ืงื•ื“) ื”ืžืจื›ื™ื‘ื” ืชื•ื›ื ื™ื•ืช ืœืงื•ื“ ื‘ื™ื ื™ื™ื ืฉืœ ื”ื•ืจืื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื“ืžื•ื™ื•ืช RISC (ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืจืžื” ื ืžื•ื›ื” ืขื ืžืขืจื›ืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืžืจื•ื‘ืช ืจืžื•ืช). ื ื™ืชืŸ ืœื”ืžื™ืจ ืืช ื”ืคืกืื•ื“ื•ืงื•ื“ ืฉื ื•ืฆืจ ื‘ืืžืฆืขื•ืช ืžื”ื“ืจ JIT ืœื”ื•ืจืื•ืช ืžื›ื•ื ื” ื™ืฉื™ืจื•ืช ื‘ื–ืžืŸ ื‘ื™ืฆื•ืข ื”ืชื•ื›ื ื™ืช.

ืฉื™ืคื•ืจื™ื ืขื™ืงืจื™ื™ื ื‘-Clang 15.0:

  • ืขื‘ื•ืจ ืžืขืจื›ื•ืช ื”ืžื‘ื•ืกืกื•ืช ืขืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช x86, ื ื•ืกืฃ ื”ื“ื’ืœ "-fzero-call-used-regs", ื”ืžื‘ื˜ื™ื— ืฉื›ืœ ืื•ื’ืจื™ ื”ืžืขื‘ื“ ื”ืžืฉืžืฉื™ื ื‘ืคื•ื ืงืฆื™ื” ืžืื•ืคืกื™ื ืœืืคืก ืœืคื ื™ ื”ื—ื–ืจืช ื”ืฉืœื™ื˜ื” ืžื”ืคื•ื ืงืฆื™ื”. ืืคืฉืจื•ืช ื–ื• ืžืืคืฉืจืช ืœืš ืœื”ื’ืŸ ืžืคื ื™ ื“ืœื™ืคืช ืžื™ื“ืข ืžืคื•ื ืงืฆื™ื•ืช ื•ืœื”ืคื—ื™ืช ืืช ืžืกืคืจ ื”ื‘ืœื•ืงื™ื ื”ืžืชืื™ืžื™ื ืœื‘ื ื™ื™ืช ื’ืื“ื’'ื˜ื™ื ืฉืœ ROP (Return-Oriented Programming) ื‘ื ื™ืฆื•ืœื™ื ื‘ื›-20%.
  • ื”ื•ื˜ืžืขื” ืืงืจืื™ืช ืฉืœ ืžื™ืงื•ื ื–ื™ื›ืจื•ืŸ ืฉืœ ืžื‘ื ื™ื ืขื‘ื•ืจ ืงื•ื“ C, ืžื” ืฉืžืงืฉื” ืขืœ ื—ื™ืœื•ืฅ ื”ื ืชื•ื ื™ื ืžืžื‘ื ื™ื ื‘ืžืงืจื” ืฉืœ ื ื™ืฆื•ืœ ืฉืœ ื ืงื•ื“ื•ืช ืชื•ืจืคื”. ื”ืืงืจืื™ื•ืช ืžื•ืคืขืœืช ื•ืžื›ื‘ื” ื‘ืืžืฆืขื•ืช ื”ืžืืคื™ื™ื ื™ื randomize_layout ื•-no_randomize_layout, ื•ื“ื•ืจืฉืช ื”ื’ื“ืจืช ืกื™ื“ ื‘ืืžืฆืขื•ืช ื”ื“ื’ืœ "-randomize-layout-seed" ืื• "-randomize-layout-seed-file".
  • ื ื•ืกืฃ ื“ื’ืœ "-fstrict-flex-arrays=" ", ืฉื‘ืืžืฆืขื•ืชื• ื ื™ืชืŸ ืœืฉืœื•ื˜ ื‘ื’ื‘ื•ืœื•ืช ืฉืœ ืจื›ื™ื‘ ืžืขืจืš ื’ืžื™ืฉ ื‘ืžื‘ื ื™ื (Flexible Array Members, ืžืขืจืš ื‘ื’ื•ื“ืœ ื‘ืœืชื™ ืžื•ื’ื“ืจ ื‘ืกื•ืฃ ื”ืžื‘ื ื”). ื›ืืฉืจ ืžื•ื’ื“ืจ ืœ-0 (ื‘ืจื™ืจืช ืžื—ื“ืœ), ื”ืืœืžื ื˜ ื”ืื—ืจื•ืŸ ืฉืœ ื”ืžื‘ื ื” ืขื ืžืขืจืš ืžืขื•ื‘ื“ ืชืžื™ื“ ื›ืžืขืจืš ื’ืžื™ืฉ, 1 - ืจืง ื’ื“ืœื™ื [], [0] ื•-[1] ืžืขื•ื‘ื“ื™ื ื›ืžืขืจืš ื’ืžื™ืฉ, 2 - ื’ื“ืœื™ื ื‘ืœื‘ื“ [] ื•-[0] ืžืขื•ื‘ื“ื™ื ื›ืžื• ืžืขืจืš ื’ืžื™ืฉ.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื ื™ืกื™ื•ื ื™ืช ืœืฉืคื” ื“ืžื•ื™ืช C HLSL (High-Level Shader Language), ื”ืžืฉืžืฉืช ื‘-DirectX ืœื›ืชื™ื‘ืช ื”ืฆืœืœื•ืช.
  • ื ื•ืกืฃ "-Warray-parameter" ื›ื“ื™ ืœื”ืชืจื™ืข ืขืœ ืขืงื™ืคืช ืคื•ื ืงืฆื™ื•ืช ืขื ื”ืฆื”ืจื•ืช ืืจื’ื•ืžื ื˜ื™ื ืœื ืชื•ืืžื•ืช ื”ืงืฉื•ืจื•ืช ืœืžืขืจื›ื™ื ื‘ืื•ืจืš ืงื‘ื•ืข ื•ืžืฉืชื ื”.
  • ืชืื™ืžื•ืช ืžืฉื•ืคืจืช ืขื MSVC. ื ื•ืกืคื” ืชืžื™ื›ื” ื‘-"#pragma function" (ืžื ื—ื” ืืช ื”ืžื”ื“ืจ ืœื™ืฆื•ืจ ืงืจื™ืืช ืคื•ื ืงืฆื™ื” ื‘ืžืงื•ื ื”ืจื—ื‘ื” ืžื•ื˜ื‘ืขืช) ื•-"#pragma alloc_text" (ืžื’ื“ื™ืจ ืืช ืฉื ื”ืงื˜ืข ืขื ืงื•ื“ ื”ืคื•ื ืงืฆื™ื”) ื”ืžืกื•ืคืง ื‘-MSVC. ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื“ื’ืœื™ /JMC ื•-/JMC ืชื•ืืžื™ MSVC.
  • ื”ืขื‘ื•ื“ื” ื ืžืฉื›ืช ืœืชืžื™ื›ื” ื‘ืชืงื ื™ C2X ื•-C++23 ืขืชื™ื“ื™ื™ื. ืขื‘ื•ืจ ืฉืคืช C, ืžื™ื•ืฉืžื™ื ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื: ืชื›ื•ื ืช noreturn, ืžื™ืœื•ืช ื”ืžืคืชื— false ื•-true, ืกื•ื’ _BitInt(N) ืขื‘ื•ืจ ืžืกืคืจื™ื ืฉืœืžื™ื ืฉืœ ืขื•ืžืง ืกื™ื‘ื™ื•ืช ื ืชื•ืŸ, ืคืงื•ื“ื•ืช ืžืืงืจื• *_WIDTH, ืงื™ื“ื•ืžืช u8 ืœืชื•ื•ื™ื ืžืงื•ื“ื“ื™ื ื‘-UTF-8.

    ืขื‘ื•ืจ C++, ืžื™ื•ืฉืžื™ื ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื: ืžื™ื–ื•ื’ ืžื•ื“ื•ืœื™ื, ื‘ื™ื“ื•ื“ ABI ืฉืœ ื—ื‘ืจื™ ืคื•ื ืงืฆื™ื”, ืืชื—ื•ืœ ื“ื™ื ืžื™ ืžืกื•ื“ืจ ืฉืœ ืžืฉืชื ื™ื ืœื ืžืงื•ืžื™ื™ื ื‘ืžื•ื“ื•ืœื™ื, ืื•ืคืจื˜ื•ืจื™ื ืฉืœ ืื™ื ื“ืงืก ืจื‘ ืžืžื“ื™, auto(x), ืžืฉืชื ื™ื ืœื ืžื™ืœื•ืœื™ื™ื, goto ื•ืชื•ื•ื™ื•ืช ื‘ืคื•ื ืงืฆื™ื•ืช ื”ืžื•ืฆื”ืจื•ืช ื›-constexpr , ืจืฆืคื™ ื‘ืจื™ื—ื” ืžื•ืคืจื“ื™ื, ืชื•ื•ื™ ื‘ืจื™ื—ื” ื‘ืฉื.

  • ื”ื™ื›ื•ืœื•ืช ื”ืงืฉื•ืจื•ืช ืœืชืžื™ื›ื” ื‘-OpenCL ื•-OpenMP ื”ื•ืจื—ื‘ื•. ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืกื™ื•ืžืช OpenCL cl_khr_subgroup_rotate.
  • ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจืช x86, ื ื•ืกืคื” ื”ื’ื ื” ืžืคื ื™ ืคื’ื™ืขื•ื™ื•ืช ื‘ืžืขื‘ื“ื™ื ื”ื ื’ืจืžื•ืช ืžื‘ื™ืฆื•ืข ืกืคืงื•ืœื˜ื™ื‘ื™ ืฉืœ ื”ื•ืจืื•ืช ืœืื—ืจ ืคืขื•ืœื•ืช ืงืคื™ืฆื” ื‘ืœืชื™ ืžื•ืชื ื™ืช ืงื“ื™ืžื”. ื”ื‘ืขื™ื” ืžืชืจื—ืฉืช ืขืงื‘ ืขื™ื‘ื•ื“ ืžื ืข ืฉืœ ื”ื•ืจืื•ืช ืžื™ื“ ืœืื—ืจ ื”ื•ืจืืช ื”ืกื ื™ืฃ ื‘ื–ื™ื›ืจื•ืŸ (SLS, Straight Line Speculation). ื›ื“ื™ ืœืืคืฉืจ ื”ื’ื ื”, ืžื•ืฆืขืช ื”ืืคืฉืจื•ืช "-mharden-sls=[none|all|return|indirect-jmp]".
  • ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžื•ืช ื”ืชื•ืžื›ื•ืช ื‘ืกื™ื•ืžืช SSE2, ื ื•ืกืฃ ื”ืกื•ื’ _Float16, ืืฉืจ ืžื—ื•ืงื” ื‘ืืžืฆืขื•ืช ืกื•ื’ float ื‘ืžืงืจื” ืฉืœ ื—ื•ืกืจ ืชืžื™ื›ื” ื‘ื”ื•ืจืื•ืช AVX512-FP16.
  • ื ื•ืกืฃ ื“ื’ืœ "-m[no-]rdpru" ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ืฉื™ืžื•ืฉ ื‘ื”ื•ืจืื” RDPRU, ื ืชืžืš ื”ื—ืœ ืžืžืขื‘ื“ื™ AMD Zen2.
  • ื”ื•ืกื™ืฃ ืืช ื”ื“ื’ืœ "-mfunction-return=thunk-extern" ื›ื“ื™ ืœื”ื’ืŸ ืžืคื ื™ ืคื’ื™ืขื•ืช RETBLEED, ื”ืคื•ืขืœืช ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืจืฆืฃ ื”ื•ืจืื•ืช ืฉืœื ื›ื•ืœืœ ืžืขื•ืจื‘ื•ืช ืฉืœ ืžื ื’ื ื•ืŸ ื”ื‘ื™ืฆื•ืข ื”ืกืคืงื•ืœื˜ื™ื‘ื™ ืขื‘ื•ืจ ืขื ืคื™ื ืขืงื™ืคื™ื.

ื—ื™ื“ื•ืฉื™ื ืžืจื›ื–ื™ื™ื ื‘-LLVM 15.0:

  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช Cortex-M85 CPU, Armv9-A, Armv9.1-A ื•-Armv9.2-A, ื”ืจื—ื‘ื•ืช Armv8.1-M PACBTI-M.
  • ื ื•ืกืฃ ืงืฆื” ืขื•ืจืคื™ ื ื™ืกื™ื•ื ื™ ืขื‘ื•ืจ DirectX ื”ืชื•ืžืš ื‘ืคื•ืจืžื˜ DXIL (DirectX Intermediate Language) ื”ืžืฉืžืฉ ืขื‘ื•ืจ ื”ืฆืœืœื•ืช DirectX. ื”ืงืฆื” ื”ืื—ื•ืจื™ ืžื•ืคืขืœ ืขืœ ื™ื“ื™ ืฆื™ื•ืŸ ื”ืคืจืžื˜ืจ "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" ื‘ืžื”ืœืš ื”ื”ืจื›ื‘ื”.
  • Libc++ ืžืžืฉื™ื›ื” ืœื™ื™ืฉื ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ืฉืœ ืชืงื ื™ C++20 ื•-C++2b, ื›ื•ืœืœ ื”ืฉืœืžืช ื”ื™ื™ืฉื•ื ืฉืœ ืกืคืจื™ื™ืช "ืคื•ืจืžื˜" ื•ื”ื’ืจืกื” ื”ื ื™ืกื™ื•ื ื™ืช ื”ืžื•ืฆืขืช ืฉืœ ืกืคืจื™ื™ืช "ื˜ื•ื•ื—ื™ื".
  • ืงืฆื” ืื—ื•ืจื™ ืžืฉื•ืคืจ ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช x86, PowerPC ื•-RISC-V.
  • ื”ื™ื›ื•ืœื•ืช ืฉืœ ืžืงืฉืจ LLD ื•-LLDB ื‘ืื’ื™ื ืฉื•ืคืจื•.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”