Lëshimi i paketës së kompilerëve LLVM 11.0

Pas pas gjashtĂ« muajsh zhvillimi Ă«shtĂ« paraqitur lĂ«shimi i projektit LLVM 11.0 — njĂ« mjet i pĂ«rshtatshĂ«m pĂ«r GCC (kompilatorĂ«, optimizues dhe gjenerues kodi), qĂ« kompilon programet nĂ« njĂ« bitkod ndĂ«rmjetĂ«s tĂ« instrukcioneve virtuale tĂ« ngjashme me RISC (njĂ« makinĂ« virtuale me shumĂ« nivele optimizimi). Pseudokodi i gjeneruar mund tĂ« transformohet me ndihmĂ«n e JIT-kompilatorit nĂ« instrukcione tĂ« makinerisĂ« menjĂ«herĂ« nĂ« momentin e ekzekutimit tĂ« programit.

Ndryshimi kryesor në këtë version është përfshirja e Flang, një front-end për gjuhën Fortran. Flang mbështet Fortran 2018, OpenMP 4.5 dhe OpenACC 3.0, por zhvillimi i projektit ende nuk është përfunduar dhe front-end-i kufizohet në analizën e kodit dhe verifikimin e saktësisë së tij. Generimi i kodit ndërmjetës LLVM ende nuk mbështetet dhe për krijimin e skedarëve ekzekutivë gjenerohet kodi kanonik, i cili dërgohet në një kompilator të jashtëm Fortran.

Përmirësimet në Clang 11.0:

  • Shtuar mundĂ«sia pĂ«r rikthimin e pemĂ«s abstrakte tĂ« sintaksĂ«s (AST) pĂ«r kodin e papĂ«rshtatshĂ«m nĂ« C++, i cili mund tĂ« pĂ«rdoret pĂ«r tĂ« thjeshtuar diagnostikimin e gabimeve dhe ofron informacion shtesĂ« pĂ«r mjete tĂ« jashtme, si clang-tidy dhe clangd. MundĂ«sia Ă«shtĂ« e aktivizuar si parazgjedhje pĂ«r kodin nĂ« C++ dhe menaxhohet pĂ«rmes opsioneve «-Xclang -f[no-]recovery-ast».
  • Modet e reja tĂ« diagnostikimit janĂ« shtuar:
    • «-Wpointer-to-int-cast» — grup paralajmĂ«imesh pĂ«r konvertimin e treguesve nĂ« tipin e plotĂ« int, i cili nuk mund tĂ« pĂ«rmbajĂ« tĂ« gjitha vlerat e mundshme.
    • «-Wuninitialized-const-reference» — paralajmĂ«rim pĂ«r kalimin e variableve tĂ« pa inicializuara nĂ« parametrat e funksioneve qĂ« pranojnĂ« argumente referencĂ« me atributin «const».
    • «-Wimplicit-const-int-float-conversion» — paralajmĂ«rim i aktivizuar si parazgjedhje pĂ«r konvertimin e paqĂ«llimshĂ«m tĂ« konstantĂ«s me presje nĂ« tipin e plotĂ«.
  • PĂ«r platformĂ«n ARM janĂ« ofruar funksione tĂ« integruara nĂ« kompilatorin C (Intrinsics), tĂ« cilat zĂ«vendĂ«sohen me instrukcione efektive vektoriale Arm v8.1-M MVE dhe CDE. Funksionet e disponueshme janĂ« tĂ« pĂ«rkufizuara nĂ« skedarĂ«t e titujve arm_mve.h dhe arm_cde.h.
  • Shtuar grup i tipeve tĂ« zgjeruara tĂ« plotĂ« _ExtInt(N), tĂ« cilat lejojnĂ« krijimin e tipeve qĂ« nuk janĂ« shumĂ«fish i fuqive dy, tĂ« cilat mund tĂ« pĂ«rpunohen nĂ« mĂ«nyrĂ« efikase nĂ« FPGA/HLS. PĂ«r shembull, _ExtInt(7) pĂ«rcakton njĂ« tip tĂ« plotĂ«, i pĂ«rbĂ«rĂ« nga 7 bit.
  • Shtuar makros tĂ« cilat pĂ«rcaktojnĂ« mbĂ«shtetje pĂ«r funksionet e integruara nĂ« C tĂ« bazuara nĂ« instrukcionet ARM SVE (Scalable Vector Extension):
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. P.sh., makroja __ARM_FEATURE_SVE përcaktohet kur gjenerohet kodi AArch64 me vendosjen e mundësisë në vijën e komandave «-march=armv8-a+sve».
  • Flamuri «-O» tani identifikohet me modin e optimizimit «-O1» nĂ« vend tĂ« «-O2».
  • Shtuar flamuj tĂ« rinj kompilatorĂ«sh:
    • «-fstack-clash-protection» — aktivizon mbrojtjen kundĂ«r pĂ«rplasjeve tĂ« stacks dhe heaps.
    • «-ffp-exception-behavior={ignore,maytrap,strict}» — lejon zgjedhjen e modit tĂ« trajtuesit tĂ« pĂ«rjashtimeve pĂ«r numrat me pikĂ« flottante.
    • «-ffp-model={precise,strict,fast}» — thjeshton qasjen nĂ« njĂ« seri opsionesh tĂ« specializuara pĂ«r numrat me pikĂ« flottante.
    • «-fpch-codegen» dhe «-fpch-debuginfo» pĂ«r gjenerimin e njĂ« titulli tĂ« pĂ«rkompiliuar (PCH) me skedarĂ« objektiv tĂ« veçantĂ« pĂ«r kodin dhe debuginfo.
    • «-fsanitize-coverage-allowlist» dhe «-fsanitize-coverage-blocklist» pĂ«r kontrollin e listave tĂ« lejuara dhe tĂ« ndaluara pĂ«r mbulimin e testeve.
    • «-mtls-size={12,24,32,48}» pĂ«r tĂ« zgjedhur madhĂ«sinĂ« e TLS (storage-i lokal tĂ« thread-eve).
    • «-menable-experimental-extension» pĂ«r aktivizimin e zgjerimeve eksperimentale RISC-V.
  • PĂ«r default pĂ«r C Ă«shtĂ« aplikuar mĂ«nyra «-fno-common», e cila lejon pĂ«rmirĂ«simin e efikasitetit tĂ« aksesit nĂ« variabla globalĂ« nĂ« disa platforma.
  • Cache e moduleve tani Ă«shtĂ« zhvendosur nga /tmp nĂ« direktorinĂ« ~/.cache. PĂ«rdorni flagun «-fmodules-cache-path=» pĂ«r tĂ« tejkaluar kĂ«tĂ«.
  • Standardi i pĂ«rdorur pĂ«r gjuhĂ«n C Ă«shtĂ« pĂ«rditĂ«suar nga gnu11 nĂ« gnu17.
  • Shtuar mbĂ«shtetje paraprake pĂ«r zgjerimin GNU C «asm inline» pĂ«r tĂ« shtuar mysql_insert_id. Zgjerimi aktualisht analizohen, por nuk pĂ«rpunohen.
  • Shtuar mundĂ«si tĂ« zgjeruara pĂ«r mbĂ«shtetje OpenCL dhe CUDA. Shtuar mbĂ«shtetje diagnostike pĂ«r blloqet OpenCL 2.0 dhe realizuar mundĂ«si tĂ« reja OpenMP 5.0.
  • NĂ« mjetin clang-format Ă«shtĂ« shtuar opsioni IndentExternBlock pĂ«r rregullimin brenda blloqeve extern «C» dhe extern «C++».
  • NĂ« analizuesin statik Ă«shtĂ« pĂ«rmirĂ«suar trajtimi i konstruktorĂ«ve tĂ« trashĂ«guar nĂ« C++. Shtuar kontrollime tĂ« reja alpha.core.C11Lock dhe alpha.fuchsia.Lock pĂ«r trajtimin e bllokimeve, alpha.security.cert.pos.34c pĂ«r identifikimin e pĂ«rdorimit tĂ« pasigurt tĂ« putenv, webkit.NoUncountedMemberChecker dhe webkit.RefCntblBaseVirtualDtor pĂ«r identifikimin e problemeve me tipet e paqĂ«ndrueshme, alpha.cplusplus.SmartPtr pĂ«r kontrollin e dereferencĂ«s sĂ« njĂ« treguesi tĂ« pamundur.
  • NĂ« linter clang-tidy shtuar ka njĂ« sasi tĂ« madhe kontrollesh tĂ« reja.
  • NĂ« serverin e keĆĄimit clangd (Clang Server) Ă«shtĂ« pĂ«rmirĂ«suar performanca dhe janĂ« shtuar mundĂ«si tĂ« reja diagnostikimi.

Ndryshimet kryesore risitë LLVM 11.0:

  • Sistemi i ndĂ«rtimit Ă«shtĂ« transferuar pĂ«r tĂ« pĂ«rdorur Python 3. NĂ«se Python 3 nuk Ă«shtĂ« i disponueshĂ«m, Ă«shtĂ« realizuar mundĂ«sia e rikthimit nĂ« pĂ«rdorimin e Python 2.
  • Frontend-i me kompilatorin pĂ«r gjuhĂ«n Go (llgo) Ă«shtĂ« pĂ«rjashtuar nga publikimi, i cili mund tĂ« ristrukturohet nĂ« tĂ« ardhmen.
  • NĂ« reprezentimin ndĂ«rmjetĂ«s (IR) Ă«shtĂ« shtuar atributi vector-function-abi-variant pĂ«r tĂ« pĂ«rshkruar mapimin midis funksioneve skalar dhe vektor pĂ«r vektorizimin e thirrjeve. Nga llvm::VectorType janĂ« identifikuar dy lloje vektorĂ«sh tĂ« veçantĂ« llvm::FixedVectorType dhe llvm::ScalableVectorType.
  • ËshtĂ« pranuar si sjellje e pacaktuar ndarja nĂ« bazĂ« tĂ« vlerave udef dhe kalimi i vlerave undef nĂ« funksionet e bibliotekĂ«s standarde. NĂ«
    memset/memcpy/memmove lejohet kalimi i treguesve undef, por nëse parametri me madhësi është zero.
  • NĂ« LLJIT Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r pĂ«rfundimin e inicializimeve statike pĂ«rmes metodave LLJIT::initialize dhe LLJIT::deinitialize. ËshtĂ« realizuar mundĂ«sia e shtimit tĂ« bibliotekave statike nĂ« JITDylib pĂ«rmes klasĂ«s StaticLibraryDefinitionGenerator. ËshtĂ« shtuar API C pĂ«r ORCv2 (API pĂ«r ndĂ«rtimin e JIT-kompilatorĂ«ve).
  • NĂ« backend-in pĂ«r arkitekturĂ«n AArch64 Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r procesorĂ«t Cortex-A34, Cortex-A77, Cortex-A78 dhe Cortex-X1. JanĂ« implementuar zgjerimet ARMv8.2-BF16 (BFloat16) dhe ARMv8.6-A, duke pĂ«rfshirĂ« RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Virtualizimi i MonitorĂ«ve tĂ« Aktivitetit) dhe ARMv8.0-DGH (Data gathering hint). ËshtĂ« siguruar mundĂ«sia e gjenerimit tĂ« kodit pĂ«r funksionet e integruara-ndihmĂ«se pĂ«r instrukcionet vektoriale SVE.
  • NĂ« backend-in pĂ«r arkitekturĂ«n ARM Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r procesorĂ«t Cortex-M55, Cortex-A77, Cortex-A78 dhe Cortex-X1. JanĂ« implementuar zgjerimet
    Armv8.6-A Matrix Multiply dhe RMv8.2-AA32BF16 BFloat16.
  • NĂ« backend-in pĂ«r arkitekturĂ«n PowerPC Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r gjenerimin e kodit pĂ«r procesorĂ«t POWER10. JanĂ« zgjeruar optimizimet e cikleve dhe Ă«shtĂ« pĂ«rmirĂ«suar mbĂ«shtetja pĂ«r operacionet me pikĂ« tĂ« lĂ«shuar.
  • NĂ« backend-in pĂ«r arkitekturĂ«n RISC-V Ă«shtĂ« lejuar pranimi i patch-Ă«ve me mbĂ«shtetje pĂ«r sete instrukcionesh eksperimentale tĂ« zgjeruara, tĂ« cilat nuk janĂ« miratuar akoma zyrtarisht.
  • Backend-i pĂ«r arkitekturĂ«n AVR Ă«shtĂ« transferuar nga kategoria eksperimentale nĂ« ato stabile, tĂ« pĂ«rfshira nĂ« paketĂ«n themelore.
  • NĂ« backend-in pĂ«r arkitekturĂ«n x86 Ă«shtĂ« realizuar mbĂ«shtetje pĂ«r instrukcionet Intel AMX dhe TSXLDTRK. ËshtĂ« shtuar mbrojtja nga sulmet. LVI (Load Value Injection), gjithashtu Ă«shtĂ« realizuar njĂ« mekanizĂ«m i pĂ«rbashkĂ«t pĂ«r Shtypjen e Efekteve anĂ«sore tĂ« Ekzekutimit Spekullues pĂ«r tĂ« bllokuar sulmet e shkaktuara nga ekzekutimi spekullues i operacioneve nĂ« CPU.
  • NĂ« backend pĂ«r arkitekturĂ«n SystemZ Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r MemorySanitizer dhe LeakSanitizer.
  • NĂ« Libc++ Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r skedarin e titujve me konstantet matematikore. <numbers>.
  • JanĂ« zgjeruar mundĂ«sitĂ« e lidhĂ«sit LLD. ËshtĂ« pĂ«rmirĂ«suar mbĂ«shtetje pĂ«r formatin ELF, pĂ«rfshirĂ« shtimin e opsioneve «—lto-emit-asm», «—lto-whole-program-visibility», «—print-archive-stats», «—shuffle-sections», «—thinlto-single-module», «—unique», «—rosegment», «—threads=N». ËshtĂ« shtuar opsioni «—time-trace» pĂ«r ruajtjen e gjurmĂ«s nĂ« njĂ« skedar, i cili pastaj mund tĂ« analizohet pĂ«rmes ndĂ«rfaqes chrome://tracing nĂ« Chrome.

Burimi: opennet.ru

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster