Tso tawm ntawm LLVM 9.0 compiler suite

Tom qab rau lub hlis ntawm kev loj hlob hais tawm qhov project tso tawm LWM 9.0 - GCC-tshaj cov cuab yeej (compilers, optimizers thiab code generators), compiling cov kev pab cuam rau hauv nruab nrab bitcode ntawm RISC-zoo li cov lus qhia virtual (qib-theem virtual tshuab nrog ntau theem optimization system). Lub generated pseudocode tuaj yeem hloov dua siab tshiab siv JIT compiler rau hauv cov lus qhia tshuab ncaj qha thaum lub sijhawm ua haujlwm.

Cov yam ntxwv tshiab ntawm LLVM 9.0 suav nrog kev tshem tawm qhov kev sim tsim los ntawm lub hom phiaj RISC-V platform, C ++ kev txhawb nqa rau OpenCL, muaj peev xwm faib cov kev pab cuam rau hauv qhov chaw dynamically loaded hauv LLD, thiab kev siv ntawm "yam goto", siv nyob rau hauv Linux kernel code. libc ++ ntxiv kev txhawb nqa rau WASI (WebAssembly System Interface), thiab LLD ntxiv kev txhawb nqa thawj zaug rau WebAssembly dynamic txuas.

Kev Txhim Kho Hauv Clang 9.0:

  • Ntxiv Kev ua raws li GCC cov lus qhia tshwj xeeb "yam goto", uas tso cai rau koj txav los ntawm kev sib sau ua ke hauv kab thaiv mus rau daim ntawv lo hauv C code. Cov yam ntxwv no yuav tsum tau tsim lub Linux ntsiav hauv "CONFIG_JUMP_LABEL=y" hom siv Clang ntawm cov tshuab nrog x86_64 architecture. Muab rau hauv tus account cov kev hloov pauv ntxiv hauv kev tshaj tawm yav dhau los, Linux ntsiav tam sim no tuaj yeem tsim hauv Clang rau x86_64 architecture (yav dhau los tsuas yog lub tsev rau caj npab, aarch64, ppc32, ppc64le thiab mips architectures tau txais kev txhawb nqa). Ntxiv mus, Android thiab ChromeOS tej yaam num twb tau hloov dua siab tshiab los siv Clang rau kernel tsev, thiab Google tab tom sim Clang raws li lub ntsiab platform rau tsim kernels rau nws cov Linux systems. Nyob rau yav tom ntej, lwm yam LLVM tuaj yeem siv rau hauv cov txheej txheem tsim cov ntsiav, suav nrog LLD, llvm-objcopy, llvm-ar, llvm-nm, thiab llvm-objdump;
  • Ntxiv kev sim txhawb rau kev siv C ++ 17 hauv OpenCL. Cov yam ntxwv tshwj xeeb suav nrog kev txhawb nqa rau qhov chaw nyob tus cwj pwm, thaiv qhov chaw nyob qhov chaw hloov pauv los ntawm cov neeg ua haujlwm casting, muab cov vector hom xws li hauv OpenCL rau C, muaj qhov tshwj xeeb OpenCL hom rau cov duab, xwm txheej, raws, thiab lwm yam.
  • Ntxiv cov tshiab compiler chij "-ftime-trace" thiab "-ftime-trace-granularity = N" los tsim ib daim ntawv qhia txog lub sijhawm ua tiav ntawm ntau theem ntawm frontend (parsing, initialization) thiab backend (optimization stages). Daim ntawv tshaj tawm tau txais kev cawmdim hauv json hom, sib xws nrog chrome://tracing thiab speedscope.app;
  • Ntxiv kev ua haujlwm ntawm "__declspec(tus neeg faib khoom)" tus cim tshwj xeeb thiab tsim cov ntaub ntawv debugging uas tso cai rau koj los saib xyuas kev nco noj hauv Visual Studio ib puag ncig;
  • Rau cov lus C, kev txhawb nqa tau ntxiv rau "__FILE_NAME__" macro, uas zoo li "__FILE__" macro, tab sis suav nrog tsuas yog cov npe cov ntaub ntawv tsis muaj txoj hauv kev tag nrho;
  • C ++ tau nthuav dav kev txhawb nqa rau qhov chaw nyob tus cwj pwm kom npog ntau yam C ++ nta, suav nrog cov qauv ntsuas thiab cov qauv sib cav, hom siv, rov qab hom kev xav, cov khoom, nws pib ua haujlwm, cov neeg ua haujlwm tsim, thiab ntau dua.
  • Lub peev xwm cuam tshuam nrog kev txhawb nqa rau OpenCL, OpenMP thiab CUDA tau nthuav dav. Qhov no suav nrog kev txhawb nqa thawj zaug rau kev suav nrog kev ua haujlwm ntawm OpenCL ua haujlwm (tus chij "-fdeclare-opencl-builtins" tau ntxiv), cl_arm_integer_dot_product txuas ntxiv tau siv, thiab cov cuab yeej kuaj mob tau nthuav dav;
  • Kev ua haujlwm ntawm qhov ntsuas static tau raug txhim kho thiab cov ntaub ntawv ntawm kev ua haujlwm zoo li qub tau ntxiv. Ntxiv cov chij los tso saib muaj cov checker modules thiab cov kev xaiv uas txhawb nqa ("-analyzer-checker[-option]-pab", "-analyzer-checker[-option]-help-alpha" thiab "-analyzer-checker[-option]-pab "-tus tsim tawm"). Ntxiv "-analyzer-werror" chij los kho cov lus ceeb toom ua yuam kev.
    Ntxiv hom kev pov thawj tshiab:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling txhawm rau txheeb xyuas cov kev coj ua tsis zoo rau kev ua haujlwm nrog buffers;
    • osx.MIGChecker mus nrhiav kev ua txhaum ntawm MIG (Mach Interface Generator) hu rau cov cai;
    • optin.osx.OSObjectCStyleCast nrhiav qhov tsis raug XNU libkern khoom hloov pauv;
    • apiModeling.llvm nrog cov txheej txheem kev kuaj xyuas ua haujlwm txhawm rau txheeb xyuas qhov yuam kev hauv LLVM codebase;
    • Stabilized code rau kev tshuaj xyuas cov khoom siv C++ uas tsis tsim nyog (UninitializedObject hauv pob optin.cplusplus);
  • Clang-format utility tau ntxiv kev txhawb nqa rau formatting code hauv C# hom lus thiab muab kev txhawb nqa rau cov code formatting style siv los ntawm Microsoft;
  • clang-cl, lwm qhov kev hais kom ua-kab sib txuas uas muab kev xaiv-qib sib raug zoo nrog cl.exe compiler suav nrog hauv Visual Studio, tau ntxiv heuristics los kho cov ntaub ntawv tsis muaj nyob raws li cov kev xaiv kab lus thiab tso saib cov lus ceeb toom sib raug (piv txwv li, thaum khiav "clang-cl / diagnostic : caret / c test.cc");
  • Ib feem loj ntawm cov tshev tshiab tau ntxiv rau linter clang-tidy, suav nrog ntxiv cov tshev tshwj xeeb rau OpenMP API;
  • Nthuav server peev xwm clangd (Clang Server), nyob rau hauv uas lub keeb kwm yav dhau index tsev hom yog enabled los ntawm lub neej ntawd, kev them nyiaj yug rau contextual kev ua nrog code tau ntxiv (variable retrieval, expansion ntawm nws pib thiab macro txhais, hloov dua siab tshiab ntawm txoj hlua khiav mus rau unscaped sawv daws yuav), muaj peev xwm mus tso saib ceeb toom los ntawm Clang-tidy, nthuav kev kuaj mob ntawm qhov tsis raug hauv cov ntaub ntawv header thiab ntxiv lub peev xwm los tso saib cov ntaub ntawv hais txog hom hierarchy;

ntsiab kev tsim kho tshiab LWM 9.0:

  • Ib qho kev sim muab faib ua haujlwm tau ntxiv rau LLD linker, uas tso cai rau koj faib ib qho kev pab cuam rau ntau qhov chaw, txhua qhov nyob rau hauv ib daim ntawv ELF cais. Cov yam ntxwv no tso cai rau koj los tso tawm qhov tseem ceeb ntawm qhov kev zov me nyuam, uas yuav thauj lwm yam khoom raws li xav tau thaum lub sijhawm ua haujlwm (piv txwv li, koj tuaj yeem cais cov ntawv PDF built-in rau hauv cov ntawv cais, uas yuav thauj khoom tsuas yog thaum tus neeg siv qhib PDF. ntaub ntawv).

    LLD Linker coj mus rau pem hauv ntej rau lub xeev tsim nyog rau kev txuas Linux ntsiav rau arm32_7, arm64, ppc64le thiab x86_64 architectures.
    Cov kev xaiv tshiab "-" (tso tawm rau stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" thiab "-z common-page-size". Rau AArch64 architecture, kev txhawb nqa rau BTI (Branch Target Indicator) thiab PAC (Pointer Authentication Code) cov lus qhia tau ntxiv. Kev them nyiaj yug rau MIPS, RISC-V thiab PowerPC platforms tau txhim kho tau zoo. Ntxiv kev txhawb nqa thawj zaug rau kev sib txuas dynamic rau WebAssembly;

  • Hauv libc++ ua raws functions ssize, std::is_constant_evaluated, std::midpoint thiab std::lerp, txoj kev "pem hauv ntej" thiab "rov qab" tau ntxiv rau std::span, yam ntxwv ntawm hom std::is_unbounded_array thiab std::is_bounded_array tau ntxiv , std peev xwm tau nthuav dav: : atomic. Kev them nyiaj yug rau GCC 4.9 tau raug txiav tawm (tuaj yeem siv nrog GCC 5.1 thiab tshaj tawm tshiab). Ntxiv kev txhawb nqa WASI (WebAssembly System Interface, ib qho interface siv WebAssembly sab nraum browser);
  • Tshiab optimizations tau ntxiv. Pab kom hloov dua siab tshiab ntawm memcmp hu rau bcmp hauv qee lub sijhawm. Kev ua haujlwm hla kev kuaj xyuas cov rooj dhia hauv qhov qis dua qhov thaiv tsis tuaj yeem ncav cuag lossis thaum cov lus qhia tsis siv, piv txwv li, thaum hu ua haujlwm nrog hom void;
  • Lub backend rau RISC-V architecture tau ruaj khov, uas tsis yog nyob rau hauv kev sim thiab yog tsim los ntawm lub neej ntawd. Muab tag nrho cov cai tsim kev txhawb nqa rau RV32I thiab RV64I cov lus qhia sib txawv nrog MAFDC txuas ntxiv;
  • Ntau qhov kev txhim kho tau ua rau backends rau X86, AArch64, ARM, SystemZ, MIPS, AMDGPU thiab PowerPC architectures. Piv txwv li, rau architecture
    AArch64 ntxiv kev txhawb nqa rau SVE2 (Scalable Vector Extension 2) thiab MTE (Memory Tagging Extensions) cov lus qhia; hauv ARM backend, kev txhawb nqa rau Armv8.1-M architecture thiab MVE (M-Profile Vector Extension) txuas ntxiv tau ntxiv. Kev them nyiaj yug rau GFX10 (Navi) architecture tau ntxiv rau AMDGPU backend, muaj peev xwm hu tau los ntawm lub neej ntawd, thiab kev sib koom ua ke tau qhib. DPP (Cov ntaub ntawv-Parallel Primitives).

  • Lub LLDB debugger tam sim no muaj cov xim tseem ceeb rau backtraces thiab ntxiv kev txhawb nqa rau DWARF4 debug_types thiab DWARF5 debug_info blocks;
  • Kev them nyiaj yug rau cov khoom thiab cov ntaub ntawv executable hauv COFF hom tau muab ntxiv rau llvm-objcopy thiab llvm-strip utilities.

Tau qhov twg los: opennet.ru

Ntxiv ib saib