Famoahana ny suite compiler LLVM 9.0

Taorian'ny enim-bolana ny fampandrosoana aseho famoahana tetikasa LLVM 9.0 - Fitaovana mifanentana amin'ny GCC (mpamorona, optimizer ary mpamorona kaody), manangona programa ho amin'ny kaody mpanelanelana amin'ny toromarika virtoaly sahala amin'ny RISC (milina virtoaly ambany miaraka amin'ny rafitra fanamafisam-peo marobe). Ny pseudocode vokarina dia azo ovaina amin'ny alalan'ny compiler JIT ho toromarika milina mivantana amin'ny fotoana famonoana ny programa.

Ny endri-javatra vaovao an'ny LLVM 9.0 dia ahitana ny fanesorana ny marika famolavolana andrana amin'ny sehatra RISC-V kendrena, fanohanan'ny C++ ho an'ny OpenCL, ny fahafahana manasaraka programa iray ho ampahany feno dynamic ao amin'ny LLD, ary ny fampiharana ny "asm goto", ampiasaina amin'ny kaody kernel Linux. Ny libc++ dia nanampy ny WASI (WebAssembly System Interface), ary ny LLD dia nanampy ny fanohanana voalohany ho an'ny rohy mavitrika WebAssembly.

fanatsarana ao amin'ny Clang 9.0:

  • nanampy fampiharana ny fitenenana manokana GCC "asm goto", izay mamela anao hifindra avy amin'ny sakana inline assembler mankany amin'ny marika amin'ny kaody C. Ity endri-javatra ity dia takiana hananganana kernel Linux amin'ny fomba "CONFIG_JUMP_LABEL=y" amin'ny fampiasana Clang amin'ny rafitra misy rafitra x86_64. Raha jerena ny fanovana nampidirina tamin'ny famoahana teo aloha, dia azo amboarina ao amin'ny Clang izao ny kernel Linux ho an'ny maritrano x86_64 (fanamboarana ho an'ny sandry, aarch64, ppc32, ppc64le ary mips architectures ihany teo aloha). Ankoatr'izay, ny tetikasa Android sy ChromeOS dia efa niova fo hampiasa Clang ho an'ny fananganana kernel, ary Google dia manandrana an'i Clang ho sehatra lehibe amin'ny fananganana kernel ho an'ny rafitra Linux famokarana azy. Amin'ny ho avy, ny singa LLVM hafa dia azo ampiasaina amin'ny fizotran'ny fananganana kernel, anisan'izany ny LLD, llvm-objcopy, llvm-ar, llvm-nm, ary llvm-objdump;
  • Nampiana fanohanana andrana amin'ny fampiasana C++ 17 ao amin'ny OpenCL. Ny endri-javatra manokana dia misy ny fanohanana ireo toetran'ny habaka adiresy, ny fanakanana ny fiovan'ny habaka adiresy amin'ny alΓ lan'ny mpandraharaha fanariana karazana, ny fanomezana karazana vector toy ny OpenCL ho an'ny C, ny fisian'ny karazana OpenCL manokana ho an'ny sary, hetsika, fantsona, sns.
  • Nampiana saina mpanangona vaovao "-ftime-trace" sy "-ftime-trace-granularity=N" mba hamoronana tatitra momba ny fotoana famonoana ny dingana isan-karazany amin'ny frontend (parsing, initialization) ary backend (dingana fanatsarana). Ny tatitra dia voatahiry amin'ny endrika json, mifanaraka amin'ny chrome://tracing sy speedscope.app;
  • Manampy ny fanodinana ny "__declspec(allocator)" specifier sy ny famokarana vaovao momba ny debugging izay ahafahanao manara-maso ny fanjifana fahatsiarovana ao amin'ny tontolo Visual Studio;
  • Ho an'ny fiteny C dia nampiana fanohanana ny macro "__FILE_NAME__", izay mitovy amin'ny macro "__FILE__", fa ny anaran'ny rakitra ihany no tsy misy ny lalana feno;
  • Ny C ++ dia nanitatra ny fanohanana ireo toetran'ny habaka adiresy mba handrakotra ireo endri-javatra C ++ isan-karazany, ao anatin'izany ny mari-pamantarana sy ny tohan-kevitra, ny karazana fanondroana, ny karazana famerenana, ny zavatra, ny asa vita ho azy, ny mpandraharaha naorina, ary ny maro hafa.
  • Ny fahaiza-manao mifandraika amin'ny fanohanana ny OpenCL, OpenMP ary CUDA dia nitarina. Tafiditra ao anatin'izany ny fanohanana voalohany amin'ny fampidirana an-kolaka ireo fiasa OpenCL naorina (nampiana ny saina "-fdeclare-opencl-builtins"), nampiharina ny fanitarana ny cl_arm_integer_dot_product, ary nitarina ny fitaovana fitiliana;
  • Nohatsaraina ny asan'ny mpandinika static ary nampiana antontan-taratasy momba ny fanaovana fanadihadiana static. Nampiana saina mba hampisehoana ny maody checker misy sy ny safidy tohanana (β€œ-analyzer-checker[-option]-help”, β€œ-analyzer-checker[-option]-help-alpha” ary β€œ-analyzer-checker[-option]-help "-developer"). Nampiana saina "-analyzer-werror" mba hitondra ny fampitandremana ho fahadisoana.
    Nampiana fomba fanamarinana vaovao:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling hamantarana fomba tsy azo antoka amin'ny fiasana amin'ny buffer;
    • osx.MIGCecker hikaroka ny fanitsakitsahana ny fitsipika antso MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast hahitana ny fiovan'ny zavatra XNU libkern diso;
    • apiModeling.llvm miaraka amin'ny andiana asa fanaraha-maso modely hamantarana lesoka ao amin'ny codebase LLVM;
    • Kaody miorina amin'ny fanamarinana ireo zavatra C ++ tsy voatanisa (UninitializedObject ao amin'ny fonosana optin.cplusplus);
  • Ny fitaovana clang-format dia nanampy fanohanana ny fandrafetana kaody amin'ny fiteny C# ary manome fanohanana ny fomba fandrafetana kaody ampiasain'ny Microsoft;
  • clang-cl, interface tsara andalana hafa izay manome fifanandrifian'ny safidy amin'ny compiler cl.exe tafiditra ao amin'ny Visual Studio, dia nanampy heuristics hitsaboana ny rakitra tsy misy ho toy ny safidy andalana baiko ary mampiseho fampitandremana mifanaraka amin'izany (ohatra, rehefa mihazakazaka "clang-cl /diagnostic:caret /c test.cc");
  • Ny ampahany betsaka amin'ny fisavana vaovao dia nampiana ho an'ny linter clang-tidy, ao anatin'izany ny fanamarinana fanampiny manokana amin'ny OpenMP API;
  • nitarina fahaizan'ny mpizara clangd (Clang Server), izay ahafahan'ny maodely fananganana tondro afara amin'ny alΓ lan'ny default, ny fanohanana ny hetsika mifandraika amin'ny kaody dia nampiana (famerenana miovaova, fanitarana ny famaritana auto sy macro, fiovam-po ireo tady nandositra ho an'ny tsy afa-nandositra), ny fahafahana mampiseho fampitandremana avy amin'ny Clang-tidy, nanitatra ny diagnostika ny lesoka ao amin'ny rakitra lohapejy ary nanampy ny fahafahana mampiseho fampahalalana momba ny ambaratonga karazana;

tena fanavaozana LLVM 9.0:

  • Nisy endri-javatra fanazarana andrana nampiana tao amin'ny rohy LLD, izay ahafahanao mizara programa iray ho faritra maromaro, izay samy hita ao anaty rakitra ELF mitokana. Ity endri-javatra ity dia ahafahanao manomboka ny ampahany lehibe amin'ny programa, izay hampiditra singa hafa araka izay ilaina mandritra ny fandidiana (ohatra, azonao atao ny manasaraka ny mpijery PDF naorina ho rakitra misaraka, izay tsy hampiditra afa-tsy rehefa manokatra ny PDF ny mpampiasa. rakitra).

    LLD Linker nentina tany aloha mankany amin'ny fanjakana mety hampifandraisana ny kernel Linux ho an'ny maritrano arm32_7, arm64, ppc64le ary x86_64.
    Safidy vaovao "-" (famoahana amin'ny stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" sy "-z mahazatra-pejy-habe". Ho an'ny maritrano AArch64 dia nampiana toromarika BTI (Branch Target Indicator) sy PAC (Pointer Authentication Code). Ny fanohanana ny sehatra MIPS, RISC-V ary PowerPC dia nohatsaraina be. Nanampy fanohanana voalohany ho an'ny rohy mavitrika ho an'ny WebAssembly;

  • Ao amin'ny libc++ ampiharina functions ssize, std :: is_constant_evaluated, std :: midpoint sy std :: lerp, fomba "front" sy "back" dia nampiana std :: span, toetran'ny karazana std:: is_unbounded_array ary std:: is_bounded_array dia nampiana , nitarina ny fahaiza-manao std: :atomic. Ny fanohanana ny GCC 4.9 dia natsahatra (azo ampiasaina amin'ny GCC 5.1 sy ny famoahana vaovao). Fanampiana fanampiny WASI (WebAssembly System Interface, interface tsara amin'ny fampiasana WebAssembly ivelan'ny navigateur);
  • Nampiana optimizations vaovao. Nalefa ny fiovam-po ny memcmp antso ho bcmp amin'ny toe-javatra sasany. Fanesorana ny fanaraha-maso ny tabilao mitsambikina izay tsy azo tratrarina ny bloc switch ambany na rehefa tsy ampiasaina ny toromarika, ohatra, rehefa miantso ny asa misy karazana void;
  • Ny backend ho an'ny maritrano RISC-V dia niorina, izay tsy napetraka ho fanandramana intsony ary natsangana tamin'ny alΓ lan'ny default. Manome fanohanana feno amin'ny famokarana kaody ho an'ny RV32I sy RV64I torolalana napetraka variana miaraka amin'ny fanitarana MAFDC;
  • Betsaka ny fanatsarana natao ho an'ny backends ho an'ny X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ary PowerPC. Ohatra, ho an'ny architecture
    Ny AArch64 dia nanampy ny fanohanan'ny SVE2 (Scalable Vector Extension 2) sy ny MTE (Memory Tagging Extensions); ao amin'ny ARM backend dia nampiana ny fanohanana ny maritrano Armv8.1-M ary ny fanitarana MVE (M-Profile Vector Extension). Ny fanohanana ny maritrano GFX10 (Navi) dia nampiana tao amin'ny AMDGPU backend, ny fahafaha-miantso asa dia alefa amin'ny alΓ lan'ny default, ary ny passe mitambatra dia alefa. DPP (Data-Parallel Primitives).

  • Ny debugger LLDB izao dia manana fanasongadinana loko ho an'ny backtraces ary nanampy fanohanana ny DWARF4 debug_types sy DWARF5 debug_info sakana;
  • Ny fanohanana ny rakitra zavatra sy azo tanterahana amin'ny endrika COFF dia nampiana tao amin'ny llvm-objcopy sy llvm-strip utility.

Source: opennet.ru

Add a comment