Kuburitswa kweLLVM 10.0 compiler suite

Mushure memwedzi mitanhatu yebudiriro yakaunzwa kuburitswa kweprojekiti LLVM 10.0 -GCC-inoenderana maturusi (macompilers, optimizers uye macode jenareta), achigadzira zvirongwa kuva yepakati bitcode yeRISC-senge mirairo chaiyo (yakaderera-level virtual muchina ine akawanda-level optimization system). Iyo pseudocode inogadzirwa inogona kushandurwa uchishandisa JIT compiler kuita mirairo yemuchina zvakananga panguva yekuitwa kwechirongwa.

Zvinyowani muLLVM 10.0 zvinosanganisira tsigiro yeC ++ Concepts, haichamhanyisa Clang seyakasiyana maitiro, tsigiro yeCFG (control flow guard) inoongorora Windows, uye tsigiro yehunyanzvi hutsva hweCPU.

Kuvandudza muClang 10.0:

  • Yakawedzerwa rutsigiro rwe "pfungwa", C++ template yekuwedzera iyo ichaverengerwa mune inotevera chiyero, codenamed C++2a (yakabatidzwa ne -std=c++2a mureza).
    Pfungwa dzinokutendera kuti utsanangure seti ye template paramende inodikanwa iyo, panguva yekubatanidza, inodzikamisa seti yenharo dzinogona kugamuchirwa se template paramita. Mafungiro anogona kushandiswa kudzivirira kusawirirana kunonzwisisika pakati pezvinhu zvemhando dze data dzinoshandiswa mukati me template uye dhata yemhando yezvinhu zveiyo yekuisa paramita.

    template
    pfungwa KuenzanaComparable = inoda(T a, T b) {
    {a == b } -> std::boolean;
    {a != b } -> std::boolean;
    };

  • Nekutadza, kutangwa kweimwe nzira ("clang -cc1") umo kuunganidzwa kunoitwa kunomiswa. Kuunganidza ikozvino kwaitwa mukuita kukuru, uye iyo "-fno-yakabatanidzwa-cc1" sarudzo inogona kushandiswa kudzoreredza maitiro ekare.
  • Maitiro matsva ekuongorora:
    • "-Wc99-designator" uye "-Wreorder-init-list" yambiro pamusoro pekushandisa C99 yekutanga muC++ modhi mumamiriro ezvinhu apo iwo echokwadi muC99 asi kwete muC++20.
    • "-Wsizeof-array-div" - inobata mamiriro akadai se "int arr[10]; …sizeof(arr) / sizeof(pfupi)…” (inofanira kunge iri β€œsizeof(arr) / sizeof(int)”).
    • "-Wxor-used-as-po" - inonyevera pamusoro pekushandiswa kwezvivakwa zvakadai sekushandiswa kwe "^" (xor) mushandisi mukushanda kunogona kuvhiringidzwa neexponentiation (2 ^ 16).
    • "-Wfinal-dtor-non-final-class" - inoyambira pamusoro pemakirasi asina kunyorwa ne "yekupedzisira" chirevo, asi ane muparadzi ane "yekupedzisira" hunhu.
    • "-Wtautological-bitwise-compare" iboka reyambiro yekuongorora tautological kuenzanisa pakati pekuita zvishoma nezvishoma uye nguva dzose, uye yekuziva nguva dzose-yechokwadi kuenzanisa umo bitwise OR kushanda kunoshandiswa kune isiri-negative nhamba.
    • "-Wbitwise-conditional-parentheses" inoyambira nezvematambudziko kana uchisanganisa vanobatika zvine musoro AND (&) uye OR (|) neane conditional operator (?:).
    • "-Wmisleading-indentation" ianalogue yecheki yezita rimwe chete kubva kuGCC, iyo inoyambira nezve mataurirwo akaiswa mukati sekunge ari chikamu chechinhu kana / chimwe / che/nguva bhuroka, asi chokwadi haana kuisirwa mubhuroko rino. .
    • Kana uchitsanangura "-Wextra", cheki ye "-Wdeprecated-copy" inogoneswa, yambiro nezve kushandiswa kwevanovaka.
      "fambisa" uye "kopa" mumakirasi ane tsananguro yekuparadza.

    • Iyo "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" macheki akawedzerwa.
    • Iyo "-Wbitwise-op-parentheses" uye "-Wlogical-op-parentheses" cheki inodzimwa nekusarudzika.
  • MuC uye C++ kodhi, pointer arithmetic mashandiro anotenderwa chete mumitsetse. Iyo Undefined Behavior Sanitizer mu "-fsanitize=pointer-overflow" modhi ikozvino inobata nyaya dzakadai sekuwedzera isiri-zero offset kune null pointer kana kugadzira null pointer paunenge uchibvisa nhamba kubva kune isiri-null pointer.
  • Iyo "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) modhi inogadziriswa kuti ione matambudziko nekuwedzera uye kudzikisira mashandiro emhando dzine saizi diki pane iyo ye "int" mhando.
  • Paunenge uchisarudza x86 chinangwa chezvivakwa "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" uye "-march=cooperlake" nekusarudzika mune vectorized The kodhi yakamira kushandisa 512-bit zmm marejista, kunze kwechiratidzo chavo chakananga mune kodhi kodhi. Chikonzero ndechekuti iyo CPU frequency inodzikira kana ichiita 512-bit mashandiro, izvo zvinogona kukanganisa kuita kwese kuita. Kuti uchinje maitiro matsva, sarudzo "-mprefer-vector-width=512" inopihwa.
  • Maitiro e "-flax-vector-conversions" mureza wakafanana neGCC: inlicit vector bit conversions pakati pe integer ne floating-point vectors hazvibvumidzwe. Kubvisa muganhu uyu, zvinokurudzirwa kushandisa mureza
    "-flax-vector-conversions=zvose" inova ndiyo yakagara.

  • Yakavandudzwa rutsigiro rweMIPS CPUs yemhuri yeOcteon. Yakawedzera "octeon+" kune rondedzero yemhando dzeCPU dzinoshanda.
  • Kana uchiungana muWebAssembly yepakati kodhi, iyo wasm-opt optimizer inodaidzwa otomatiki, kana iripo muhurongwa.
  • Kune masisitimu akavakirwa paRISC-V dhizaini, kushandiswa kwemarejista kuchengetedza inoyangarara poindi mapoinzi inotenderwa mune zvimiro zvidhinha zveassembler inline inoisa.
  • Yakawedzera mireza mitsva yekubatanidza: "-fgnuc-version" kuseta kukosha kweshanduro ye "__GNUC__" uye akafanana macros; "-fmacro-prefix-map=OLD=NEW" kutsiva dhairekitori prefix OLD neITSVA mumakros akadai se"__FILE__"; "-fpatchable-function-entry=N[,M]" kugadzira imwe nhamba yemirairo yeNOP pamberi uye mushure mekupinda basa. Pamusoro peRISC-V
    yakawedzera rutsigiro rwe "-ffixed-xX", "-mcmodel=medany" uye "-mcmodel=medlow" mireza.

  • Yakawedzerwa rutsigiro rweiyo '__attribute__((chinangwa("bazi-protection=..."))) hunhu, mhedzisiro yacho yakafanana nesarudzo. -mubazi-kudzivirira.
  • PaWindows papuratifomu, kana uchitsanangura mureza we "-cfguard", kutsiva kwekuita kuyerera kwekuvimbika cheki (Kudzora Flow Guard) kune zvisina kunanga basa kufona kunoitwa. Kudzima cheki inotsiva, unogona kushandisa "-cfguard-nochecks" mureza kana "__declspec(guard(nocf))" modifier.
  • Maitiro eiyo gnu_inline hunhu akafanana neGCC mune zviitiko apo inoshandiswa pasina "extern" keyword.
  • Iwo masimba ane hukama neOpenCL uye CUDA rutsigiro akawedzerwa. Yakawedzera rutsigiro rweOpenMP 5.0 maficha matsva.
  • Sarudzo yakasarudzika yakawedzerwa kune clang-format utility, iyo inokutendera iwe kuti uone iyo vhezheni yeC ++ chiyero chinoshandiswa pakudhirowa uye fomati kodhi (Yazvino, Auto, c++03, c++11, c++14, c++17, c++20 ).
  • Macheki matsva akawedzerwa kune static analyzer: alpha.cplusplus.PlacementItsva kuti uone kana pane nzvimbo yekuchengetera yakakwana, fuchsia.HandleChecker kuti ione mavuza ane chekuita neFuchsia handlers, security.insecureAPI.decodeValueOfObjCType kuona zvingangoita buffer mafashama paunenge uchishandisa [NSCoderyOpejVa codeb. :pa:] .
  • Iyo Undefined Behavior Sanitizer (UBSan) yakawedzera macheki ayo anonongedza mafashama kuti abate mashandisirwo easiri-zero offsets kune NULL anonongedzera kana mhedzisiro yekuwedzera kweNULL pointer offset.
  • In linter clang-tidy akawedzera chikamu chikuru checheki itsva.

chikuru zvitsva LLVM 10.0:

  • Kugadziriro Attributor New interprocedural optimizations uye analyzers akawedzerwa. Mamiriro ezvinhu e19 akasiyana maitiro anofanotaurwa, kusanganisira gumi nemaviri hunhu 12 LLVM IR uye 12 abstract hunhu hwakadai sehupenyu.
  • Yakawedzera mitsva matrix mabasa esvomhu akavakirwa mumubatanidzwa (Intrinsics), iyo inotsiviwa nemirairo yevector inoshanda panguva yekuunganidza.
  • Kwakawanda kuvandudzwa kwakaitwa kubackends kweX86, AArch64, ARM, SystemZ, MIPS, AMDGPU uye PowerPC zvivakwa. Yakawedzera CPU rutsigiro
    Cortex-A65, Cortex-A65AE, Neoverse E1 uye Neoverse N1. Kune ARMv8.1-M, ​​iyo kodhi yekugadzira maitiro yakagadziridzwa (semuenzaniso, tsigiro yezvishwe zvine mushoma pamusoro yaonekwa) uye rutsigiro rwe autovectorization rwakawedzerwa uchishandisa MVE yekuwedzera. Yakavandudzwa CPU MIPS Octeon rutsigiro. YePowerPC, vectorization yemasvomhu subroutines uchishandisa iyo MASSV (Mathematical Acceleration SubSystem) raibhurari inogoneswa, kugadzirwa kwekodhi kunovandudzwa, uye ndangariro kuwana kubva muzvishwe kunogadziriswa. Kune x86, kubata kwevector mhando v2i32, v4i16, v2i16, v8i8, v4i8 uye v2i8 yakashandurwa.

  • Yakavandudzwa kodhi jenareta yeWebAssembly. Yakawedzera rutsigiro rweTLS (Thread-Local Storage) uye atomic.fence mirairo. Tsigiro yeSIMD yakawedzerwa zvakanyanya. WebAssembly chinhu mafaera zvino ane kugona kushandisa akawanda-akakosha masiginicha ebasa.
  • Iyo analyzer inoshandiswa pakugadzirisa zvishwe MemorySSA, iyo inokutendera kuti utsanangure zvinotsamira pakati peakasiyana ndangariro mashandiro. MemorySSA inogona kuderedza kuunganidza uye nguva yekuuraya kana inogona kushandiswa panzvimbo yeAliasSetTracker pasina kurasikirwa kwekuita.
  • Iyo LLDB debugger yakavandudza zvakanyanya rutsigiro rweiyo DWARF v5 fomati. Rutsigiro rwakavandudzwa rwekuvaka neMingGW
    uye yakawedzera kugona kwekutanga kugadzirisa maWindows executables eArM uye ARM64 architecture. Yakawedzerwa tsananguro dzesarudzo dzinopihwa kana autocomplete kuisa nekudzvanya tab.

  • Yakawedzerwa LLD linker kugona. Rutsigiro rwakavandudzwa rwefomati yeELF, kusanganisira kuona kuenderana kuzere kwematemplate eglob neGNU linker, tichiwedzera tsigiro yezvikamu zvekugadzirisa zvakadzvanywa ".zdebug", tichiwedzera PT_GNU_PROPERTY nzvimbo kutsanangura chikamu che .note.gnu.property (chinogona kushandiswa mune ramangwana Linux kernels),
    Iyo "-z noseparate-code", "-z kupatsanura-kodhi" uye "-z yakaparadzana-inotakurika-zvikamu" modhi dzaitwa. Yakavandudzwa rutsigiro rweMinGW uye WebAssembly.

Source: opennet.ru

Voeg