LLVM 12.0 konpiladore-multzoaren kaleratzea

Sei hilabeteko garapenaren ondoren, LLVM 12.0 proiektuaren oharra aurkezten da: GCC-rekin bateragarria den tresna-kit bat (konpilatzaileak, optimizatzaileak eta kode-sorgailuak) programak RISC moduko instrukzio birtualen bitarteko bitkode batean konpilatzen dituena (maila baxuko makina birtuala duena). maila anitzeko optimizazio sistema). Sortutako sasi-kodea JIT konpilatzaileak makinaren instrukzioetan bihur dezake programa exekutatzen den unean bertan.

Hobekuntzak Clang 12.0-n:

  • C++20 estandarrean proposatzen diren "litekeena" eta "ez daitekeen" atributuetarako euskarria lehenespenez inplementatu eta gaitu da, optimizatzaileari baldintzazko eraikuntza abiarazteko probabilitateaz informatzeko aukera emanez (adibidez, "[[litekeena ]] bada (ausazkoa > 0) {β€œ).
  • AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) eta Intel Sapphire Rapids (-march=sapphirerapids) prozesadoreetarako laguntza gehitu da.
  • "-march=x86-64-v[234]" banderen laguntza gehitu da x86-64 arkitektura mailak hautatzeko (v2 - SSE4.2, SSSE3, POPCNT eta CMPXCHG16B luzapenak estaltzen ditu; v3 - AVX2 eta MOVBE; v4 - AVX-512 ) .
  • Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) eta Fujitsu A64FX (a64fx) prozesadoreetarako laguntza gehitu da. Adibidez, Neoverse-V1 CPUetarako optimizazioak gaitzeko, "-mcpu=neoverse-v1" zehaztu dezakezu.
  • AArch64 arkitekturarako, konpiladore-marka berriak "-moutline-atomics" eta "-mno-outline-atomics" gehitu dira eragiketa atomikoaren laguntzaile funtzioak gaitzeko edo desgaitzeko, hala nola "__aarch64_cas8_relax". Funtzio horiek exekuzioan detektatzen dute LSE (Large System Extensions) euskarria erabilgarri dagoen ala ez eta emandako prozesadore atomikoaren jarraibideak erabiltzen dituzte edo sinkronizatzeko LL/SC (Load-link/store-baldintzatua) jarraibideak erabiltzen dituzte.
  • "-fbinutils-version" aukera gehitu da binutils suitearen xede-bertsioa hautatzeko, estekatzaile eta muntatzaile zaharragoekin bateragarri izateko.
  • ELF fitxategi exekutagarrietarako, "-gz" marka zehazten denean, zlib liburutegia erabiliz arazketa-informazioaren konpresioa gaituta dago lehenespenez (gz=zlib). Sortutako objektu-fitxategiak lotzeko lld edo GNU binutils 2.26+ behar da. Binutils-en bertsio zaharragoekin bateragarritasuna berrezartzeko, "-gz=zlib-gnu" zehaztu dezakezu.
  • "Hau" erakuslea orain ez-null eta dereferenceable(N) egiaztapenekin prozesatzen da. Nonnull atributua kentzeko, NULL balioak erabili behar badituzu, "-fdelete-null-pointer-checks" aukera erabil dezakezu.
  • Linux plataforman, "-fasynchronous-unwind-tables" modua gaituta dago AArch64 eta PowerPC arkitekturak desaktibatzeko deien taulak sortzeko, GCCn bezala.
  • "#pragma clang loop vectorize_width" atalean "finkoa" (lehenetsia) eta "eskalagarria" aukerak bektorializazio metodoa hautatzeko aukera gehitu zuen. "Eskalagarria" modua, luzera bektorialetik independentea, esperimentala da eta bektorializazio eskalagarria onartzen duen hardwarean erabil daiteke.
  • Windows plataformarako euskarria hobetua: Arm64 sistemetan Windows-erako muntaia bitar ofizialak prestatu dira, Clang konpilatzailea, LLD estekatzailea eta compiler-rt runtime liburutegiak barne. MinGW helburu-plataformetarako eraikitzean, .exe atzizkia gehitzen da, baita gurutzatuta ere.
  • OpenCL, OpenMP eta CUDA laguntzarekin lotutako gaitasunak zabaldu dira. "-cl-std=CL3.0" eta "-cl-std=CL1.0" aukerak gehitu dira OpenCL 3.0 eta OpenCL 1.0rako makro-aukerak hautatzeko. Diagnostiko tresnak zabaldu dira.
  • X86-n oinarritutako prozesadore batzuetan inplementatutako HRESET, UINTR eta AVXVNNI argibideetarako laguntza gehitu da.
  • X86 sistemetan, "-mtune=" aukerarako euskarria gaituta dago, hautatutako optimizazio mikroarkitekturalak gaituta "-march=" balioa edozein izanda ere.
  • Analizatzaile estatikoak POSIX funtzio batzuen prozesamendua hobetu du eta baldintzazko eragiketen emaitzaren zehaztapena nabarmen hobetu du konparazioan hainbat balio sinboliko daudenean. Egiaztapen berriak gehitu dira: fuchia.HandleChecker (heldulekuak definitzen ditu egituretan), webkit.UncountedLambdaCapturesChecker webkit eta alpha.webkit.UncountedLocalVarsChecker (WebKit motorraren kodean erakusleekin lan egitearen berezitasunak hartzen ditu kontuan).
  • Konstanteen testuinguruan erabiltzen diren esamoldeetan, __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bsfq, __bsfq, __bsfq, __reverse_, __bsfq, __bsfq, __reverse, __bsr_ wap, __bswapd, __bswap64, __ onartzen da bswapq , _castf*, __rol* eta __ror*.
  • BitFieldColonSpacing aukera bat gehitu da clang-format utilitatean identifikatzaileen, zutabeen eta eremuen definizioen arteko tartea hautatzeko.
  • Linux plataformako clangd caching zerbitzariak (Clang Server) memoria-kontsumoa nabarmen murriztu du epe luzeko funtzionamenduan (malloc_trim-i aldizkako deiak ematen dira doako memoria-orriak sistema eragilera itzultzeko).

LLVM 12.0-ko berrikuntza nagusiak:

  • Python-en idatzitako llvm-build build tresnarako laguntza eten egin da, eta, horren ordez, proiektua CMake build sistema erabiltzera aldatu da.
  • AArch64 arkitekturaren backend-ean, Windows plataformarako euskarria hobetu da: helburuko Windows sistemetarako muntatzaile-irteera zuzena sortzea bermatu da, deskonektatzeko deien datuen sorrera optimizatu da (halako datuen tamaina 60 murriztu da. %), deskonbinazio-datuak sortzeko gaitasuna muntatzailea erabiliz gehitu da .seh_* zuzentarauak.
  • PowerPC arkitekturaren backend-ak begiztak eta lineako hedapenerako optimizazio berriak ditu, Power10 prozesadoreentzako euskarria hedatua, matrizea manipulatzeko MMA argibideetarako laguntza gehitzen du eta AIX sistema eragilerako euskarria hobetua.
  • x86 backend-ak AMD Zen 3, Intel Alder Lake eta Intel Sapphire Rapids prozesadoreentzako euskarria gehitzen du, baita HRESET, UINTR eta AVXVNNI prozesadorearen argibideak ere. MPX (Memory Protection Extensions) onartzen da erakusleak egiaztatzeko memoria-mugak jada onartzen ez direla ziurtatzeko (teknologia hau ez dago hedatuta eta GCCtik eta clang-etik kendu da dagoeneko). {disp32} eta {disp8} aurrizkietarako eta .d32 eta .d8 atzizkietarako euskarria gehitu zaio muntatzaileari, eragigaien desplazamenduen eta jauzien tamaina kontrolatzeko. "tune-cpu" atributu berri bat gehitu da mikroarkitekturaren optimizazioak sartzea kontrolatzeko.
  • "-fsanitize=unsigned-shift-base" modu berri bat gehitu da zenbaki osoen arazoen detektatzaileari (integer sanitizer, "-fsanitize=integer") sinatu gabeko zenbaki osoen gainezkaketak detektatzeko, pixka bat ezkerrera aldatu ondoren.
  • Hainbat detektagailutan (asan, cfi, lsan, msan, tsan, ubsan sanitizer) Musl liburutegi estandarra duten Linux banaketetarako laguntza gehitu da.
  • LLD estekatzailearen gaitasunak zabaldu dira. ELF formatuaren euskarria hobetu da, "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program" gehitutako aukerak barne. -ikusgarritasuna" MinGW laguntza hobetua. Mach-O formatuan (macOS), arm64, arm eta i386 arkitekturak, esteka-denboraren optimizazioak (LTO) eta salbuespenak kudeatzeko pila desegitea inplementatu da.
  • Libc++ C++20 estandarraren ezaugarri berriak ezartzen ditu eta C++2b zehaztapenaren ezaugarriak garatzen hasi da. Eraikitzeko euskarria gehitu da lokalizazio-laguntza desgaigarriarekin ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") eta sasi-ausazko zenbakiak sortzeko gailuak ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").

Iturria: opennet.ru

Gehitu iruzkin berria