LLVM 12.0 සම්පාදක කට්ටලය නිකුත් කිරීම

මාස හයක සංවර්ධනයෙන් පසු, LLVM 12.0 ව්‍යාපෘතිය නිකුතුව ඉදිරිපත් කරන ලදී - GCC-අනුකූල මෙවලම් කට්ටලයක් (සම්පාදක, ප්‍රශස්තිකරණ සහ කේත උත්පාදක) RISC වැනි අතථ්‍ය උපදෙස් වල අතරමැදි බිට්කෝඩ් බවට වැඩසටහන් සම්පාදනය කරයි (පහළ මට්ටමේ අතථ්‍ය යන්ත්‍රයක් සහිත ය. බහු මට්ටමේ ප්රශස්තකරණ පද්ධතිය). උත්පාදනය කරන ලද ව්‍යාජ කේත JIT සම්පාදකයක් භාවිතයෙන් වැඩසටහන ක්‍රියාත්මක කරන අවස්ථාවේදී සෘජුවම යන්ත්‍ර උපදෙස් බවට පරිවර්තනය කළ හැක.

Clang 12.0 හි වැඩිදියුණු කිරීම්:

  • C++20 ප්‍රමිතියේ යෝජනා කර ඇති “විය හැකි” සහ “නොහැකි” ගුණාංග සඳහා සහය පෙරනිමියෙන් ක්‍රියාත්මක කර සක්‍රීය කර ඇති අතර, ප්‍රශස්තකරණයට කොන්දේසි සහිත ගොඩනැගීමේ සම්භාවිතාව පිළිබඳව දැනුම් දීමට ඉඩ සලසයි (උදාහරණයක් ලෙස, “[[බොහෝ විට ]] නම් (අහඹු > 0) {“).
  • AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) සහ Intel Sapphire Rapids (-march=sapphirerapids) ප්‍රොසෙසර සඳහා සහය එක් කරන ලදී.
  • x86-64 ගෘහ නිර්මාණ මට්ටම් තේරීමට "-march=x234-86-v[64]" කොඩි සඳහා සහය එක් කරන ලදී (v2 - SSE4.2, SSSE3, POPCNT සහ CMPXCHG16B දිගු ආවරණය කරයි; v3 - AVX2 සහ MOVBE; v4 - AVX-512 ) .
  • Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) සහ Fujitsu A64FX (a64fx) ප්‍රොසෙසර සඳහා සහය එක් කරන ලදී. උදාහරණයක් ලෙස, Neoverse-V1 CPU සඳහා ප්‍රශස්තිකරණය සක්‍රීය කිරීමට, ඔබට “-mcpu=neoverse-v1” සඳහන් කළ හැක.
  • AArch64 ගෘහ නිර්මාණ ශිල්පය සඳහා, "__aarch64_cas8_relax" වැනි පරමාණුක මෙහෙයුම් උපකාරක ශ්‍රිත සබල කිරීමට හෝ අබල කිරීමට නව සම්පාදක ධජ "-moutline-atomics" සහ "-mno-outline-atomics" එකතු කර ඇත. එවැනි කාර්යයන් LSE (විශාල පද්ධති දිගු) සහය තිබේද යන්න ධාවන වේලාවේදී හඳුනාගෙන ලබා දී ඇති පරමාණුක ප්‍රොසෙසර උපදෙස් භාවිතා කරයි හෝ සමමුහුර්ත කිරීම සඳහා LL/SC (Load-link/store-conditional) උපදෙස් භාවිතා කරයි.
  • පැරණි සම්බන්ධක සහ එකලස් කිරීමේ හැසිරීම් සමඟ ගැළපීම සඳහා binutils කට්ටලයේ ඉලක්කගත අනුවාදය තේරීමට "-fbinutils-version" විකල්පය එක් කරන ලදී.
  • ELF ක්‍රියාත්මක කළ හැකි ගොනු සඳහා, “-gz” ධජය නියම කර ඇති විට, zlib පුස්තකාලය භාවිතයෙන් නිදොස් කිරීමේ තොරතුරු සම්පීඩනය පෙරනිමියෙන් සක්‍රීය වේ (gz=zlib). ලැබෙන වස්තු ගොනු සම්බන්ධ කිරීම සඳහා lld හෝ GNU binutils 2.26+ අවශ්‍ය වේ. binutils හි පැරණි අනුවාද සමඟ ගැළපීම ප්‍රතිසාධනය කිරීමට, ඔබට "-gz=zlib-gnu" නියම කළ හැක.
  • 'මෙම' දර්ශකය දැන් null සහ dereferenceable(N) චෙක්පත් සමඟ සකසනු ලැබේ. ඔබට NULL අගයන් භාවිතා කිරීමට අවශ්‍ය වූ විට null නොවන ගුණාංගය ඉවත් කිරීමට, ඔබට "-fdelete-null-pointer-checks" විකල්පය භාවිතා කළ හැක.
  • Linux වේදිකාවේ, GCC හි මෙන්, AArch64 සහ PowerPC ගෘහ නිර්මාණ ශිල්පය සඳහා "-fasynchronous-unwind-tables" මාදිලිය සක්‍රීය කර ඇත.
  • "#pragma clang loop vectorize_width" හි දෛශිකකරණ ක්‍රමය තේරීම සඳහා "ස්ථාවර" (පෙරනිමි) සහ "පරිමාණය කළ හැකි" විකල්ප නියම කිරීමේ හැකියාව එක් කරන ලදී. දෛශික දිගෙන් ස්වායත්ත "පරිමාණය කළ හැකි" මාදිලිය පර්යේෂණාත්මක වන අතර පරිමාණය කළ හැකි දෛශිකකරණයට සහය වන දෘඩාංග මත භාවිතා කළ හැක.
  • Windows වේදිකාව සඳහා වැඩි දියුණු කළ සහය: Clang compiler, LLD linker සහ compiler-rt ධාවන කාල පුස්තකාල ඇතුළුව, Arm64 පද්ධති මත Windows සඳහා නිල ද්විමය එකලස් කිරීම් සකස් කර ඇත. MinGW ඉලක්ක වේදිකා සඳහා ගොඩනඟන විට, හරස් සම්පාදනය කිරීමේදී පවා .exe උපසර්ගය එකතු වේ.
  • OpenCL, OpenMP සහ CUDA සඳහා සහය සමඟ සම්බන්ධිත හැකියාවන් පුළුල් කර ඇත. OpenCL 3.0 සහ OpenCL 1.0 සඳහා සාර්ව විකල්ප තේරීමට "-cl-std=CL3.0" සහ "-cl-std=CL1.0" විකල්ප එකතු කරන ලදී. රෝග විනිශ්චය මෙවලම් පුළුල් කර ඇත.
  • සමහර x86-පාදක ප්‍රොසෙසරවල ක්‍රියාත්මක කරන ලද HRESET, UINTR, සහ AVXVNNI උපදෙස් සඳහා සහය එක් කරන ලදී.
  • x86 පද්ධති මත, "-mtune=" විකල්පය සඳහා සහය සක්‍රීය කර ඇති අතර, "-march=" අගය නොසලකා තෝරාගත් ක්ෂුද්‍ර වාස්තුවිද්‍යාත්මක ප්‍රශස්තකරණයන් සක්‍රීය කරයි.
  • ස්ථිතික විශ්ලේෂකය සමහර POSIX ශ්‍රිතවල සැකසුම් වැඩිදියුණු කර ඇති අතර සංසන්දනය කිරීමේදී සංකේතාත්මක අගයන් කිහිපයක් ඇති විට කොන්දේසි සහිත මෙහෙයුම්වල ප්‍රතිඵලය සැලකිය යුතු ලෙස වැඩිදියුණු කර ඇත. නව චෙක්පත් එකතු කර ඇත: fuchia.HandleChecker (ව්‍යුහය තුළ හැසිරවීම් නිර්වචනය කරයි), webkit.UncountedLambdaCapturesChecker webkit සහ alpha.webkit.UncountedLocalVarsChecker (WebKit එන්ජින් කේතයේ පොයින්ටර් සමඟ වැඩ කිරීමේ විශේෂතා සැලකිල්ලට ගනී).
  • නියතවල සන්දර්භය තුළ භාවිතා කරන ප්‍රකාශනවල, ගොඩනඟන ලද ශ්‍රිත භාවිතා කිරීම __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bs__pd, reverse, __bit_bs__prq, reverse, wap64, __ bswapq සඳහා අවසර ඇත , _castf*, __rol* සහ __ror*.
  • හඳුනාගැනීම්, තීරු සහ ක්ෂේත්‍ර නිර්වචන වටා ඇති පරතරය තෝරාගැනීම සඳහා clang-ආකෘති උපයෝගීතාවයට BitFieldColonSpacing විකල්පයක් එක් කරන ලදී.
  • Linux වේදිකාවේ ඇති clangd caching server (Clang Server) දිගු කාලීන ක්‍රියාකාරිත්වය අතරතුර මතක පරිභෝජනය සැලකිය යුතු ලෙස අඩු කර ඇත (මෙහෙයුම් පද්ධතියට නොමිලේ මතක පිටු ලබා දීම සඳහා malloc_trim වෙත වරින් වර ඇමතුම් ලබා දෙනු ලැබේ).

LLVM 12.0 හි ප්‍රධාන නවෝත්පාදන:

  • Python හි ලියා ඇති llvm-build ගොඩනැගීමේ මෙවලම සඳහා වන සහාය නවතා දමා ඇති අතර, ඒ වෙනුවට ව්‍යාපෘතිය CMake ගොඩනැගීමේ පද්ධතිය භාවිතා කිරීමට සම්පූර්ණයෙන්ම මාරු වී ඇත.
  • AArch64 ගෘහ නිර්මාණ ශිල්පය සඳහා පසුබිම තුළ, Windows වේදිකාව සඳහා සහය වැඩි දියුණු කර ඇත: ඉලක්කගත වින්ඩෝස් පද්ධති සඳහා නිවැරදි එකලස් කිරීමේ ප්‍රතිදානය සහතික කර ඇත, ඇමතුම් විසන්ධි කිරීම පිළිබඳ දත්ත උත්පාදනය ප්‍රශස්ත කර ඇත (එවැනි දත්තවල ප්‍රමාණය 60 කින් අඩු කර ඇත. %), Assembler භාවිතයෙන් දත්ත ඉවත් කිරීමේ හැකියාව විධාන .seh_* එකතු කර ඇත.
  • PowerPC ගෘහ නිර්මාණ ශිල්පය සඳහා වූ පසුතලය ලූප සහ පේළිගත යෙදවීම සඳහා නව ප්‍රශස්තකරණයන්, Power10 ප්‍රොසෙසර සඳහා පුළුල් සහය, matrix හැසිරවීම සඳහා MMA උපදෙස් සඳහා සහය සහ AIX මෙහෙයුම් පද්ධතිය සඳහා වැඩි දියුණු කළ සහාය දක්වයි.
  • x86 පසුබිම AMD Zen 3, Intel Alder Lake සහ Intel Sapphire Rapids ප්‍රොසෙසර සඳහා සහය එක් කරයි, මෙන්ම HRESET, UINTR සහ AVXVNNI ප්‍රොසෙසර උපදෙස්. මතක සීමාවන් තවදුරටත් සහාය නොදක්වන බව සහතික කිරීම සඳහා පොයින්ටර් පරීක්ෂා කිරීම සඳහා MPX (මතක ආරක්ෂණ දිගු) සඳහා සහය (මෙම තාක්ෂණය පුළුල් ලෙස පැතිරී නොමැති අතර දැනටමත් GCC සහ clang වෙතින් ඉවත් කර ඇත). {disp32} සහ {disp8} උපසර්ග සහ .d32 සහ .d8 ප්‍රත්‍යයන් සඳහා එකලස් කරන්නාට සහය එක් කරන ලද්දේ ඔපෙරන්ඩ් ඕෆ්සෙට් සහ පැනීම් වල ප්‍රමාණය පාලනය කිරීමටය. ක්ෂුද්‍ර වාස්තු විද්‍යාත්මක ප්‍රශස්තිකරණයන් ඇතුළත් කිරීම පාලනය කිරීම සඳහා "tune-cpu" නව ගුණාංගයක් එක් කරන ලදී.
  • වමට මඳක් මාරු වීමෙන් පසු අත්සන් නොකළ පූර්ණ සංඛ්‍යා පිටාර ගැලීම් හඳුනා ගැනීමට නව මාදිලියක් “-fsanitize=unsigned-shift-base” පූර්ණ සංඛ්‍යා ගැටලු අනාවරකයට (පූර්ණ සංශුද්ධකාරකය, “-fsanitize= integer”) එක් කර ඇත.
  • විවිධ අනාවරකවල (asan, cfi, lsan, msan, tsan, ubsan sanitizer) සම්මත Musl පුස්තකාලය සමඟ Linux බෙදාහැරීම් සඳහා සහය එක් කර ඇත.
  • LLD සම්බන්ධකයේ හැකියාවන් පුළුල් කර ඇත. ELF ආකෘතිය සඳහා වැඩි දියුණු කරන ලද සහය, එකතු කළ විකල්ප "--ඩිපෙන්ඩන්සි-ෆයිල්", "-දෝෂය-හැසිරවීම-ස්ක්‍රිප්ට්", "-lto-pseudo-probe-for-profiling", "-no-lto-whole-program - දෘශ්‍යතාව" " වැඩිදියුණු කළ MinGW සහාය. Mach-O ආකෘතිය (macOS) සඳහා, arm64, arm, සහ i386 ගෘහනිර්මාණ සඳහා සහය, සම්බන්ධක-කාල ප්‍රශස්තිකරණය (LTO) සහ ව්‍යතිරේක හැසිරවීම සඳහා ගොඩබෑම ක්‍රියාත්මක කර ඇත.
  • Libc++ C++20 ප්‍රමිතියේ නව විශේෂාංග ක්‍රියාත්මක කරන අතර C++2b පිරිවිතරයේ විශේෂාංග සංවර්ධනය කිරීම ආරම්භ කර ඇත. අක්‍රීය කරන ප්‍රාදේශීයකරණ සහාය (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) සහ ව්‍යාජ-අහඹු අංක ජනනය කිරීම සඳහා උපාංග (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”) සමඟ ගොඩනැගීම සඳහා සහය එක් කරන ලදී.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න