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

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

LLVM 9.0 හි නව විශේෂාංග අතර ඉලක්කගත RISC-V වේදිකාවෙන් පර්යේෂණාත්මක සැලසුම් ටැගය ඉවත් කිරීම, OpenCL සඳහා C++ සහය, LLD හි ගතිකව පටවන ලද කොටස් වලට වැඩසටහනක් බෙදීමේ හැකියාව සහ "asm goto", ලිනක්ස් කර්නල් කේතයේ භාවිතා වේ. libc++ WASI (WebAssembly පද්ධති අතුරුමුහුණත) සඳහා සහය එක් කළ අතර, WebAssembly ගතික සම්බන්ධ කිරීම සඳහා LLD මූලික සහාය එක් කළේය.

වැඩිදියුණු කිරීම් ක්ලැන්ග් 9.0 හි:

  • එකතු කරන ලදී GCC-විශේෂිත ප්රකාශනය ක්රියාත්මක කිරීම "asm goto“, එය ඔබට එකලස් කිරීමේ පේළිගත කොටසක සිට C කේතයේ ලේබලයකට යාමට ඉඩ සලසයි. x86_64 ගෘහ නිර්මාණ ශිල්පය සහිත පද්ධති මත ක්ලැන්ග් භාවිතයෙන් “CONFIG_JUMP_LABEL=y” මාදිලියේ ලිනක්ස් කර්නලය තැනීමට මෙම විශේෂාංගය අවශ්‍ය වේ. පෙර නිකුතු වල එකතු කරන ලද වෙනස්කම් සැලකිල්ලට ගනිමින්, Linux කර්නලය දැන් x86_64 ගෘහ නිර්මාණ ශිල්පය සඳහා Clang හි ගොඩනගා ගත හැකිය (පෙර අත සඳහා පමණක් ගොඩනැගීම, aarch64, ppc32, ppc64le සහ mips architectures සඳහා සහය විය). එපමනක් නොව, Android සහ ChromeOS ව්‍යාපෘති දැනටමත් කර්නල් ගොඩනැගීම සඳහා Clang භාවිතා කිරීමට පරිවර්තනය කර ඇති අතර Google එහි නිෂ්පාදන Linux පද්ධති සඳහා කර්නල් තැනීමේ ප්‍රධාන වේදිකාව ලෙස Clang පරීක්ෂා කරයි. අනාගතයේදී, LLD, llvm-objcopy, llvm-ar, llvm-nm, සහ llvm-objdump ඇතුළුව අනෙකුත් LLVM සංරචක කර්නල් ගොඩනැගීමේ ක්‍රියාවලියේදී භාවිතා කළ හැක;
  • OpenCL හි C++17 භාවිතා කිරීම සඳහා පර්යේෂණාත්මක සහය එක් කරන ලදී. විශේෂිත විශේෂාංග අතර ලිපින අවකාශ ගුණාංග සඳහා සහය, වර්ග වාත්තු ක්‍රියාකරුවන් විසින් ලිපින අවකාශය පරිවර්තනය අවහිර කිරීම, C සඳහා OpenCL හි මෙන් දෛශික වර්ග සැපයීම, පින්තූර, සිදුවීම්, නාලිකා ආදිය සඳහා විශේෂිත OpenCL වර්ග තිබීම ඇතුළත් වේ.
  • ඉදිරිපස (විග්‍රහ කිරීම, ආරම්භ කිරීම) සහ පසු අන්තයේ (ප්‍රශස්තිකරණ අදියර) විවිධ අදියරවල ක්‍රියාත්මක කිරීමේ කාලය පිළිබඳ වාර්තාවක් ජනනය කිරීම සඳහා “-ftime-trace” සහ “-ftime-trace-granularity=N” නව සම්පාදක ධජ එකතු කරන ලදී. වාර්තාව json ආකෘතියෙන් සුරකින අතර, chrome://tracing සහ speedscope.app සමඟ අනුකූල වේ;
  • විෂුවල් ස්ටූඩියෝ පරිසරය තුළ මතක පරිභෝජනය නිරීක්ෂණය කිරීමට ඔබට ඉඩ සලසන “__declspec(alocator)” විශේෂණය සහ ඒ සමඟ ඇති දෝෂහරණ තොරතුරු උත්පාදනය එකතු කරන ලදි;
  • C භාෂාව සඳහා, “__FILE_NAME__” මැක්‍රෝ සඳහා සහය එක් කර ඇත, එය “__FILE__” සාර්වයට සමාන වන නමුත් සම්පූර්ණ මාර්ගයෙන් තොරව ගොනු නාමය පමණක් ඇතුළත් වේ;
  • C++ පරාමිති සහ තර්ක රටා, විමර්ශන වර්ග, ප්‍රතිලාභ ආකාරයේ අනුමාන, වස්තු, ස්වයංක්‍රීය-උත්පාදිත ශ්‍රිත, බිල්ට් ක්‍රියාකරුවන් සහ තවත් බොහෝ දේ ඇතුළුව විවිධ C++ විශේෂාංග ආවරණය කිරීම සඳහා ලිපින අවකාශ ගුණාංග සඳහා පුළුල් සහය ලබා දී ඇත.
  • OpenCL, OpenMP සහ CUDA සඳහා සහය සමඟ සම්බන්ධිත හැකියාවන් පුළුල් කර ඇත. මෙහි අන්තර්ගත OpenCL ශ්‍රිතයන් ව්‍යංග ඇතුළත් කිරීම සඳහා මූලික සහාය ඇතුළත් වේ ("-fdeclare-opencl-builtins" ධජය එකතු කර ඇත), cl_arm_integer_dot_product දිගුව ක්‍රියාවට නංවා ඇත, සහ රෝග විනිශ්චය මෙවලම් පුළුල් කර ඇත;
  • ස්ථිතික විශ්ලේෂකයේ කාර්යය වැඩිදියුණු කර ඇති අතර ස්ථිතික විශ්ලේෂණය සිදු කිරීම පිළිබඳ ලියකියවිලි එකතු කර ඇත. පවතින පරීක්ෂක මොඩියුල සහ සහාය දක්වන විකල්ප සංදර්ශන කිරීමට කොඩි එකතු කරන ලදි (“-විශ්ලේෂක-පරීක්ෂක[-විකල්ප]-උදව්”, “-විශ්ලේෂක-පරීක්ෂක[-විකල්ප]-උදව්-ඇල්ෆා” සහ “-විශ්ලේෂක-පරීක්ෂක[-විකල්ප]-උදව් "-සංවර්ධක"). අනතුරු ඇඟවීම් දෝෂ ලෙස සැලකීමට "-analyzer-werror" ධජය එක් කරන ලදී.
    නව සත්‍යාපන ක්‍රම එක් කරන ලදී:

    • බෆර සමඟ වැඩ කිරීම සඳහා අනාරක්ෂිත භාවිතයන් හඳුනා ගැනීමට security.insecureAPI.DeprecatedOrUnsafeBufferHandling;
    • osx.MIGChecker MIG (Mach Interface Generator) ඇමතුම් නීති උල්ලංඝනය කිරීම් සෙවීමට;
    • වැරදි XNU libkern වස්තු පරිවර්තන සොයා ගැනීමට optin.osx.OSObjectCStyleCast;
    • apiModeling.llvm LLVM කේත පදනමේ දෝෂ හඳුනා ගැනීම සඳහා ආකෘති පිරික්සුම් කාර්යයන් සමූහයක් සමඟ;
    • ආරම්භ නොකළ C++ වස්තු පරීක්ෂා කිරීම සඳහා ස්ථාවර කේතය (optin.cplusplus පැකේජයේ UnininitializedObject);
  • clang-format utility C# භාෂාවෙන් කේතය හැඩතල ගැන්වීම සඳහා සහය එක් කර ඇති අතර Microsoft විසින් භාවිතා කරන කේත හැඩතල ගැන්වීමේ විලාසය සඳහා සහය සපයයි;
  • clang-cl, Visual Studio හි ඇතුළත් කර ඇති cl.exe සම්පාදකය සමඟ විකල්ප මට්ටමේ අනුකූලතාවයක් සපයන විකල්ප විධාන-රේඛා අතුරුමුහුණතක්, නොපවතින ගොනු විධාන රේඛා විකල්පයන් ලෙස සැලකීමට සහ අනුරූප අනතුරු ඇඟවීමක් පෙන්වීමට හියුරිස්ටික්ස් එකතු කර ඇත (උදාහරණයක් ලෙස, "clang-cl / diagnostic :caret /c test.cc" ධාවනය කරන විට);
  • OpenMP API සඳහා විශේෂිත වූ චෙක්පත් ඇතුළුව, නව චෙක්පත් වලින් විශාල කොටසක් linter clang-tidy වෙත එකතු කර ඇත;
  • පුළුල් කර ඇත සේවාදායක හැකියාවන් clangd (Clang Server), පසුබිම් දර්ශක ගොඩනැගීමේ මාදිලිය පෙරනිමියෙන් සක්‍රීය කර ඇත, කේතය සමඟ සන්දර්භීය ක්‍රියා සඳහා සහය එක් කර ඇත (විචල්‍ය ලබා ගැනීම, ස්වයංක්‍රීය සහ සාර්ව අර්ථ දැක්වීම් පුළුල් කිරීම, ගැලවී ගිය නූල් නොගැලපෙන ඒවා බවට පරිවර්තනය කිරීම), සංදර්ශන කිරීමේ හැකියාව Clang-tidy වෙතින් අනතුරු ඇඟවීම්, ශීර්ෂ ලිපිගොනු වල දෝෂ හඳුනාගැනීම් සහ වර්ග ධුරාවලිය පිළිබඳ තොරතුරු ප්‍රදර්ශනය කිරීමේ හැකියාව එක් කරන ලදී;

ප්රධාන නවෝත්පාදන LLVM 9.0:

  • LLD සම්බන්ධකය වෙත පර්යේෂණාත්මක කොටස් කිරීමේ විශේෂාංගයක් එක් කර ඇත, එමඟින් ඔබට එක් වැඩසටහනක් කොටස් කිහිපයකට බෙදීමට ඉඩ සලසයි, ඒ සෑම එකක්ම වෙනම ELF ගොනුවක පිහිටා ඇත. මෙම විශේෂාංගය මඟින් වැඩසටහනේ ප්‍රධාන කොටස දියත් කිරීමට ඉඩ සලසයි, එය ක්‍රියාත්මක වන විට අවශ්‍ය පරිදි අනෙකුත් සංරචක පූරණය කරයි (උදාහරණයක් ලෙස, ඔබට බිල්ට් PDF නරඹන්නා වෙනම ගොනුවකට වෙන් කළ හැකිය, එය පරිශීලකයා PDF විවෘත කළ විට පමණක් පූරණය වේ. ගොනුව).

    එල්එල්ඩී ලින්කර් කරළියට ගෙනාවා arm32_7, arm64, ppc64le සහ x86_64 ගෘහනිර්මාණ සඳහා ලිනක්ස් කර්නලය සම්බන්ධ කිරීමට සුදුසු තත්ත්වයකට.
    නව විකල්ප "-" (stdout වෙත ප්‍රතිදානය), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" සහ "-z common-page-size". AArch64 ගෘහ නිර්මාණ ශිල්පය සඳහා, BTI (ශාඛා ඉලක්ක දර්ශකය) සහ PAC (Pointer Authentication Code) උපදෙස් සඳහා සහය එක් කර ඇත. MIPS, RISC-V සහ PowerPC වේදිකා සඳහා සහය සැලකිය යුතු ලෙස වැඩිදියුණු කර ඇත. WebAssembly සඳහා ගතික සම්බන්ධ කිරීම සඳහා මූලික සහාය එකතු කරන ලදී;

  • libc++ හි ක්රියාත්මක කර ඇත ශ්‍රිත ssize, std::is_constant_evaluated, std::midpoint සහ std::lerp, ක්‍රම "ඉදිරිපස" සහ "පසුපස" std::span වෙත එකතු කර ඇත, std::is_unbounded_array සහ std::is_bounded_array යන වර්ගවල ගුණාංග එකතු කර ඇත. , std හැකියාවන් පුළුල් කර ඇත: :atomic. GCC 4.9 සඳහා සහය නතර කර ඇත (GCC 5.1 සහ නව නිකුතු සමඟ භාවිතා කළ හැක). සහාය එකතු කරන ලදී මම එහෙමද (WebAssembly පද්ධති අතුරුමුහුණත, බ්‍රවුසරයෙන් පිටත WebAssembly භාවිතා කිරීම සඳහා අතුරු මුහුණතක්);
  • නව ප්‍රශස්තකරණයන් එකතු කර ඇත. සමහර අවස්ථා වලදී memcmp ඇමතුම් bcmp වෙත පරිවර්තනය කිරීම සබල කර ඇත. පහළ ස්විච් කුට්ටි වෙත ළඟා විය නොහැකි හෝ උපදෙස් භාවිතා නොකරන විට පැනීමේ වගු සඳහා පරාසය පරීක්ෂා කිරීම ක්‍රියාත්මක කිරීම අතපසු කිරීම, උදාහරණයක් ලෙස, ආකාරයේ ශූන්‍යතාවයක් සහිත කාර්යයන් ඇමතීමේදී;
  • RISC-V ගෘහනිර්මාණ ශිල්පය සඳහා පසුබිම ස්ථාවර කර ඇත, එය තවදුරටත් පර්යේෂණාත්මක ලෙස ස්ථානගත කර නැති අතර පෙරනිමියෙන් ගොඩනගා ඇත. MAFDC දිගු සහිත RV32I සහ RV64I උපදෙස් කට්ටල ප්‍රභේද සඳහා සම්පූර්ණ කේත උත්පාදන සහාය සපයයි;
  • X86, AArch64, ARM, SystemZ, MIPS, AMDGPU සහ PowerPC ගෘහ නිර්මාණ ශිල්පය සඳහා පසුබිම් සඳහා බොහෝ වැඩිදියුණු කිරීම් සිදු කර ඇත. උදාහරණයක් ලෙස, ගෘහ නිර්මාණ ශිල්පය සඳහා
    AArch64 SVE2 (Scalable Vector Extension 2) සහ MTE (Memory Tagging Extensions) උපදෙස් සඳහා සහය එක් කරන ලදී; ARM පසුබිම තුළ Armv8.1-M ගෘහ නිර්මාණ ශිල්පය සහ MVE (M-Profile Vector Extension) දිගුව සඳහා සහය එක් කරන ලදී. GFX10 (Navi) ගෘහ නිර්මාණ ශිල්පය සඳහා සහය AMDGPU පසුබිමට එක් කර ඇත, ශ්‍රිත ඇමතුම් හැකියාවන් පෙරනිමියෙන් සක්‍රීය කර ඇති අතර ඒකාබද්ධ අවසර පත්‍රයක් සක්‍රිය කර ඇත. ඩී.පී.පී. (දත්ත-සමාන්තර ප්‍රාථමික).

  • LLDB නිදොස්කරණයට දැන් පසුබිම් සඳහා වර්ණ උද්දීපනය ඇති අතර DWARF4 debug_types සහ DWARF5 debug_info blocks සඳහා සහය එක් කර ඇත;
  • COFF ආකෘතියෙන් වස්තුව සහ ක්‍රියාත්මක කළ හැකි ගොනු සඳහා සහය llvm-objcopy සහ llvm-strip උපයෝගිතා වෙත එක් කර ඇත.

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

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