Liberasyon LLVM 12.0 konpilatè suite a

Apre sis mwa nan devlopman, yo te prezante liberasyon pwojè LLVM 12.0 la - yon zouti ki konpatib ak GCC (konpilateur, optimisateur ak jeneratè kòd) ki konpile pwogram yo nan bitkod entèmedyè enstriksyon vityèl ki tankou RISC (yon machin vityèl ki ba nivo ak yon sistèm optimize milti-nivo). Pseudokod pwodwi a ka konvèti lè l sèvi avèk yon du JIT nan enstriksyon machin dirèkteman nan moman ekzekisyon pwogram lan.

Amelyorasyon nan Clang 12.0:

  • Sipò pou atribi "probab" ak "enpwobab" yo pwopoze nan estanda C++20 la te aplike epi aktive pa default, sa ki pèmèt optimisateur la enfòme sou pwobabilite pou konstriksyon kondisyonèl la te deklanche (pa egzanp, "[[probab). ]] si (o aza > 0) {“).
  • Te ajoute sipò pou AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) ak Intel Sapphire Rapids (-march=sapphirerapids).
  • Te ajoute sipò pou drapo "-march=x86-64-v[234]" pou chwazi nivo achitekti x86-64 (v2 - kouvri ekstansyon SSE4.2, SSSE3, POPCNT ak CMPXCHG16B; v3 - AVX2 ak MOVBE; v4 - AVX-512 ).
  • Te ajoute sipò pou Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) ak Fujitsu A64FX (a64fx). Pou egzanp, pou pèmèt optimize pou CPU Neoverse-V1, ou ka presize "-mcpu = neoverse-v1".
  • Pou achitekti AArch64 la, yo ajoute nouvo drapo konpilatè "-moutline-atomics" ak "-mno-outline-atomics" pou pèmèt oswa enfim fonksyon asistan operasyon atomik, tankou "__aarch64_cas8_relax". Fonksyon sa yo detekte nan kouri si wi ou non sipò LSE (Gwo Sistèm Ekstansyon) ki disponib epi sèvi ak enstriksyon yo bay processeur atomik oswa retounen nan itilize LL / SC (Chaj-lyen / magazen-kondisyonèl) enstriksyon pou senkronizasyon.
  • Te ajoute opsyon "-fbinutils-version" pou chwazi vèsyon sib suite binutils la pou konpatibilite ak konpòtman ki pi gran nan linker ak asanblaj.
  • Pou fichye ègzèkutabl ELF, lè yo espesifye drapo "-gz", konpresyon enfòmasyon debogaj lè l sèvi avèk bibliyotèk zlib la pèmèt pa default (gz=zlib). Lyen fichye objè ki kapab lakòz yo mande lld oswa GNU binutils 2.26+. Pou retabli konpatibilite ak ansyen vèsyon binutils, ou ka presize "-gz=zlib-gnu".
  • Endikasyon 'sa' a kounye a trete ak chèk non null ak dereferenceable(N). Pou retire atribi nonnull la, si ou bezwen sèvi ak valè NULL, ou ka itilize opsyon "-fdelete-null-pointer-checks".
  • Sou platfòm Linux la, mòd "-fasynchronous-unwind-tables" la pèmèt pou achitekti AArch64 ak PowerPC pou jenere tab apèl detant, tankou nan GCC.
  • Nan "#pragma clang loop vectorize_width" te ajoute abilite pou presize opsyon "fiks" (default) ak "évolutive" pou chwazi metòd vektorizasyon an. Mòd "évolutive" a, endepandan de longè vektè a, se eksperimantal epi yo ka itilize sou pyès ki nan konpitè ki sipòte vektorizasyon évolutive.
  • Amelyore sipò pou platfòm Windows la: Yo te prepare asanble binè ofisyèl pou Windows sou sistèm Arm64, ki gen ladan du Clang, LLD linker ak bibliyotèk exécution compilateur-rt. Lè bati pou platfòm sib MinGW, yo ajoute sifiks .exe, menm lè konpile kwaze.
  • Kapasite ki asosye ak sipò pou OpenCL, OpenMP ak CUDA yo te elaji. Te ajoute opsyon "-cl-std=CL3.0" ak "-cl-std=CL1.0" pou chwazi opsyon macro pou OpenCL 3.0 ak OpenCL 1.0. Zouti dyagnostik yo te elaji.
  • Te ajoute sipò pou enstriksyon HRESET, UINTR, ak AVXVNNI aplike nan kèk processeur ki baze sou x86.
  • Sou sistèm x86, sipò pou opsyon "-mtune=" yo aktive ", ki aktive optimize mikwo-achitekti chwazi yo, kèlkeswa valè "-mas= "
  • Analizè estatik la amelyore pwosesis kèk fonksyon POSIX ak siyifikativman amelyore detèminasyon rezilta operasyon kondisyonèl lè gen plizyè valè senbolik nan konparezon an. Nouvo chèk yo te ajoute: fuchia.HandleChecker (defini manch nan estrikti), webkit.UncountedLambdaCapturesChecker webkit ak alpha.webkit.UncountedLocalVarsChecker (pran an kont sengularite yo nan travay ak endikasyon nan kòd motè WebKit).
  • Nan ekspresyon yo itilize nan kontèks konstan, sèvi ak fonksyon entegre __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bsfq, _bsfq, _bscan,_bs,_bs,_bs,___ bswap, __bswapd, __bswap64, gen dwa. __bswapq , _castf*, __rol* ak __ror*.
  • Te ajoute yon opsyon BitFieldColonSpacing nan sèvis piblik la clang-fòma pou chwazi espas alantou idantifyan, kolòn, ak definisyon jaden.
  • Sèvè kachèt clangd (Clang Server) sou platfòm Linux la te siyifikativman redwi konsomasyon memwa pandan operasyon alontèm (apèl peryodik sou malloc_trim yo bay pou retounen paj memwa gratis nan sistèm operasyon an).

Inovasyon kle nan LLVM 12.0:

  • Sipò pou zouti llvm-build build ekri nan Python te sispann, epi olye de sa pwojè a te konplètman chanje nan sèvi ak sistèm nan konstriksyon CMake.
  • Nan backend pou achitekti AArch64, sipò pou platfòm Windows la te amelyore: yo te asire jenerasyon kòrèk pwodiksyon asanblaj pou sistèm Windows sib yo, jenerasyon done sou apèl detant yo te optimize (gwosè done sa yo te redwi pa 60). %), kapasite pou kreye done detant lè l sèvi avèk assembler te ajoute direktiv .seh_*.
  • Backend pou achitekti PowerPC a prezante nouvo optimize pou bouk ak deplwaman enline, sipò elaji pou processeurs Power10, sipò ajoute pou enstriksyon MMA pou manipilasyon matris, ak sipò amelyore pou sistèm operasyon AIX.
  • Backend x86 a ajoute sipò pou processeurs AMD Zen 3, Intel Alder Lake ak Intel Sapphire Rapids, ansanm ak enstriksyon processeur HRESET, UINTR ak AVXVNNI. Sipò pou MPX (Memory Protection Extensions) pou tcheke endikasyon yo pou asire limit memwa yo pa sipòte ankò (teknoloji sa a pa gaye toupatou epi li te deja retire nan GCC ak clang). Te ajoute sipò nan asanblaj la pou prefiks {disp32} ak {disp8} ak sifiks .d32 ak .d8 pou kontwole gwosè konpanse operand ak so. Te ajoute yon nouvo atribi "tune-cpu" pou kontwole enklizyon optimize mikwo-achitekti.
  • Yon nouvo mòd "-fsanitize=unsigned-shift-base" te ajoute nan detektè pwoblèm nan nonb antye relatif (dezenfektan antye, "-fsanitize = antye") pou detekte debòde nan nonm antye ki pa siyen apre yon ti kras chanjman sou bò gòch la.
  • Nan divès kalite detektè (asan, cfi, lsan, msan, tsan, ubsan sanitizer) yo te ajoute sipò pou distribisyon Linux ak bibliyotèk estanda Musl la.
  • Kapasite yo nan linker a LLD yo te elaji. Amelyore sipò pou fòma ELF a, ki gen ladan opsyon yo ajoute "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program -vizibilite"" Amelyore sipò MinGW. Pou fòma Mach-O (macOS), sipò pou achitekti arm64, arm, ak i386, optimize tan lyen (LTO), ak dewoulman pile pou manyen eksepsyon yo te aplike.
  • Libc++ aplike nouvo karakteristik estanda C++20 e li te kòmanse devlopman karakteristik spesifikasyon C++2b. Te ajoute sipò pou bati ak sipò lokalizasyon enfim ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") ak aparèy pou jenere nimewo pseudo-o aza ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").

Sous: opennet.ru

Add nouvo kòmantè