Rhyddhau'r gyfres casglu LLVM 9.0

Ar ôl chwe mis o ddatblygiad wedi'i gyflwyno rhyddhau prosiect LLVM 9.0 - Offer sy'n gydnaws â GCC (cyfunwyr, optimizers a generaduron cod), llunio rhaglenni i god did canolradd o gyfarwyddiadau rhithwir tebyg i RISC (peiriant rhithwir lefel isel gyda system optimeiddio aml-lefel). Gellir trosi'r ffuggod a gynhyrchir gan ddefnyddio casglwr JIT yn gyfarwyddiadau peiriant yn uniongyrchol ar adeg gweithredu'r rhaglen.

Mae nodweddion newydd LLVM 9.0 yn cynnwys tynnu'r tag dylunio arbrofol o'r platfform RISC-V targed, cefnogaeth C ++ i OpenCL, y gallu i rannu rhaglen yn rhannau wedi'u llwytho'n ddeinamig yn LLD, a gweithredu'r “asm goto", a ddefnyddir yn y cod cnewyllyn Linux. ychwanegodd libc++ gefnogaeth i WASI (Rhyngwyneb System WebAssembly), ac ychwanegodd LLD gefnogaeth gychwynnol ar gyfer cysylltu deinamig WebAssembly.

Gwelliannau yn Clang 9.0:

  • Wedi adio gweithredu'r ymadrodd GCC-benodol "asm goto“, sy'n eich galluogi i symud o floc mewnlin cydosodwr i label mewn cod C. Mae angen y nodwedd hon i adeiladu'r cnewyllyn Linux yn y modd “CONFIG_JUMP_LABEL=y” gan ddefnyddio systemau Clang ar bensaernïaeth x86_64. Gan ystyried y newidiadau a ychwanegwyd mewn datganiadau blaenorol, gellir bellach adeiladu'r cnewyllyn Linux yn Clang ar gyfer y bensaernïaeth x86_64 (yn flaenorol dim ond adeiladu ar gyfer pensaernïaeth y fraich, aarch64, ppc32, ppc64le a mips a gefnogwyd). Ar ben hynny, mae prosiectau Android a ChromeOS eisoes wedi'u trosi i ddefnyddio Clang ar gyfer adeiladu cnewyllyn, ac mae Google yn profi Clang fel y prif lwyfan ar gyfer adeiladu cnewyllyn ar gyfer ei systemau cynhyrchu Linux. Yn y dyfodol, gellir defnyddio cydrannau LLVM eraill yn y broses adeiladu cnewyllyn, gan gynnwys LLD, llvm-objcopy, llvm-ar, llvm-nm, a llvm-objdump;
  • Ychwanegwyd cefnogaeth arbrofol ar gyfer defnyddio C ++17 yn OpenCL. Mae nodweddion penodol yn cynnwys cefnogaeth ar gyfer priodoleddau gofod cyfeiriad, blocio trosi gofod cyfeiriad gan weithredwyr castio math, darparu mathau o fector fel yn OpenCL ar gyfer C, presenoldeb mathau penodol o OpenCL ar gyfer delweddau, digwyddiadau, sianeli, ac ati.
  • Ychwanegwyd baneri casglwr newydd “-ftime-trace” a “-ftime-trace-granularity=N” i gynhyrchu adroddiad ar amser gweithredu gwahanol gamau o'r blaen (dosrannu, cychwyn) a chefn (camau optimeiddio). Mae'r adroddiad yn cael ei gadw mewn fformat json, sy'n gydnaws â chrome://tracing a speedscope.app;
  • Ychwanegwyd prosesu'r manyleb “__declspec(dyrannu)” a chynhyrchu gwybodaeth dadfygio cysylltiedig sy'n eich galluogi i fonitro defnydd cof yn amgylchedd y Stiwdio Weledol;
  • Ar gyfer yr iaith C, mae cefnogaeth wedi'i hychwanegu ar gyfer y macro “__FILE_NAME__”, sy'n debyg i'r macro “__FILE__”, ond sy'n cynnwys enw'r ffeil yn unig heb y llwybr llawn;
  • Mae C ++ wedi ehangu cefnogaeth ar gyfer priodoleddau gofod cyfeiriad i gwmpasu amrywiol nodweddion C ++, gan gynnwys patrymau paramedr a dadl, mathau o gyfeiriadau, casgliad math dychwelyd, gwrthrychau, swyddogaethau a gynhyrchir yn awtomatig, gweithredwyr adeiledig, a mwy.
  • Mae'r galluoedd sy'n gysylltiedig â chymorth ar gyfer OpenCL, OpenMP a CUDA wedi'u hehangu. Mae hyn yn cynnwys cefnogaeth gychwynnol ar gyfer cynnwys swyddogaethau OpenCL yn ymhlyg (mae'r faner “-fdeclare-opencl-builtins” wedi'i hychwanegu), mae'r estyniad cl_arm_integer_dot_product wedi'i weithredu, ac mae offer diagnostig wedi'u hehangu;
  • Mae gwaith y dadansoddwr statig wedi'i wella ac ychwanegwyd dogfennaeth ar berfformio dadansoddiad statig. Ychwanegwyd baneri i ddangos y modiwlau gwiriwr sydd ar gael a'r opsiynau a gefnogir (“-analyzer-checker[-option]-help”, “-analyzer-checker[-option]-help-alpha” a “-analyzer-checker[-option]-help “-datblygwr”). Ychwanegwyd baner "-analyzer-werror" i drin rhybuddion fel gwallau.
    Ychwanegwyd dulliau dilysu newydd:

    • diogelwch.sicrhauAPI.AnghymeradwyOrDiogelByfferTrin i nodi arferion anniogel ar gyfer gweithio gyda byfferau;
    • osx.MIGCchecker i chwilio am dorri rheolau galwadau MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast i ddod o hyd i drawsnewidiadau gwrthrych libkern XNU anghywir;
    • apiModeling.llvm gyda set o swyddogaethau gwirio modelu i ganfod gwallau yn y sylfaen cod LLVM;
    • Cod sefydlog ar gyfer gwirio gwrthrychau C++ anghychwynnol (UninitializedObject yn y pecyn optin.cplusplus);
  • Mae'r cyfleustodau fformat clang wedi ychwanegu cefnogaeth ar gyfer fformatio cod yn yr iaith C# ac yn darparu cefnogaeth ar gyfer yr arddull fformatio cod a ddefnyddir gan Microsoft;
  • clang-cl, rhyngwyneb llinell orchymyn amgen sy'n darparu cydnawsedd lefel opsiwn â'r casglwr cl.exe sydd wedi'i gynnwys yn Visual Studio, wedi ychwanegu heuristics i drin ffeiliau nad ydynt yn bodoli fel opsiynau llinell orchymyn ac arddangos rhybudd cyfatebol (er enghraifft, wrth redeg "clang-cl /diagnostic :caret /c test.cc");
  • Mae cyfran fawr o wiriadau newydd wedi'u hychwanegu at linyn drwsgl, gan gynnwys sieciau ychwanegol sy'n benodol i'r API OpenMP;
  • Ehangwyd galluoedd gweinydd clangd (Clang Server), lle mae'r modd adeiladu mynegai cefndir wedi'i alluogi yn ddiofyn, mae cefnogaeth ar gyfer gweithredoedd cyd-destunol gyda chod wedi'i ychwanegu (adfer amrywiol, ehangu diffiniadau auto a macro, trosi llinynnau dianc i rai heb eu dianc), y gallu i arddangos rhybuddion gan Clang-tidy, diagnosteg estynedig o wallau mewn ffeiliau pennyn ac ychwanegu'r gallu i arddangos gwybodaeth am yr hierarchaeth fath;

Y prif arloesiadau LLVM 9.0:

  • Mae nodwedd rhaniad arbrofol wedi'i hychwanegu at y cysylltydd LLD, sy'n eich galluogi i rannu un rhaglen yn sawl rhan, pob un wedi'i lleoli mewn ffeil ELF ar wahân. Mae'r nodwedd hon yn caniatáu ichi lansio prif ran y rhaglen, a fydd yn llwytho cydrannau eraill yn ôl yr angen yn ystod y llawdriniaeth (er enghraifft, gallwch wahanu'r gwyliwr PDF adeiledig yn ffeil ar wahân, a fydd yn llwytho dim ond pan fydd y defnyddiwr yn agor y PDF ffeil).

    LLD Linker dwyn i'r amlwg i gyflwr sy'n addas ar gyfer cysylltu'r cnewyllyn Linux ar gyfer pensaernïaeth arm32_7, arm64, ppc64le a x86_64.
    Opsiynau newydd " -" (allbwn i stdout), "-[no-]caniatáu-shlib-anniffiniedig", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" a "-z common-page-size". Ar gyfer pensaernïaeth AArch64, mae cefnogaeth ar gyfer cyfarwyddiadau BTI (Dangosydd Targed y Gangen) a PAC (Cod Dilysu Pointer) wedi'u hychwanegu. Mae cefnogaeth ar gyfer llwyfannau MIPS, RISC-V a PowerPC wedi'i wella'n sylweddol. Ychwanegwyd cefnogaeth gychwynnol ar gyfer cysylltu deinamig ar gyfer WebAssembly;

  • Yn libc++ gweithredu swyddogaethau ssize, std::is_constant_evaluated, std:: midpoint a std::lerp, dulliau "blaen" a "cefn" wedi'u hychwanegu at std::span, priodoleddau mathau std::is_unbounded_array a std::is_bounded_array wedi'u hychwanegu , galluoedd std wedi'u hehangu: :atomic. Mae cefnogaeth i GCC 4.9 wedi dod i ben (gellir ei ddefnyddio gyda GCC 5.1 a datganiadau mwy newydd). Cefnogaeth ychwanegol Wasi (Rhyngwyneb System WebAssembly, rhyngwyneb ar gyfer defnyddio WebAssembly y tu allan i'r porwr);
  • Mae optimeiddiadau newydd wedi'u hychwanegu. Wedi galluogi trosi galwadau memcmp i bcmp mewn rhai sefyllfaoedd. Gwirio amrediad wedi'i hepgor ar gyfer tablau naid lle mae blociau switsh is yn anghyraeddadwy neu pan na ddefnyddir cyfarwyddiadau, er enghraifft, wrth alw swyddogaethau â gwagle math;
  • Mae'r backend ar gyfer pensaernïaeth RISC-V wedi'i sefydlogi, nad yw bellach wedi'i leoli fel arbrofol ac wedi'i adeiladu yn ddiofyn. Yn darparu cefnogaeth cynhyrchu cod llawn ar gyfer amrywiadau set gyfarwyddiadau RV32I a RV64I gydag estyniadau MAFDC;
  • Mae nifer o welliannau wedi'u gwneud i gefnlenni ar gyfer pensaernïaeth X86, AArch64, ARM, SystemZ, MIPS, AMDGPU a PowerPC. Er enghraifft, ar gyfer pensaernïaeth
    Ychwanegodd AArch64 gefnogaeth ar gyfer cyfarwyddiadau SVE2 (Estyniad Fector Scalable 2) ac MTE (Estyniadau Tagio Cof); yn y backend ARM, cefnogaeth i bensaernïaeth Armv8.1-M ac estyniad MVE (Estyniad Fector M-Profile). Mae cefnogaeth i bensaernïaeth GFX10 (Navi) wedi'i ychwanegu at gefn AMDGPU, mae galluoedd galw swyddogaeth yn cael eu galluogi yn ddiofyn, ac mae tocyn cyfun yn cael ei actifadu DPP (Primitives Data-Cyfochrog).

  • Mae dadfygiwr LLDB bellach wedi amlygu lliw ar gyfer ôl-olion a chefnogaeth ychwanegol ar gyfer y blociau debug_info DWARF4 a debug_info DWARF5;
  • Mae cefnogaeth ar gyfer gwrthrychau a ffeiliau gweithredadwy mewn fformat COFF wedi'i ychwanegu at y cyfleustodau llvm-objcopy a llvm-stribed.

Ffynhonnell: opennet.ru

Ychwanegu sylw