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

Pas gjashtĂ« muajsh zhvillimi, u prezantua lĂ«shimi i projektit LLVM 12.0 — njĂ« mjet i pĂ«rputhshĂ«m me GCC (kompilerĂ«, optimizues dhe gjeneratorĂ« kodi), qĂ« kompilon programet nĂ« kodin ndĂ«rmjetĂ«s tĂ« instruksioneve virtuale tĂ« ngjashme me RISC (njĂ« makinĂ« virtuale me nivel tĂ« ulĂ«t me njĂ« sistem optimizimi me shumĂ« nivele). Kodi i gjeneruar mund tĂ« konvertohet pĂ«rmes JIT-kompilatorit nĂ« instruksione makinerike nĂ« momentin e ekzekutimit tĂ« programit.

Përmirësimet në Clang 12.0:

  • ËshtĂ« realizuar dhe pĂ«rfshirĂ« si parazgjedhje mbĂ«shtetje pĂ«r atributet e propozuara nĂ« standardin C++20 «likely» dhe «unlikely», qĂ« lejojnĂ« informimin e optimizuesit pĂ«r probabilitetin e funksionimit tĂ« njĂ« ndĂ«rtese kushtore (p.sh., «[[likely]] if (random > 0) {»).
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r procesorĂ«t AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) dhe Intel Sapphire Rapids (-march=sapphirerapids).
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r flagjet «-march=x86-64-v[234]» pĂ«r tĂ« zgjedhur nivelet e arkitekturĂ«s x86-64 (v2 — pĂ«rfshin zgjerimet SSE4.2, SSSE3, POPCNT dhe CMPXCHG16B; v3 — AVX2 dhe MOVBE; v4 — AVX-512).
  • Shtuar mbĂ«shtetje pĂ«r procesorĂ«t Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) dhe Fujitsu A64FX (a64fx). PĂ«r shembull, pĂ«r tĂ« aktivizuar optimizimet pĂ«r CPU Neoverse-V1 mund tĂ« specifikoni "-mcpu=neoverse-v1".
  • PĂ«r arkitekturĂ«n AArch64 janĂ« shtuar flamuj tĂ« rinj kompilatori "-moutline-atomics" dhe "-mno-outline-atomics", tĂ« destinuar pĂ«r aktivizimin dhe çaktivizimin e funksioneve ndihmĂ«se me implementime tĂ« operacioneve atomike, si "__aarch64_cas8_relax". Funksionet e tilla gjatĂ« ekzekutimit pĂ«rcaktojnĂ« ekzistencĂ«n e mbĂ«shtetjes pĂ«r zgjerimet LSE (Large System Extensions) dhe pĂ«rdorin instruksionet atomike tĂ« ofruara nga procesori ose rikthehen pĂ«r tĂ« pĂ«rdorur instruksionet LL/SC (Load-link/store-conditional) pĂ«r sinkronizim.
  • Shtuar opsioni "-fbinutils-version" pĂ«r tĂ« zgjedhur versionin e synuar tĂ« paketĂ«s binutils pĂ«r tĂ« siguruar kompatibilitet me sjelljen e vjetĂ«r tĂ« linker-it dhe assembler-it.
  • PĂ«r skedarĂ«t ekzekutivĂ« ELF, me pĂ«rdorimin e flagut "-gz", kompresimi i informacionit tĂ« rindĂ«rtimit me bibliotekĂ«n zlib (gz=zlib) Ă«shtĂ« aktivizuar si standard. PĂ«r lidhjen e skedarĂ«ve objekt tĂ« rezultatit kĂ«rkohet lld ose GNU binutils 2.26+. PĂ«r tĂ« rikthyer kompatibilitetin me versionet mĂ« tĂ« vjetra tĂ« binutils, mund tĂ« specifikohet "-gz=zlib-gnu".
  • TĂ« dhĂ«nat ‘this’ tani trajtohen me kontrollet nonnull dhe dereferenceable(N). PĂ«r tĂ« hequr atributin nonnull, kur Ă«shtĂ« e nevojshme tĂ« pĂ«rdoren vlerat NULL, mund tĂ« pĂ«rdoret opsioni "-fdelete-null-pointer-checks."
  • NĂ« platformĂ«n Linux pĂ«r arkitekturĂ«n AArch64 dhe PowerPC Ă«shtĂ« aktivizuar moda "-fasynchronous-unwind-tables" pĂ«r tĂ« gjeneruar tabelat e thirrjeve "tĂ« pĂ«rmbysura" (unwind), si nĂ« GCC.
  • NĂ« "#pragma clang loop vectorize_width" Ă«shtĂ« shtuar mundĂ«sia pĂ«r tĂ« specifikuar opsionet "fixed" (standard) dhe "scalable" pĂ«r tĂ« zgjedhur metodĂ«n e vektorizimit. Moda "scalable", e cila Ă«shtĂ« e pavarur nga gjatĂ«si e vektorit, Ă«shtĂ« eksperimentale dhe mund tĂ« pĂ«rdoret nĂ« pajisje qĂ« mbĂ«shtesin vektorizimin e zakonshĂ«m.
  • PĂ«rmirĂ«suar mbĂ«shtetje pĂ«r platformĂ«n Windows: JanĂ« pĂ«rgatitur versione zyrtare binarĂ«sh pĂ«r Windows nĂ« sistemet Arm64, duke pĂ«rfshirĂ« kompiluesin Clang, linkerin LLD dhe bibliotekat runtime compiler-rt. GjatĂ« ndĂ«rtimit pĂ«r platforma tĂ« synuara MinGW, Ă«shtĂ« realizuar shtimi i sufixit .exe, edhe nĂ« rastin e ndĂ«rtimit tĂ« kryqĂ«zuar.
  • JanĂ« zgjeruar mundĂ«sitĂ« lidhur me mbĂ«shtetje pĂ«r OpenCL, OpenMP dhe CUDA. JanĂ« shtuar opsionet «-cl-std=CL3.0» dhe «-cl-std=CL1.0» pĂ«r tĂ« zgjedhur variantet e makros pĂ«r OpenCL 3.0 dhe OpenCL 1.0. JanĂ« zgjeruar mjete diagnostike.
  • Shtuar mbĂ«shtetje pĂ«r instrukcionet HRESET, UINTR dhe AVXVNNI, tĂ« realizuara nĂ« disa procesorĂ« tĂ« bazuar nĂ« arktitekturĂ«n x86.
  • NĂ« sistemet x86 Ă«shtĂ« pĂ«rfshirĂ« mbĂ«shtetje pĂ«r opsionin «-mtune=», qĂ« aktivizon optimizime mikroarkitekturale tĂ« zgjedhura, pavarĂ«sisht nga vlera «-march=».
  • NĂ« analizatorin statik, Ă«shtĂ« pĂ«rmirĂ«suar trajtimi i disa funksioneve POSIX dhe Ă«shtĂ« pĂ«rmirĂ«suar ndjeshĂ«m pĂ«rcaktimi i rezultatit tĂ« operacioneve kushtore kur krahasohen disa vlera karakteresh. JanĂ« shtuar verifikime tĂ« reja: fuchia.HandleChecker (pĂ«rcakton deshkruesit nĂ« struktura), webkit.UncountedLambdaCapturesChecker dhe alpha.webkit.UncountedLocalVarsChecker (marrin parasysh veçoritĂ« e punĂ«s me treguesit nĂ« kodin e motorit WebKit).
  • NĂ« shprehjet qĂ« pĂ«rdoren nĂ« kontekstin e constanteve, lejohet pĂ«rdorimi i funksioneve tĂ« ndĂ«rtuara __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, __bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsrd, __bsrq, __bswap, __bswapd, __bswap64, __bswapq, _castf*, __rol* dhe __ror*.
  • NĂ« utilitarin clang-format Ă«shtĂ« shtuar opsioni BitFieldColonSpacing pĂ«r tĂ« zgjedhur vendosjen e hapĂ«sirave rreth identifikuesve, kolonave dhe pĂ«rcaktimeve tĂ« fushave.
  • NĂ« sistemin e njohurive serveri clangd (ShĂ«rbimi Clang) nĂ« platformĂ«n Linux ka zvogĂ«luar ndjeshĂ«m konsumimin e memories gjatĂ« punĂ«s sĂ« gjatĂ« (sigurohet thirrja periodike e malloc_trim pĂ«r tĂ« lĂ«shuar faqet e lira tĂ« memories te sistemi operativ).

Njohuritë kryesore të LLVM 12.0:

  • Ndalimi i mbĂ«shtetjes pĂ«r mjetin e ndĂ«rtimit llvm-build tĂ« shkruar nĂ« gjuhĂ«n Python, nĂ« vend tĂ« tij projekti ka kaluar plotĂ«sisht nĂ« pĂ«rdorimin e sistemit tĂ« ndĂ«rtimit CMake.
  • NĂ« backend pĂ«r arkitekturĂ«n AArch64 Ă«shtĂ« pĂ«rmirĂ«suar mbĂ«shtetje pĂ«r platformĂ«n Windows: Ă«shtĂ« siguruar gjenerimi i saktĂ« i daljes sĂ« assemblerit pĂ«r sistemet target Windows, Ă«shtĂ« optimizuar gjenerimi i tĂ« dhĂ«nave pĂ«r "unwind" tĂ« thirrjeve (prakisht madhĂ«sia e kĂ«tyre tĂ« dhĂ«nave Ă«shtĂ« reduktuar me 60%), Ă«shtĂ« shtuar mundĂ«sia pĂ«r tĂ« krijuar tĂ« dhĂ«na unwind pĂ«rmes drejtimeve assembler .seh_*.
  • NĂ« backend pĂ«r arkitekturĂ«n PowerPC janĂ« realizuar optimizime tĂ« reja pĂ«r ciklet dhe zhvillimin inline, Ă«shtĂ« zgjeruar mbĂ«shtetje pĂ«r procesorĂ«t Power10, Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r instruktionet MMA pĂ«r manipulimin e matricave, Ă«shtĂ« pĂ«rmirĂ«suar mbĂ«shtetje pĂ«r sistemin operativ AIX.
  • NĂ« backend pĂ«r arkitekturĂ«n x86, Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r procesorĂ«t AMD Zen 3, Intel Alder Lake dhe Intel Sapphire Rapids, si dhe pĂ«r instrukcionet e procesorĂ«ve HRESET, UINTR dhe AVXVNNI. ËshtĂ« ndalur mbĂ«shtetje pĂ«r zgjerimet MPX (Memory Protection Extensions) pĂ«r verifikimin e treguesve nĂ« respektimin e kufijve tĂ« hapĂ«sirĂ«s sĂ« memories (kjo teknologji nuk fitoi popullaritet dhe tashmĂ« Ă«shtĂ« hequr nga GCC dhe clang). NĂ« assembler Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r prefiksin {disp32} dhe {disp8} si dhe sufixet .d32 dhe .d8 pĂ«r tĂ« menaxhuar madhĂ«sinĂ« e zhvendosjeve tĂ« operandĂ«ve dhe skenave. ËshtĂ« shtuar njĂ« atribut i ri 'tune-cpu' pĂ«r tĂ« menaxhuar pĂ«rfshirjen e optimizimeve mikroarkitektonike.
  • NĂ« detektorin e problemeve pĂ«r punĂ«n me numra tĂ« tĂ«rĂ« (integer sanitizer, '-fsanitize=integer'), Ă«shtĂ« shtuar njĂ« mod tĂ« ri '-fsanitize=unsigned-shift-base' pĂ«r identifikimin e mbingarkesave tĂ« numrave tĂ« plotĂ« tĂ« padiskutueshĂ«m pas zhvendosjes sĂ« bitit tĂ« majtĂ«.
  • NĂ« detektorĂ« tĂ« ndryshĂ«m (asan, cfi, lsan, msan, tsan, ubsan sanitizer) Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r shpĂ«rndarjet Linux me bibliotekĂ«n standarde Musl.
  • JanĂ« zgjeruar mjetet e ndĂ«rtimit tĂ« LLD. ËshtĂ« pĂ«rmirĂ«suar mbĂ«shtetje pĂ«r formatin ELF, duke pĂ«rfshirĂ« opsionet "—dependency-file", "—error-handling-script", "—lto-pseudo-probe-for-profiling", "—no-lto-whole-program-visibility". ËshtĂ« pĂ«rmirĂ«suar mbĂ«shtetje pĂ«r MinGW. PĂ«r formatin Mach-O (macOS), Ă«shtĂ« realizuar mbĂ«shtetje pĂ«r arkitekturĂ«n arm64, arm dhe i386, optimizimeve nĂ« fazĂ«n e lidhjes (LTO) dhe rikthimin e stack-ut gjatĂ« trajtimit tĂ« pĂ«rjashtimeve.
  • NĂ« Libc++ janĂ« realizuar mundĂ«si tĂ« reja tĂ« standardit C++20 dhe ka filluar zhvillimi i mundĂ«sive tĂ« specifikimit C++2b. ËshtĂ« shtuar mbĂ«shtetje pĂ«r ndĂ«rtim pa mbĂ«shtetje pĂ«r lokalizimin ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") dhe pajisje pĂ«r gjenerimin e numrave pseudo-rastĂ«sorĂ« ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster