Famoahana ny suite compiler LLVM 12.0

Taorian'ny enim-bolana ny fampandrosoana dia atolotra ny famoahana ny tetikasa LLVM 12.0 - fitaovana mifanaraka amin'ny GCC (mpamorona, optimizer ary mpamorona kaody) izay manangona programa ho bitcode manelanelana amin'ny torolàlana virtoaly mitovy amin'ny RISC (milina virtoaly ambany misy rafitra fanamafisam-peo maromaro). Ny pseudo-code vokarina dia azo ovain'ny JIT compiler ho toromarika milina amin'ny fotoana hanatanterahana ny programa.

Fanatsarana ao amin'ny Clang 12.0:

  • Ny fanohanana ireo toetra "azo inoana" sy "tsy azo inoana" natolotra ao amin'ny fenitra C ++ 20 dia nampiharina ary navela tamin'ny alàlan'ny default, ahafahan'ny optimizer hampahafantarina momba ny mety hisian'ny fananganana fepetra (ohatra, "[[azo inoana fa ]] raha (kisendrasendra > 0) {“).
  • Fanohanana fanampiny ho an'ny processeur AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) ary Intel Sapphire Rapids (-march=sapphirerapids).
  • Fanampiana fanampiny ho an'ny saina "-march=x86-64-v[234]" hisafidianana ny haavon'ny maritrano x86-64 (v2 - mandrakotra ny fanitarana SSE4.2, SSSE3, POPCNT ary CMPXCHG16B; v3 - AVX2 sy MOVBE; v4 - AVX-512 ).
  • Fanohanana fanampiny ho an'ny Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) ary Fujitsu A64FX (a64fx). Ohatra, mba ahafahana manatsara ny CPUs Neoverse-V1, azonao atao ny mamaritra ny "-mcpu=neoverse-v1".
  • Ho an'ny maritrano AArch64, dia nampiana ny sainam-pambolena vaovao "-moutline-atomics" sy "-mno-outline-atomics" mba ahafahana na manafoana ny asan'ny mpanampy atomika, toy ny "__aarch64_cas8_relax". Ny fiasa toy izany dia mahita amin'ny fotoana fandehanana raha misy ny fanohanana LSE (Large System Extensions) ary mampiasa ny toromarika processeur atomika nomena na miverina amin'ny fampiasana toromarika LL/SC (Load-link/store-conditional) ho an'ny fampifanarahana.
  • Nampiana safidy "-fbinutils-version" hisafidianana ny kinova kendrena amin'ny suite binutils mba hifanaraka amin'ny fitondran-tena mpampitohy sy assembler taloha.
  • Ho an'ny rakitra azo tanterahana ELF, rehefa voatondro ny saina "-gz", dia alefa amin'ny alàlan'ny default (gz=zlib) ny famoretana ny fampahalalana debug amin'ny alàlan'ny tranomboky zlib. Mila lld na GNU binutils 2.26+ ny fampifandraisana ireo rakitra zavatra vokarina. Mba hamerenana amin'ny laoniny ny fifanarahana amin'ny dikan-teny taloha amin'ny binutils dia azonao atao ny mamaritra ny "-gz=zlib-gnu".
  • Ny tondro 'ity' izao dia voahodina miaraka amin'ny fanamarinana tsy misy dikany sy azo averina (N). Mba hanesorana ny toetra tsy misy dikany, raha mila mampiasa sanda NULL ianao dia azonao atao ny mampiasa ny safidy "-fdelete-null-pointer-checks".
  • Ao amin'ny sehatra Linux, ny maody "-fasynchronous-unwind-tables" dia avela ho an'ny maritrano AArch64 sy PowerPC hamokatra latabatra fiantsoana miala sasatra, toy ny ao amin'ny GCC.
  • Ao amin'ny "#pragma clang loop vectorize_width" dia nanampy ny fahafahana mamaritra ny safidy "fixed" (default) sy "scalable" hisafidianana ny fomba vectorization. Ny fomba "scalable", tsy miankina amin'ny halavan'ny vector, dia andrana ary azo ampiasaina amin'ny fitaovana izay manohana ny vectorization azo esorina.
  • Fanohanana nohatsaraina ho an'ny sehatra Windows: Efa voaomana ny fivoriambe binary ofisialy ho an'ny Windows amin'ny rafitra Arm64, anisan'izany ny Clang compiler, LLD linker ary compiler-rt runtime libraries. Rehefa manorina ho an'ny sehatra kendrena MinGW dia ampiana ny tovana .exe, na dia mitambatra aza.
  • Ny fahaiza-manao mifandraika amin'ny fanohanana ny OpenCL, OpenMP ary CUDA dia nitarina. Safidy fanampiny "-cl-std=CL3.0" sy "-cl-std=CL1.0" hisafidianana safidy macro ho an'ny OpenCL 3.0 sy OpenCL 1.0. Nitarina ny fitaovana fitiliana.
  • Fanampiana fanampiny ho an'ny torolàlana HRESET, UITR, ary AVXVNNI nampiharina tamin'ny processeur sasany mifototra amin'ny x86.
  • Amin'ny rafitra x86, ny fanohanana ny safidy "-mtune=" dia alefa ", izay manetsika ny fanatsarana microarchitectural voafantina, na inona na inona sandan'ny "-march= "
  • Ny mpandinika static dia nanatsara ny fanodinana ny fiasa POSIX sasany ary nanatsara ny fanapahan-kevitra momba ny vokatry ny asa misy fepetra rehefa misy soatoavina an'ohatra maromaro amin'ny fampitahana. Nampiana fanamarinana vaovao: fuchia.HandleChecker (manoritra ny tànana amin'ny rafitra), webkit.UncountedLambdaCapturesChecker webkit ary alpha.webkit.UncountedLocalVarsChecker (mihevitra ny mampiavaka ny fiasana amin'ny tondro ao amin'ny kaody motera WebKit).
  • Ao amin'ny teny ampiasaina amin'ny tontolon'ny constants, ny fampiasana ny fiasa naorina __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, __bsd, avela, .__bswapq , _castf*, __rol* ary __ror*.
  • Nampiana safidy BitFieldColonSpacing amin'ny fampiasa clang-format hisafidianana ny elanelana manodidina ny famantarana, tsanganana ary famaritana saha.
  • Ny mpizara clangd caching (Clang Server) eo amin'ny sehatra Linux dia nampihena be ny fanjifàna fahatsiarovana mandritra ny fotoana maharitra (antsoina matetika amin'ny malloc_trim mba hamerenana ny pejy fahatsiarovana maimaim-poana amin'ny rafitra miasa).

Fanavaozana lehibe ao amin'ny LLVM 12.0:

  • Ny fanohanana ny fitaovana fananganana llvm-build voasoratra amin'ny Python dia natsahatra, fa ny tetikasa kosa dia nivadika tanteraka tamin'ny fampiasana ny rafitra fananganana CMake.
  • Ao amin'ny backend ho an'ny maritrano AArch64, ny fanohanana ny sehatra Windows dia nohatsaraina: azo antoka ny famokarana marina ny assembler ho an'ny rafitra Windows kendrena, ny famokarana angon-drakitra amin'ny antso miala sasatra dia nohatsaraina (nihena 60 ny haben'ny data toy izany. %), nampiana torolàlana .seh_* ny fahafahana mamorona angona miala sasatra amin'ny fampiasana assembler.
  • Ny backend ho an'ny maritrano PowerPC dia manasongadina fanatsarana vaovao ho an'ny tadivavarana sy ny fametrahana inline, fanitarana ny fanohanana ny Power10 processeur, fanampiana fanampiny ho an'ny torolalana MMA ho an'ny fanodinkodinana matrix, ary fanatsarana ny fanohanana ny rafitra fiasan'ny AIX.
  • Ny backend x86 dia manampy fanohanana ny AMD Zen 3, Intel Alder Lake ary Intel Sapphire Rapids processeur, ary koa ny torolàlana momba ny processeur HRESET, UITR ary AVXVNNI. Fanohanana ho an'ny MPX (Fitaovana fiarovana amin'ny fitadidiana) amin'ny fanaraha-maso ny tondro mba hahazoana antoka fa tsy tohanana intsony ny fetran'ny fitadidiana (tsy miparitaka be io teknolojia io ary efa nesorina tamin'ny GCC sy clang). Fanampiana fanampiny ho an'ny mpanangona ny tovana {disp32} sy {disp8} ary ny tovana .d32 sy .d8 hifehy ny haben'ny operand offset sy hitsambikina. Nampiana toetra vaovao "tune-cpu" hifehy ny fampidirana ny fanatsarana microarchitectural.
  • Ny fomba vaovao "-fsanitize=unsigned-shift-base" dia nampiana tamin'ny mpitsikilo olana integer (integer sanitizer, "-fsanitize=integer") mba hamantarana ny fihoaran'ny integer tsy misy sonia aorian'ny fiovàna kely miankavia.
  • Ao amin'ny mpitsikilo isan-karazany (asan, cfi, lsan, msan, tsan, ubsan sanitizer) dia nampiana ny fanohanana ny fizarana Linux miaraka amin'ny tranomboky Musl mahazatra.
  • Nitarina ny fahafahan'ny mpampitohy LLD. Fanohanana nohatsaraina amin'ny endrika ELF, ao anatin'izany ny safidy fanampiny "--dependency-file", "-error-handling-script", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program - fahitana" " Fanohanana MinGW nohatsaraina. Ho an'ny endrika Mach-O (macOS), dia nampiharina ny fanohanana ny maritrano arm64, arm, ary i386, ny fanatsarana ny fotoana (LTO), ary ny fanalefahana ny stack ho an'ny fikarakarana manokana.
  • Libc ++ dia mametraka endri-javatra vaovao amin'ny fenitra C ++ 20 ary nanomboka namolavola ny endri-javatra C ++ 2b. Fanampiana fanampiny ho an'ny fanorenana miaraka amin'ny fanelingelenana ny fanohanan'ny localization (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) sy fitaovana hamoronana isa pseudo-random (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

Source: opennet.ru

Add a comment