Rakirina berhevoka berhevkarê LLVM 9.0

Piştî şeş mehan ji pêşveçûnê pêşkêş kirin serbestberdana projeyê LLVM 9.0 - Amûrên lihevhatî yên GCC (berhevkar, optimîzator û hilberînerên kodê), berhevkirina bernameyan di bitkoda navîn a rêwerzên virtual yên mîna RISC (makîna virtual ya nizm bi pergalek xweşbînkirina pir-astî). Pseudokoda hatî çêkirin dikare bi karanîna berhevkarek JIT-ê rasterast di dema pêkanîna bernameyê de li rêwerzên makîneyê were veguheztin.

Taybetmendiyên nû yên LLVM 9.0 di nav de rakirina etîketa sêwirana ceribandinê ji platforma hedef RISC-V, piştgiriya C++ ji bo OpenCL, şiyana dabeşkirina bernameyek li beşên dînamîkî yên barkirî yên li LLD, û pêkanîna "asm goto", di koda kernel Linux de tê bikaranîn. libc++ ji bo WASI (Interface Pergala WebAssembly) piştgirî zêde kir, û LLD ji bo girêdana dînamîkî ya WebAssembly piştgirîya destpêkê zêde kir.

Pêşkeftinên di Clang 9.0 de:

  • Zêde kirin pêkanîna îfadeya taybetî ya GCC"asm goto", ku destûrê dide te ku hûn ji bloka hundurîn a asambleyê berbi etîketek di koda C-yê de bigerin. Ev taybetmendî ji bo avakirina kernel Linux di moda "CONFIG_JUMP_LABEL=y" de bi karanîna Clang li ser pergalên bi mîmariya x86_64 hewce ye. Li gorî guheztinên ku di weşanên berê de hatine zêdekirin, kernel Linux naha dikare di Clang de ji bo mîmariya x86_64 were çêkirin (berê tenê avahî ji bo mîmariya arm, aarch64, ppc32, ppc64le û mips piştgirî bû). Wekî din, projeyên Android û ChromeOS berê hatine veguheztin da ku Clang ji bo avakirina kernelê bikar bînin, û Google Clang wekî platforma sereke ya avakirina kernelên ji bo hilberîna pergalên Linux-ê diceribîne. Di pêşerojê de, hêmanên din ên LLVM dikarin di pêvajoya avakirina kernel de werin bikar anîn, di nav de LLD, llvm-objcopy, llvm-ar, llvm-nm, û llvm-objdump;
  • Ji bo karanîna C++17 di OpenCL de piştgirîya ceribandinê zêde kir. Taybetmendiyên taybetî piştgirî ji bo taybetmendiyên cîhê navnîşan, astengkirina veguheztina cîhê navnîşan ji hêla operatorên avêtinê ve, peydakirina celebên vektorî yên wekî OpenCL ji bo C, hebûna celebên OpenCL yên taybetî ji bo wêne, bûyer, kanal, hwd.
  • Alên berhevkerê nû "-ftime-trace" û "-ftime-trace-granularity=N" lê zêde kirin da ku raporek li ser dema darvekirinê ya qonaxên cihêreng ên pêşiyê (parsing, destpêkkirin) û paşverû (qonaxên optimîzasyonê) çêbikin. Rapor di formata json de, bi chrome://tracing û speedscope.app re hevaheng e;
  • Pêvajoya diyarkera "__declspec(vekarker)" zêde kir û hilberîna agahdariya xeletkirinê ya pêvek ku dihêle hûn li hawîrdora Visual Studio çavdêriya karanîna bîranînê bikin;
  • Ji bo zimanê C, piştgirî ji bo makroya "__FILE_NAME__" hatiye zêdekirin, ku dişibe makroya "__FILE__", lê tenê navê pelê bêyî riya tevahî tê de heye;
  • C++ ji bo taybetmendiyên cîhê navnîşanê piştgirî berfireh kiriye da ku taybetmendiyên C++-ê yên cihêreng bigire, di nav de nimûneyên parameter û arguman, celebên referans, vegerandina celebê vegerê, tişt, fonksiyonên ku bixweber têne hilberandin, operatorên çêkirî, û hêj bêtir.
  • Kapasîteyên ku bi piştgiriya OpenCL, OpenMP û CUDA ve girêdayî ne hatine berfireh kirin. Ev piştgirîya destpêkê ji bo tevlêbûna nepenî ya fonksiyonên OpenCL-ya çêkirî digire (ala "-fdeclare-opencl-builtins" hate zêdekirin), dirêjkirina cl_arm_integer_dot_product hate bicîh kirin, û amûrên tespîtkirinê hatine berfireh kirin;
  • Karê analîzkerê statîk çêtir bûye û belgeyên li ser pêkanîna analîzên statîk hatine zêdekirin. Ji bo nîşandana modulên kontrolê yên berdest û vebijarkên piştgirî ("-analyzer-checker[-option]-help", "-analyzer-checker[-option]-help-alpha" û "-analyzer-checker[-option]-help alên zêde kirin. ”-pêşdebir”). Alaya "-analyzer-werror" lê zêde kir ku hişyariyan wekî xeletî binirxîne.
    Modên verastkirinê yên nû zêde kirin:

    • security.insecureAPI.DeprecatedOrUnsafeBufferHandling ji bo naskirina pêkanînên neewle yên ji bo xebata bi tamponan;
    • osx.MIGChecker ji bo lêgerîna binpêkirinên qaîdeyên banga MIG (Mach Interface Generator);
    • optin.osx.OSObjectCStyleCast ji bo dîtina veguhertinên nerast ên libkern XNU;
    • apiModeling.llvm bi komek fonksiyonên kontrolkirina modelkirinê re ji bo tespîtkirina xeletiyên di bingeha koda LLVM de;
    • Koda stabilîzekirî ji bo kontrolkirina tiştên C++ yên nedestpêkkirî (Di pakêta optin.cplusplus de UninitializedObject);
  • Alîkariya clang-format piştgirî ji bo formatkirina kodê bi zimanê C# zêde kiriye û piştgirî dide şêwaza formatkirina kodê ya ku ji hêla Microsoft ve hatî bikar anîn;
  • clang-cl, navgînek xeta fermanê ya alternatîf ku lihevhatina asta vebijarkê bi berhevkera cl.exe ya ku di Visual Studio de tête peyda kirin peyda dike, heuristics zêde kiriye da ku pelên neheyî wekî vebijarkên rêza fermanê derman bike û hişyariyek têkildar nîşan bide (mînak, dema ku "clang-cl /diagnostic :caret /c test.cc" dimeşîne);
  • Beşek mezin ji kontrolên nû hatine zêdekirin li linter clang-tidy, tevî kontrolên zêdekirî yên taybetî yên OpenMP API;
  • Berfireh kirin şiyanên server cangd (Pêşkêşkara Clang), ku tê de moda avakirina navnîşa paşerojê ji hêla xwerû ve hatî çalak kirin, piştgirî ji bo kiryarên kontekstî yên bi kodê hatî zêdekirin (vegerîna guhêrbar, berfirehkirina pênaseyên otomatîk û makro, veguheztina rêzikên reviyan bo yên nerevayî), şiyana nîşandanê hişyariyên ji Clang-tidy, danasîna xeletiyên di pelên sernavê de berfireh kirin û şiyana nîşandana agahdariya li ser hîyerarşiya celebê zêde kirin;

sereke nûbûnên LLVM 9.0:

  • Taybetmendiyek dabeşkirina ceribandinê li girêdana LLD hate zêdekirin, ku destûrê dide te ku hûn bernameyekê li çend beşan dabeş bikin, ku her yek ji wan di pelek ELF ya cihêreng de cih digire. Ev taybetmendî dihêle hûn beşa sereke ya bernameyê dest pê bikin, ku dê di dema xebatê de li gorî hewcedariyên pêkhateyên din bar bike (mînakî, hûn dikarin dîmendera PDF-ya çêkirî di pelek veqetandî de veqetînin, ku tenê gava ku bikarhêner PDF-ê veke dê bar bike. dosî).

    LLD Linker anîne pêş ji bo dewletek minasib ji bo girêdana kernel Linux ji bo mîmarên arm32_7, arm64, ppc64le û x86_64.
    Vebijarkên nû "-" (ji bo stdout derketin), "-[no-]destûr-shlib-nedefined", "-undefined-glob", "-nmagic", "-omagic", "-girêdayî-pirtûkxane", " - z ifunc-noplt" û "-z hevpar-rûpel-size". Ji bo mîmariya AArch64, piştgirî ji bo rêwerzên BTI (Branch Target Indicator) û PAC (Kodê Nasnameya Pointer) hatî zêdekirin. Piştgiriya ji bo platformên MIPS, RISC-V û PowerPC bi girîngî çêtir bûye. Piştgiriya destpêkê ya ji bo girêdana dînamîkî ya WebAssembly zêde kir;

  • Di libc++ de pêkanîn fonksiyonên ssize, std::is_constant_evaluated, std:: midpoint û std:: lerp, rêbazên "pêş" û "paş" li std::span hatine zêdekirin, taybetmendiyên cureyên std::is_unbounded_array û std::is_bounded_array hatine zêdekirin. , kapasîteyên std hatine berfireh kirin: :atomî. Piştgiriya ji bo GCC 4.9 hate rawestandin (dikare bi GCC 5.1 û weşanên nûtir re were bikar anîn). Piştgiriya zêde kir WASI (Interface Pergala WebAssembly, navgînek ji bo karanîna WebAssembly li derveyî gerokê);
  • Optimîzasyonên nû hatine zêdekirin. Di hin rewşan de veguhertina bangên memcmp bo bcmp çalak kir. Ji bo tabloyên hilkişînê yên ku tê de blokên guhastinê yên jêrîn nayên gihîştin an jî dema ku rêwerz nayên bikar anîn, ji bo nimûne, dema gazîkirina fonksiyonên bi tîpa valahiyê tê girtin, nehiştina kontrolkirina rêjeyê hate pêkanîn;
  • Piştgiriya ji bo mîmariya RISC-V hatiye stabîlkirin, ku êdî wekî ceribandinê nayê danîn û ji hêla xwerû ve hatî çêkirin. Piştgiriya hilberîna kodê ya bêkêmasî ji bo guhertoyên koma rêwerzên RV32I û RV64I bi dirêjkirina MAFDC peyda dike;
  • Ji bo mîmarên X86, AArch64, ARM, SystemZ, MIPS, AMDGPU û PowerPC gelek çêtirkirin li piştgiran hatine çêkirin. Ji bo nimûne, ji bo mîmarî
    AArch64 ji bo talîmatên SVE2 (Pêvekkirina Vektora Scalable 2) û MTE (Pêveçûnên Nîşankirina Bîrê) piştgirî lê zêde kir, piştgirî ji bo mîmariya Armv8.1-M û dirêjkirina MVE (M-Profile Vector Extension) hate zêdekirin. Piştgiriya mîmariya GFX10 (Navi) li pişta AMDGPU hate zêdekirin, kapasîteyên bangkirina fonksiyonê ji hêla xwerû ve têne çalak kirin, û derbasbûnek hevbeş tê çalak kirin. Dîmokrat (Daneyên-Parallel Primitives).

  • Debugera LLDB naha ji bo paşkêşan ronîkirina rengîn heye û ji bo blokên debug_info DWARF4 û DWARF5 debug_info piştgirî lê zêde kiriye;
  • Piştgiriya obje û pelên îcrakar ên di formata COFF de li karûbarên llvm-objcopy û llvm-strip hatiye zêdekirin.

Source: opennet.ru

Add a comment