เบ›เปˆเบญเบเบŠเบธเบ”เบ„เบญเบกเบžเบตเบงเป€เบ•เบต LLVM 11.0

เบซเบผเบฑเบ‡เบˆเบฒเบเบซเบปเบเป€เบ”เบทเบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ เบ™เบณ เบชเบฐ เป€เปœเบต เบเบฒเบ™เบ›เปˆเบญเบเป‚เบ„เบ‡เบเบฒเบ™ LLVM 11.0 โ€” เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เบเบฑเบš GCC (เบ„เบญเบกโ€‹เบžเบดเบงโ€‹เป€เบ•เบต, optimizers เปเบฅเบฐโ€‹เบชเป‰เบฒเบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”), compiling เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™ bitcode เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบ›เบฒเบ™โ€‹เบเบฒเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เปเบ™เบฐโ€‹เบ™เปเบฒ virtual เป€เบŠเบฑเปˆเบ™ RISC (เป€เบ„เบทเปˆเบญเบ‡ virtual เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบ•โ€‹เปˆโ€‹เปโ€‹เบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เบซเบผเบฒเบโ€‹เบฅเบฐโ€‹เบ”เบฑเบš). เบฅเบฐเบซเบฑเบ” pseudocode เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เปˆเบฝเบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบชเบฑเบ‡เบฅเบงเบก JIT เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเป‚เบ”เบเบเบปเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™.

เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบเปƒเบซเบกเปˆเปเบกเปˆเบ™เบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒ เบ‚เป‰เบฒเบ‡, frontend เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ Fortran. Flang เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Fortran 2018, OpenMP 4.5 เปเบฅเบฐ OpenACC 3.0, เปเบ•เปˆเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบชเปเบฒเป€เบฅเบฑเบ”เปเบฅเบฐเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒเปเบกเปˆเบ™เบˆเปเบฒเบเบฑเบ”เบเบฒเบ™เปเบเบเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡. เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡ LLVM เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปเบฅเบฐเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰, เบฅเบฐเบซเบฑเบ” canonical เปเบกเปˆเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปเบฅเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบ„เบญเบกเบžเบตเบงเป€เบ•เบต Fortran เบžเบฒเบเบ™เบญเบ.

เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡ เปƒเบ™ Clang 11.0:

  • เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบนเบ•เบปเป‰เบ™เป„เบกเป‰ syntax abstract (AST) เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ” C++ เบ—เบตเปˆเปเบ•เบเบซเบฑเบ, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเบงเบดเบ™เบดเบ”เป„เบชเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปเบฅเบฐเบชเบฐเบซเบ™เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบซเป‰เบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบžเบฒเบเบ™เบญเบเป€เบŠเบฑเปˆเบ™ clang-tidy เปเบฅเบฐ clangd. เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ” C++ เปเบฅเบฐเบ–เบทเบเบ„เบงเบšเบ„เบธเบกเบœเปˆเบฒเบ™เบ•เบปเบงเป€เบฅเบทเบญเบ "-Xclang -f[no-]recovery-ast".
  • เป€เบžเบตเปˆเบกเป‚เปเบ”เบงเบดเบ™เบดเบ”เป„เบชเปƒเปเปˆ:
    • โ€œ-Wpointer-to-int-castโ€ เปเบกเปˆเบ™เบเบธเปˆเบกเบ„เบณเป€เบ•เบทเบญเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบชเบฑเบ™เบเบฒเบ™เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบ›เบฐเป€เบžเบ”เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก int เบ—เบตเปˆเบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบšเบ„เปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบฑเบ‡เปเบปเบ”.
    • โ€œ-wuninitialized-const-referenceโ€ - เบเบฒเบ™เป€เบ•เบทเบญเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ•เบปเบงเปเบ›เบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบเปƒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบเบญเบกเบฎเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เบ”เป‰เบงเบเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "const".
    • "-Wimplicit-const-int-float-conversion" - เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเบ„เปเบฒเป€เบ•เบทเบญเบ™เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปเบ›เบ‡ implicit เบ‚เบญเบ‡เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ”เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก.
  • เบชเปเบฒเบฅเบฑเบšเปเบžเบฅเบฐเบ•เบฐเบŸเบญเบก ARM, C functions เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ compiler เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰ (เบžเบฒเบเปƒเบ™), เปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ vector เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš Arm v8.1-M MVE เปเบฅเบฐ CDE. เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™ header files arm_mve.h เปเบฅเบฐ arm_cde.h.
  • เป€เบžเบตเปˆเบกเปเบฅเป‰เบง เบŠเบธเบ”เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบ‚เบฐเบซเบเบฒเบ _ExtInt(N), เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบ„เบนเบ™เบ‚เบญเบ‡เบเปเบฒเบฅเบฑเบ‡เบชเบญเบ‡, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ FPGA/HLS. เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, _ExtInt(7) เบเปเบฒเบ™เบปเบ”เบ›เบฐเป€เบžเบ”เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบ 7 เบšเบดเบ”.
  • เป€เบžเบตเปˆเบก macro เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™ C เบ—เบตเปˆเบกเบตเปƒเบ™เบ•เบปเบงเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ ARM SVE (Scalable Vector Extension):
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบฐเบซเบฒเบžเบฒเบ __ARM_FEATURE_SVE เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” AArch64 เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡ "-march=armv8-a+sve".

  • เบ•เบญเบ™เบ™เบตเป‰เบ—เบธเบ‡ "-O" เบ–เบทเบเบฅเบฐเบšเบธเบ”เป‰เบงเบเบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš "-O1" เปเบ—เบ™ "-O2".
  • เป€เบžเบตเปˆเบกเบ—เบธเบ‡ compiler เปƒเบซเบกเปˆ:
    • "-fstack-clash-protection" - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เบ•เปเปˆเบ•เป‰เบฒเบ™ เบ—เบฒเบ‡เบ•เบฑเบ”เบ‚เบญเบ‡ stack เปเบฅเบฐ heap.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบฅเบทเบญเบเบฎเบนเบšเปเบšเบšเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเป€เบฅเบเบˆเบธเบ”เบฅเบญเบ.
    • "-ffp-model={precise,strict,fast}" - เบ‡เปˆเบฒเบเปƒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบŠเบธเบ”เบ•เบปเบงเป€เบฅเบทเบญเบเบžเบดเป€เบชเบ”เบชเบณเบฅเบฑเบšเบ•เบปเบงเป€เบฅเบเบˆเบธเบ”เบฅเบญเบ.
    • "-fpch-codegen" เปเบฅเบฐ "-fpch-debuginfo" เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ header precompiled (PCH) เบ—เบตเปˆเบกเบตเป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เปเบฅเบฐ debuginfo.
    • โ€œ-fsanitize-coverage-allowlistโ€ เปเบฅเบฐ โ€œ-fsanitize-coverage-blocklistโ€ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบšเบฑเบ™เบŠเบตเบ‚เบฒเบง เปเบฅเบฐเบšเบฑเบ™เบŠเบตเบ”เปเบฒ.
    • โ€œ-mtls-size={12,24,32,48}โ€ เป€เบžเบทเปˆเบญเป€เบฅเบทเบญเบเบ‚เบฐเปœเบฒเบ” TLS (thread-local storage).
    • "-menable-experimental-extension" เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ RISC-V เบ—เบปเบ”เบฅเบญเบ‡.
  • เบฎเบนเบšเปเบšเบšเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ C เปเบกเปˆเบ™ "-fno-common", เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบถเป‰เบ™เปƒเบ™เบšเบฒเบ‡เป€เบงเบ—เบต.
  • cache เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป„เบ”เป‰เบ–เบทเบเบเป‰เบฒเบเบˆเบฒเบ /tmp เป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต ~/.cache. เป€เบžเบทเปˆเบญเบฅเบปเบšเบฅเป‰เบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบ—เบธเบ‡ โ€œ-fmodules-cache-path=โ€.
  • เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบžเบฒเบชเบฒ C เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบˆเบฒเบ gnu11 เป€เบ›เบฑเบ™ gnu17.
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ GNU C "asm เปƒเบ™เปเบ–เบงยปเป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเปเบœเปˆเบ™เบ›เบฐเบเบญเบš. เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบเบฑเบ‡เบ–เบทเบเบงเบดเป€เบ„เบฒเบฐ, เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบ›เบฐเบกเบงเบ™เบœเบปเบ™เปƒเบ™เบ—เบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก.
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ OpenCL เปเบฅเบฐ CUDA เป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบ. เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš OpenCL 2.0 เบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเบšเบฅเบฑเบญเบเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ” OpenMP 5.0 เปƒเบซเบกเปˆ.
  • เป€เบžเบตเปˆเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบ IndentExternBlock เปƒเบซเป‰เบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™ clang-format เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบžเบฒเบเปƒเบ™ extern "C" เปเบฅเบฐ extern "C++".
  • เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เป„เบ”เป‰เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ•เบปเบงเบชเป‰เบฒเบ‡เบ—เบตเปˆเบชเบทเบšเบ—เบญเบ”เปƒเบ™ C++. เป€เบžเบตเปˆเบกเบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเปเปˆ alpha.core.C11Lock เปเบฅเบฐ alpha.fuchsia.Lock เป€เบžเบทเปˆเบญเบเบงเบ”เบชเบญเบšเบเบฒเบ™เบฅเบฑเบญเบ, alpha.security.cert.pos.34c เป€เบžเบทเปˆเบญเบเบงเบ”เบซเบฒเบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบ—เบตเปˆเบšเปเปˆเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡ putenv, webkit.NoUncountedMemberChecker เปเบฅเบฐ webkit.RefCntblBaseVirtualDtor เป€เบžเบทเปˆเบญเบเบงเบ”เบซเบฒเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ™เบฑเบšเป„เบ”เป‰. .cplusplus .SmartPtr เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ•เบปเบงเบŠเบตเป‰ smart null.
  • เปƒเบ™ linter clang-tidy เป€เบžเบตเปˆเบก เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเบซเบกเปˆ.
  • เป€เบŠเบตเบšเป€เบงเบต clangd caching (Clang Server) เป„เบ”เป‰เบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš เปเบฅเบฐเป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเปƒเปเปˆ.

เบ•เบปเป‰เบ™โ€‹เบ•เป เบ™เบฐเบงเบฑเบ”เบ•เบฐเบเปเบฒ LLVM 11.0:

  • เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เป„เบ›เปƒเบŠเป‰ Python 3. เบ–เป‰เบฒ Python 3 เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐ rollback เป„เบ›เปƒเบŠเป‰ Python 2.
  • เบชเปˆเบงเบ™เบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒเบเบฑเบš compiler เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ Go (llgo) เปเบกเปˆเบ™เบšเปเปˆเบฅเบงเบกเบญเบญเบเบˆเบฒเบเบเบฒเบ™เบ›เปˆเบญเบ, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ›เบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”.
  • เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ vector-function-abi-variant เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบ•เบปเบงเบเบฒเบ‡ (IR) เป€เบžเบทเปˆเบญเบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™ scalar เปเบฅเบฐ vector เป€เบžเบทเปˆเบญ vectorize เบเบฒเบ™เป‚เบ—. เบˆเบฒเบ llvm::VectorType เบกเบตเบชเบญเบ‡เบ›เบฐเป€เบžเบ” vector เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ llvm::FixedVectorType เปเบฅเบฐ llvm::ScalableVectorType.
  • เบชเบฒเบ‚เบฒเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เปˆเบฒ udef เปเบฅเบฐเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ„เปˆเบฒ undef เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ–เบทเบเบฎเบฑเบšเบฎเบนเป‰เบงเปˆเบฒเป€เบ›เบฑเบ™เบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”. IN
    memset/memcpy/memmove เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ–เปˆเบฒเบเบ—เบญเบ”เบ•เบปเบงเบŠเบตเป‰ undef, เปเบ•เปˆเบ–เป‰เบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เปเบกเปˆเบ™เบชเบนเบ™.

  • LLJIT เป„เบ”เป‰เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™ LLJIT::initialize เปเบฅเบฐ LLJIT::deinitialize method. เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ„เบปเบ‡เบ—เบตเปˆ JITDylib เป‚เบ”เบเปƒเบŠเป‰เบซเป‰เบญเบ‡เบฎเบฝเบ™ StaticLibraryDefinitionGenerator เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เป€เบžเบตเปˆเบก C API เบชเปเบฒเบฅเบฑเบš ORCv2 (API เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡ JIT compilers).
  • เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš Cortex-A64, Cortex-A34, Cortex-A77 เปเบฅเบฐ Cortex-X78 processors เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ backend เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ AArch1. เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ ARMv8.2-BF16 (BFloat16) เปเบฅเบฐ ARMv8.6-A, เบฅเบงเบกเบ—เบฑเบ‡ RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (เบชเบฐเป€เปเบทเบญเบ™เบˆเบดเบ‡ Monitors) เปเบฅเบฐ ARMv8.0-DGH (เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™). เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เปƒเบ™โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบœเบนเบโ€‹เบกเบฑเบ”โ€‹เบเบฑเบšโ€‹เบ„เปเบฒโ€‹เปเบ™เบฐโ€‹เบ™เปเบฒ vector vector เปเบกเปˆเบ™โ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เปƒเบซเป‰โ€‹.
  • เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš Cortex-M55, Cortex-A77, Cortex-A78 เปเบฅเบฐ Cortex-X1 processors เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ backend เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ ARM. เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”
    Armv8.6-A Matrix Multiply เปเบฅเบฐ RMv8.2-AA32BF16 BFloat16.

  • เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเป‚เบ›เป€เบŠเบ”เป€เบŠเบต POWER10 เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ backend เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ PowerPC. เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡ loop เป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเปเบฅเบฐเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบˆเบธเบ”เบฅเบญเบเป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡.
  • backend เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ RISC-V เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบกเบตเบเบฒเบ™เบเบญเบกเบฎเบฑเบšเบ‚เบญเบ‡ patches เบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบŠเบธเบ”เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ—เบปเบ”เบฅเบญเบ‡เบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบกเบฑเบ”เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™.
  • backend เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ AVR เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เบˆเบฒเบเบ›เบฐเป€เบžเบ”เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡, เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบเบฒเบ™เปเบˆเบเบขเบฒเบเบžเบทเป‰เบ™เบ–เบฒเบ™.
  • backend เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ x86 เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ Intel AMX เปเบฅเบฐ TSXLDTRK. เป€เบžเบตเปˆเบกเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบต LVI (Load Value Injection), เปเบฅเบฐเบเบฑเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ™เป„เบเบเบฒเบ™เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡เบ‚เบญเบ‡ Speculative Execution เบ—เบปเปˆเบงเป„เบ›เป€เบžเบทเปˆเบญเบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ—เบตเปˆเป€เบเบตเบ”เบˆเบฒเบเบเบฒเบ™เบ„เบฒเบ”เบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เปƒเบ™ CPU.
  • เปƒเบ™ backend เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ SystemZ, เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ MemorySanitizer เปเบฅเบฐ LeakSanitizer เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก.
  • Libc++ เป€เบžเบตเปˆเบกเบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเป„เบŸเบฅเปŒเบชเปˆเบงเบ™เบซเบปเบงเบ”เป‰เบงเบเบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆเบ—เบฒเบ‡เบ„เบฐเบ™เบดเบ”เบชเบฒเบ” .
  • เบ‚เบฐเบซเบเบฒเบ เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ LLD. เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเปเบšเบš ELF, เบฅเบงเบกเบ—เบฑเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเป€เบžเบตเปˆเบก "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", ". -thinlto- single-module", "-unique", "-rosegment", "-threads=N". เป€เบžเบตเปˆเบกเบ•เบปเบงเป€เบฅเบทเบญเบ "--time-trace" เป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปƒเบชเปˆเป„เบŸเบฅเปŒ, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบงเบดเป€เบ„เบฒเบฐเป„เบ”เป‰เบœเปˆเบฒเบ™ chrome://tracing interface เปƒเบ™ Chrome.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™