Siideynta LLVM 12.0 compiler suite

Ka dib lix bilood oo horumarin ah, sii deynta mashruuca LLVM 12.0 ayaa la soo bandhigay - qalab ku habboon GCC (compiers, optimizers and code-generators) kaas oo u diyaariya barnaamijyada koodka dhexdhexaadka ah ee RISC-u eg tilmaamaha farsamada (mashiin macmal ah oo hooseeya oo leh nidaamka tayaynta heerar badan). Pseudocode-ka la soo saaray waxaa loo rogi karaa iyadoo la isticmaalayo isku-duwaha JIT si toos ah tilmaamaha mashiinka wakhtiga fulinta barnaamijka.

Horumarinta Clang 12.0:

  • Taageerada sifada "laga yaabo" iyo "aan macquul ahayn" ee lagu soo jeediyay halbeegga C++20 waa la hirgaliyay oo si toos ah ayaa loo awooday, taasoo u ogolaanaysa hagaajinta in lagu wargaliyo ixtimaalka dhismaha shuruuda ah ee kicinta (tusaale, ]] haddii ( random > 0) {").
  • Taageero lagu daray AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) iyo Intel Sapphire Rapids (-march=sapphirepids).
  • Taageerada lagu daray "-march=x86-64-v[234]" calamada si loo xusho x86-64 heerarka qaab dhismeedka (v2 - daboolaya SSE4.2, SSSE3, POPCNT iyo CMPXCHG16B kordhinta; v3 - AVX2 iyo MOVBE; v4 - AVX-512 ) .
  • Taageero lagu daray Arm Cortex-A78C (kortex-a78c), Arm Cortex-R82 (kortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) iyo Fujitsu A64FX (a64fx). Tusaale ahaan, si aad awood ugu siiso hagaajinta Neoverse-V1 CPUs, waxaad qeexi kartaa "-mcpu=neoverse-v1".
  • Qaab dhismeedka AArch64, calamada cusub ee compiler "-moutline-atomics" iyo "-mno-outline-atomics" ayaa lagu daray si ay awood ugu yeeshaan ama u joojiyaan hawlaha caawiyaha hawlgalka atomiga, sida "__aarch64_cas8_relax". Hawlaha noocan oo kale ah waxay ogaadaan wakhtiga ay socdaan in taageerada LSE (Large System Extensions) la heli karo oo ay isticmaalaan tilmaamaha processor-ka atomiga ee la bixiyay ama ay dib ugu noqdaan isticmaalka LL/SC (Load-link/store-conditional) tilmaamaha isku xidhka.
  • Lagu daray "-fbinutils-version" ikhtiyaar si loo xusho nooca bartilmaameedka ee binutils suite si loogu waafaqo xiriiriyaha da'da weyn iyo dhaqanka isu-ururinta.
  • Faylasha ELF ee la fulin karo, marka calanka "-gz" la cayimo, isku-duwidda macluumaadka khaladka ah iyada oo la adeegsanayo maktabadda zlib si toos ah (gz=zlib). Isku xirka faylalka shayga ee ka soo baxay waxay u baahan tahay ld ama GNU binutils 2.26+. Si loo soo celiyo ku habboonaanta noocyada hore ee binutils, waxaad qeexi kartaa "-gz=zlib-gnu".
  • Tilmaamaha 'kan' hadda waxa lagu farsameeyay jeegag aan buri lahayn oo aan la joojin karin (N). Si aad meesha uga saarto sifada aan null ahayn markaad u baahan tahay inaad isticmaasho qiyamka NULL, waxaad isticmaali kartaa "-fdelete-null-pointer-checks" doorashada.
  • Goobta Linux, qaabka "-fasynchronous-unwind-tables" ayaa awood u leh AArch64 iyo naqshadaha PowerPC si ay u abuuraan miisaska wicitaanka, sida GCC.
  • Gudaha "#pragma clang loop vectorize_width" wuxuu ku daray awoodda lagu qeexo "fixed" (default) iyo "scalable" doorashooyinka si loo doorto habka vectorization. Habka "scalable", oo ka madax bannaan dhererka vector, waa tijaabo waxaana loo isticmaali karaa qalabka taageera vectorization scalable.
  • Taageerada la wanaajiyay ee madal Windows: Kulamada rasmiga ah ee labada dhinac ee Windows ee nidaamyada Arm64 ayaa la diyaariyay, oo ay ku jiraan isku xidhka Clang, LLD linker iyo compiler-rt runtime maktabadaha. Marka la dhisayo meelaha bartilmaameedka ah ee MinGW, .exe suffix ayaa lagu daraa, xitaa marka la isku daro.
  • Awoodaha la xidhiidha taageerada OpenCL, OpenMP iyo CUDA waa la balaariyay. Ikhtiyaarada lagu daray "-cl-std=CL3.0" iyo "-cl-std=CL1.0" si loo xusho fursadaha makro ee OpenCL 3.0 iyo OpenCL 1.0. Qalabka lagu ogaanayo waa la ballaariyay.
  • Taageero lagu daray tilmaamaha HRESET, UINTR, iyo AVXVNNI ee laga hirgeliyay qaar ka mid ah soo-saareyaasha x86-ku-saleysan.
  • Nidaamyada x86, taageerada "-mtune=" ikhtiyaarka waa la dajiyay, taasoo awood u siinaysa hagaajinta qaab-dhismeedka yar-yar ee la doortay iyadoon loo eegin qiimaha "-march=".
  • Falanqeeyaha joogtada ah wuxuu wanaajiyey habsocodka qaar ka mid ah shaqooyinka POSIX wuxuuna si weyn u wanaajiyay go'aaminta natiijada hawlgallada shuruudaysan marka la barbardhigo qiimayaal dhowr ah oo calaamad ah. Jeegag cusub ayaa lagu daray: fuchia.HandleChecker (wuxuu qeexayaa gacan ku haynta qaabdhismeedka), webkit.UncountedLambdaCapturesChecker webkit iyo alpha.webkit.UncountedLocalVarsChecker (waxay ku xisaabtamaysaa sifooyinka gaarka ah ee la shaqaynta tilmaamayaasha ee koodhka injiinka WebKit).
  • Tibaaxaha loo isticmaalo macnaha guud, isticmaalka hawlaha la dhisay __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_horward, __bsfd, __bsfq, __bit__scan_reverse, bspd, bspqrd, bspd , __ waa la ogol yahay bswapq , _castf*, __rol* iyo __ror*.
  • Waxaa lagu daray ikhtiyaarka BitFieldColonSpacing utility-qaabka si loo doorto kala dheereynta agagaarka tilmaamayaasha, tiirarka, iyo qeexida goobta.
  • Adeegga kaydinta clangd (Clang Server) ee ku yaal madal Linux ayaa si weyn hoos ugu dhigtay isticmaalka xusuusta inta lagu jiro hawlgalka muddada dheer (wacitaannada xilliyada ah ee malloc_trim ayaa la bixiyaa si loogu soo celiyo bogagga xusuusta bilaashka ah ee nidaamka hawlgalka).

Hal-abuurka muhiimka ah ee LLVM 12.0:

  • Taageerada qalab dhisidda lvm-dhis ee ku qoran Python waa la joojiyay, taa beddelkeedana mashruucu wuxuu gebi ahaanba u wareegay adeegsiga nidaamka dhisidda CMake.
  • Dhabarka dambe ee qaab dhismeedka AArch64, taageerada madal Windows waa la hagaajiyay: jiilka saxda ah ee wax soo saarka nidaamyada Windows ee bartilmaameedka ah ayaa la hubiyay, soo saarista xogta wicitaannada dabaysha ayaa la hagaajiyay (xajmiga xogtaas waxaa la dhimay 60 %), awoodda lagu abuuro xogta dabaysha iyadoo la isticmaalayo assembler ayaa lagu daray dardaaranka .seh_*.
  • Dhabarka dambe ee qaab dhismeedka PowerPC wuxuu leeyahay hagaajin cusub oo loogu talagalay wareegyada iyo geynta khadka, taageerada la ballaariyay ee soo-saareyaasha Power10, taageerada lagu daray tilmaamaha MMA ee wax-is-daba-marinta matrixka, iyo hagaajinta taageerada nidaamka hawlgalka AIX.
  • Dhabarka x86 wuxuu ku darayaa taageerada AMD Zen 3, Intel Alder Lake iyo processor-yaasha Intel Sapphire Rapids, iyo sidoo kale HRESET, UINTR iyo tilmaamaha processor-ka AVXVNNI. Taageerada MPX (Extensions Ilaalinta Xusuusta) ee hubinta tilmaamayaasha si loo hubiyo in xudduudaha xusuusta aan la taageerin (teknoolojiyadani ma ahan mid baahsan oo mar hore ayaa laga saaray GCC iyo qabiilka). Taageero lagu daray isu-duwaha loogu talagalay {disp32} iyo {disp8} horgalayaasha iyo .d32 iyo .d8 daba-galayaasha si loo xakameeyo cabbirka operand-ka-dhaafka iyo boodada. Lagu daray sifo cusub "tune-cpu" si loo xakameeyo ku darida tayaynta farshaxanimada yar yar.
  • Qaab cusub β€œ-fsanitize=unsigned-shift-base” ayaa lagu daray shaybaarka dhibka shaandheynta (integer sanitizer, β€œ-fsanitize=integer”) si loo ogaado qulqulka tegers aan saxiixin kadib xoogaa bidix loo wareego.
  • Baahiyeyaal kala duwan (asan, cfi, lsan, msan, tsan, ubsan sanitizer) taageerada qaybinta Linux oo leh maktabadda Musl ee caadiga ah ayaa lagu daray.
  • Awoodaha xiriiriyaha LLD waa la ballaariyay. Taageerada la wanaajiyay ee qaabka ELF, oo ay ku jiraan xulashooyinka lagu daray "--ku-tiirsanaanta-faylka", "- khalad-xakamaynta-script", "-lto-pseudo-probe-for-profiling", "-no-lto-dhammaan-barnaamijka -muuqaal"" Taageerada MinGW oo la hagaajiyay. Qaabka Mach-O (macOS), taageerada arm64, cududa, iyo naqshadaha i386, hagaajinta wakhtiga isku xidhka (LTO), iyo xidhidhaynta wax ka qabashada ka reeban ayaa la hirgeliyay.
  • Libc++ waxay fulisaa sifooyin cusub oo ah heerka C++20 waxayna bilawday horumarinta sifooyinka qeexida C++2b. Taageero lagu daray dhisidda taageerada meelaynta naafada ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") iyo aaladaha abuura lambarro- random-ka ah ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").

Source: opennet.ru

Add a comment