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

Ma hope o ʻeono mahina o ka hoʻomohala ʻana hōʻike ʻia hoʻokuʻu papahana LLVM 9.0 — ʻO nā mea hana like GCC (nā mea hoʻohui, optimizers a me nā code generators), ka hoʻopili ʻana i nā polokalamu i loko o ka bitcode waena o nā ʻōlelo aʻoaʻo virtual e like me RISC (mekini haʻahaʻa haʻahaʻa me kahi ʻōnaehana hoʻonohonoho multi-level). 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.

ʻO nā hiʻohiʻona hou o LLVM 9.0 ka wehe ʻana i ka hōʻailona hoʻolālā hoʻokolohua mai ke kahua RISC-V i manaʻo ʻia, kākoʻo C++ no OpenCL, ka hiki ke hoʻokaʻawale i kahi papahana i nā ʻāpana dynamically i hoʻouka ʻia ma LLD, a me ka hoʻokō ʻana i ka "asm goto", hoʻohana ʻia ma ka code kernel Linux. libc++ i kākoʻo no WASI (WebAssembly System Interface), a ua hoʻohui pū ʻo LLD i ke kākoʻo mua no ka hoʻopili ikaika ʻana o WebAssembly.

Nā hoʻomaikaʻi ma Clang 9.0:

  • Hoʻohui ʻia ka hoʻokō ʻana i ka ʻōlelo kikoʻī GCC "asm goto", ka mea e hiki ai iā ʻoe ke neʻe mai kahi poloka inline assembler i kahi lepili ma ka code C. Pono kēia hiʻohiʻona e kūkulu i ka kernel Linux ma ke ʻano "CONFIG_JUMP_LABEL=y" me ka hoʻohana ʻana iā Clang ma nā ʻōnaehana me ka hoʻolālā x86_64. Ma ka noʻonoʻo ʻana i nā loli i hoʻohui ʻia i nā hoʻokuʻu mua, hiki ke kūkulu ʻia ka kernel Linux ma Clang no ka hale kiʻi x86_64 (ua kākoʻo ʻia ke kūkulu ʻana no ka lima, aarch64, ppc32, ppc64le a me mips architectures). Eia kekahi, ua hoʻololi ʻia nā papahana Android a me ChromeOS e hoʻohana iā Clang no ke kūkulu ʻana i ka kernel, a ke hoʻāʻo nei ʻo Google iā Clang ma ke kahua nui no ke kūkulu ʻana i nā kernels no kāna hana ʻana i nā ʻōnaehana Linux. I ka wā e hiki mai ana, hiki ke hoʻohana ʻia nā ʻāpana LLVM ʻē aʻe i ke kaʻina hana kernel, me LLD, llvm-objcopy, llvm-ar, llvm-nm, a me llvm-objdump;
  • Hoʻohui i ke kākoʻo hoʻokolohua no ka hoʻohana ʻana iā C++17 ma OpenCL. Loaʻa i nā hiʻohiʻona kikoʻī ke kākoʻo no nā ʻano kikoʻī kikoʻī, ke kāohi ʻana i ka hoʻololi ʻana o ka wahi kikoʻī e nā mea hoʻolele ʻano ʻano, ka hāʻawi ʻana i nā ʻano vector e like me OpenCL no C, ka loaʻa ʻana o nā ʻano OpenCL kikoʻī no nā kiʻi, nā hanana, nā kahawai, etc.
  • Hoʻohui i nā hae hōʻuluʻulu hou "-ftime-trace" a me "-ftime-trace-granularity=N" e hoʻopuka i kahi hōʻike e pili ana i ka manawa hoʻokō o nā pae like ʻole o ka frontend (parsing, initialization) a me ka hope (nā pae hoʻolālā). Mālama ʻia ka hōʻike ma ke ʻano json, kūpono me chrome://tracing a me speedscope.app;
  • Hoʻohui ʻia ka hana ʻana o ka "__declspec(allocator)" mea kikoʻī a me ka hoʻokumu ʻana i ka ʻike debugging e hiki ai iā ʻoe ke nānā i ka hoʻohana ʻana i ka hoʻomanaʻo i ka ʻenehana Visual Studio;
  • No ka ʻōlelo C, ua hoʻohui ʻia ke kākoʻo no ka macro "__FILE_NAME__", e like me ka macro "__FILE__", akā aia ka inoa faila me ka ʻole o ke ala piha;
  • Ua hoʻonui ʻo C++ i ke kākoʻo no nā ʻano kikoʻī kikoʻī no ka uhi ʻana i nā hiʻohiʻona C++ like ʻole, me nā ʻano hoʻohālikelike a me nā kumu hoʻopaʻapaʻa, nā ʻano kuhikuhi, ka hoʻihoʻi ʻano inference, nā mea, nā hana i hana ʻia, nā mea hana i kūkulu ʻia, a me nā mea hou aku.
  • Ua hoʻonui ʻia nā mana e pili ana me ke kākoʻo no OpenCL, OpenMP a me CUDA. Loaʻa kēia i ke kākoʻo mua no ka hoʻokomo pono ʻana i nā hana OpenCL i kūkulu ʻia (ua hoʻohui ʻia ka hae "-fdeclare-opencl-builtins"), ua hoʻokō ʻia ka cl_arm_integer_dot_product extension, a ua hoʻonui ʻia nā mea hana diagnostic;
  • Ua hoʻomaikaʻi ʻia ka hana a ka mea nānā static a ua hoʻohui ʻia nā palapala e pili ana i ka hoʻokō ʻana i ka nānā ʻana. Hoʻohui ʻia nā hae e hōʻike i nā module checker i loaʻa a me nā koho i kākoʻo ʻia ("-analyzer-checker[-option]-help", "-analyzer-checker [-option] -help-alpha" a me "-analyzer-checker [-option] -help "-mea hoʻomohala"). Hoʻohui ʻia ka hae "-analyzer-werror" e mālama i nā ʻōlelo luhi e like me nā hewa.
    Hoʻohui ʻia nā ʻano hōʻoia hou:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling e ʻike i nā hana palekana no ka hana ʻana me nā mea pale;
    • osx.MIGCecker e huli i ka hewa o ka MIG (Mach Interface Generator) i nā rula kelepona;
    • optin.osx.OSObjectCStyleCast e huli i nā hoʻololi mea XNU libkern hewa;
    • apiModeling.llvm me kahi hoʻonohonoho o nā hana nānā hoʻohālike e ʻike i nā hewa ma ka codebase LLVM;
    • Hoʻopaʻa code no ka nānā ʻana i nā mea C++ uninitialized (UninitializedObject i ka pūʻolo optin.cplusplus);
  • Ua hoʻohui ka clang-format utility i ke kākoʻo no ka hoʻopololei ʻana i ke code ma ka ʻōlelo C# a hāʻawi i ke kākoʻo no ke ʻano hoʻopololei code i hoʻohana ʻia e Microsoft;
  • ʻO clang-cl, kahi papa kuhikuhi laina kauoha ʻē aʻe e hāʻawi ana i ka hoʻohālikelike pae koho me ka compiler cl.exe i hoʻokomo ʻia i loko o Visual Studio, ua hoʻohui i nā heuristics e mālama i nā faila i loaʻa ʻole e like me nā koho laina kauoha a hōʻike i kahi ʻōlelo aʻo e pili ana (no ka laʻana, ke holo "clang-cl /diagnostic:caret /c test.cc");
  • Ua hoʻohui ʻia kahi hapa nui o nā loiloi hou i ka linter clang-tidy, me nā loiloi i hoʻohui ʻia i ka OpenMP API;
  • Hoʻonui ʻia hiki ke kikowaena clangd (Clang Server), kahi i hoʻohana ʻia ai ke ʻano kūkulu hale kuhikuhi hope ma ke ʻano maʻamau, ua hoʻohui ʻia ke kākoʻo no nā hana ʻokoʻa me ke code (ka hoʻihoʻi hou ʻana, ka hoʻonui ʻana i nā wehewehe auto a me ka macro, ka hoʻololi ʻana o nā kaula i pakele i nā mea i pakele ʻole), ka hiki ke hōʻike. nā ʻōlelo aʻo mai Clang-tidy, hoʻonui i nā diagnostics o nā hewa i nā faila poʻomanaʻo a hoʻohui i ka hiki ke hōʻike i ka ʻike e pili ana i ke ʻano hierarchy;

ka papa kuhikuhiE nā mea hou LLVM 9.0:

  • Ua hoʻohui ʻia kahi hiʻohiʻona hoʻokaʻawale hoʻokolohua i ka loulou LLD, kahi e hiki ai iā ʻoe ke hoʻokaʻawale i hoʻokahi papahana i nā ʻāpana he nui, aia kēlā me kēia mea i kahi faila ELF kaʻawale. Hāʻawi kēia hiʻohiʻona iā ʻoe e hoʻomaka i ka ʻāpana nui o ka papahana, e hoʻouka i nā mea ʻē aʻe e like me ka mea e pono ai i ka wā o ka hana (no ka laʻana, hiki iā ʻoe ke hoʻokaʻawale i ka mea nānā PDF i kūkulu ʻia i kahi faila ʻokoʻa, e hoʻouka wale i ka wā e wehe ai ka mea hoʻohana i ka PDF. waihona).

    LLD Linker lawe ʻia i mua i kahi mokuʻāina kūpono no ka hoʻopili ʻana i ka kernel Linux no ka hoʻolālā arm32_7, arm64, ppc64le a me x86_64.
    Nā koho hou "-" (puka i ka stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", "- z ifunc-noplt" a me "-z maʻamau-ʻaoʻao-nui". No ka hoʻolālā AArch64, ua hoʻohui ʻia ke kākoʻo no BTI (Branch Target Indicator) a me PAC (Pointer Authentication Code). Ua hoʻomaikaʻi maikaʻi ʻia ke kākoʻo no MIPS, RISC-V a me PowerPC. Hoʻohui i ke kākoʻo mua no ka hoʻopili ikaika no WebAssembly;

  • Ma libc++ hoʻokō ʻia functions ssize, std::is_constant_evaluated, std::midpoint and std::lerp, ua hoʻohui ʻia nā ʻano "mua" a me "hope" i std :: span, nā ʻano o nā ʻano std:: is_unbounded_array a me std:: is_bounded_array ua hoʻohui ʻia , ua hoʻonui ʻia nā mana std: :atomic. Ua hoʻopau ʻia ke kākoʻo no GCC 4.9 (hiki ke hoʻohana me GCC 5.1 a me nā mea hou aku). Hoʻohui kākoʻo WASI (WebAssembly System Interface, he interface no ka hoʻohana ʻana i WebAssembly ma waho o ka polokalamu kele pūnaewele);
  • Ua hoʻohui ʻia nā optimizations hou. Hiki ke hoʻololi i nā kelepona memcmp i bcmp i kekahi mau kūlana. ʻAʻole i hoʻokō ʻia ka nānā ʻana i ka laulā no nā papa lele i hiki ʻole ke kiʻi ʻia nā poloka hoʻololi haʻahaʻa a i ʻole hoʻohana ʻia nā ʻōlelo kuhikuhi, no ka laʻana, ke kāhea ʻana i nā hana me ke ʻano ʻole;
  • Ua hoʻokūpaʻa ʻia ke kua hope no ka hoʻolālā RISC-V, ʻaʻole i hoʻonohonoho hou ʻia ma ke ʻano he hoʻokolohua a kūkulu ʻia e ka paʻamau. Hāʻawi i ke kākoʻo hanauna code piha no RV32I a me RV64I hoʻonohonoho hoʻonohonoho ʻokoʻa me nā hoʻonui MAFDC;
  • Nui nā hoʻomaikaʻi i hana ʻia i nā backends no X86, AArch64, ARM, SystemZ, MIPS, AMDGPU a me PowerPC architectures. No ka laʻana, no ka hoʻolālā
    Hoʻohui ʻia ʻo AArch64 i ke kākoʻo no SVE2 (Scalable Vector Extension 2) a me MTE (Memory Tagging Extensions); ma ka ARM backend, ua hoʻohui ʻia ke kākoʻo no ka hoʻolālā Armv8.1-M a me ka MVE (M-Profile Vector Extension). Ua hoʻohui ʻia ke kākoʻo no ka hoʻolālā GFX10 (Navi) i ka AMDGPU backend, hiki ke hoʻohana ʻia nā mana kelepona hana ma ke ʻano maʻamau, a ua hoʻāla ʻia kahi pass hui. DPP (Data-Parallel Primitives).

  • Loaʻa i ka LLDB debugger i kēia manawa ke kala kala no nā backtraces a hoʻohui i ke kākoʻo no nā poloka DWARF4 debug_types a me DWARF5 debug_info;
  • Ua hoʻohui ʻia ke kākoʻo no nā faila mea a me nā faila ma ke ʻano COFF i nā pono llvm-objcopy a me llvm-strip.

Source: opennet.ru

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