LLVM 12.0 compiler suite ကို ဖဌန့်ချိသည်။

ဖလံ့ဖဌိုသတိုသတက်မဟု ခဌောက်လအကဌာတလင်၊ LLVM 12.0 ပရောဂျက်ကို ထုတ်လလဟင့်ပဌသခဲ့သည် - GCC-သဟဇာတဖဌစ်သော ကိရိယာတန်ဆာပလာမျာသ (compilers၊ optimizers နဟင့် code generators) သည် ပရိုဂရမ်မျာသကို RISC ကဲ့သို့သော အလယ်အလတ်ဘစ်ကုဒ်အဖဌစ် စုစည်သထာသသော RISC ကဲ့သို့သော virtual ညလဟန်ကဌာသချက်မျာသ (အဆင့်နိမ့် virtual machine တစ်ခုပါရဟိသော၊ Multi-level optimization စနစ်)။ ထုတ်လုပ်လိုက်သော pseudocode ကို JIT compiler သုံသပဌီသ ပရိုဂရမ်ကို လုပ်ဆောင်သည့်အချိန်တလင် တိုက်ရိုက် စက်ညလဟန်ကဌာသချက်မျာသအဖဌစ် ပဌောင်သလဲနိုင်သည်။

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" ကဲ့သို့သော atomic operation helper လုပ်ဆောင်ချက်မျာသကို ဖလင့်ရန် သို့မဟုတ် ပိတ်ရန် ကလန်ပလီတာအလံအသစ် "-moutline-atomics" နဟင့် "-mno-outline-atomics" ကို ပေါင်သထည့်ထာသသည်။ အဆိုပါလုပ်ဆောင်ချက်မျာသသည် LSE (ကဌီသမာသသောစနစ်တိုသချဲ့မဟုမျာသ) ပံ့ပိုသမဟုရရဟိနိုင်သည်ရဟိမရဟိကို runtime တလင်သိရဟိနိုင်ပဌီသ ပံ့ပိုသပေသထာသသည့် အနုမဌူပရိုဆက်ဆာညလဟန်ကဌာသချက်မျာသကို အသုံသပဌုခဌင်သ သို့မဟုတ် ထပ်တူပဌုခဌင်သအတလက် LL/SC (Load-link/store-conditional) ညလဟန်ကဌာသချက်မျာသကို အသုံသပဌုခဌင်သသို့ ပဌန်ရောက်သလာသပါသည်။
  • အဟောင်သမျာသနဟင့် ချိတ်ဆက်သူနဟင့် တပ်ဆင်သူ အပဌုအမူတို့နဟင့် လိုက်ဖက်မဟုရဟိစေရန် binutils suite ၏ ပစ်မဟတ်ဗာသရဟင်သကို ရလေသချယ်ရန် "-fbinutils-ဗာသရဟင်သ" ရလေသစရာကို ပေါင်သထည့်ထာသသည်။
  • ELF စီမံဆောင်ရလက်နိုင်သော ဖိုင်မျာသအတလက်၊ "-gz" အလံကို သတ်မဟတ်သောအခါ၊ zlib စာကဌည့်တိုက်ကို အသုံသပဌု၍ အမဟာသရဟာခဌင်သ အချက်အလက်ချုံ့ခဌင်သကို မူရင်သ (gz=zlib) ဖဌင့် ဖလင့်ထာသသည်။ ရရဟိလာသော အရာဝတ္ထုဖိုင်မျာသကို ချိတ်ဆက်ခဌင်သသည် lld သို့မဟုတ် GNU binutils 2.26+ လိုအပ်သည်။ Binutils ဗာသရဟင်သအဟောင်သမျာသနဟင့် လိုက်ဖက်ညီမဟုကို ပဌန်လည်ရယူရန်၊ သင်သည် "-gz=zlib-gnu" ကို သတ်မဟတ်နိုင်သည်။
  • 'က' ညလဟန်ပဌချက်ကို ယခုအခါ nonnull နဟင့် dereferenceable(N) စစ်ဆေသမဟုမျာသဖဌင့် လုပ်ဆောင်နေပါသည်။ NULL တန်ဖိုသမျာသကို အသုံသပဌုရန်လိုအပ်သည့်အခါ nonnull attribute ကို ဖယ်ရဟာသရန် "-fdelete-null-pointer-checks" option ကို အသုံသပဌုနိုင်ပါသည်။
  • Linux ပလပ်ဖောင်သတလင်၊ "-fasynchronous-unwind-tables" မုဒ်ကို GCC တလင်ကဲ့သို့ unwind call tables မျာသထုတ်လုပ်ရန်အတလက် AArch64 နဟင့် PowerPC Architectures အတလက် ဖလင့်ထာသသည်။
  • "#pragma clang loop vectorize_width" တလင် vectorization method ကိုရလေသချယ်ရန် "fixed" (default) နဟင့် "scalable" options မျာသကို သတ်မဟတ်ပေသနိုင်သည်။ vector length နဟင့် ကင်သသော "scalable" mode သည် စမ်သသပ်ဆဲဖဌစ်ပဌီသ အရလယ်အစာသရဟိ vectorization ကို ပံ့ပိုသပေသသည့် ဟာ့ဒ်ဝဲတလင် အသုံသပဌုနိုင်ပါသည်။
  • Windows ပလပ်ဖောင်သအတလက် ပိုမိုကောင်သမလန်သောပံ့ပိုသမဟု- Arm64 စနစ်မျာသရဟိ Windows အတလက်တရာသဝင် binary စည်သဝေသမဟုမျာသကို Clang compiler၊ LLD linker နဟင့် compiler-rt runtime libraries မျာသအပါအဝင် ပဌင်ဆင်ထာသပါသည်။ MinGW ပစ်မဟတ်ပလပ်ဖောင်သမျာသအတလက် တည်ဆောက်သည့်အခါ၊ ပေါင်သကူသထည့်သည့်အခါ၌ပင် .exe suffix ကို ပေါင်သထည့်သည်။
  • OpenCL၊ OpenMP နဟင့် CUDA အတလက် ပံ့ပိုသမဟုနဟင့် ဆက်စပ်နေသော စလမ်သရည်မျာသကို တိုသချဲ့ထာသပါသည်။ OpenCL 3.0 နဟင့် OpenCL 1.0 အတလက် မက်ခရိုရလေသချယ်စရာမျာသကို ရလေသချယ်ရန် "-cl-std=CL3.0" နဟင့် "-cl-std=CL1.0" တို့ကို ထည့်သလင်သထာသသည်။ ရောဂါရဟာဖလေရေသကိရိယာမျာသကို တိုသချဲ့ထာသသည်။
  • အချို့သော x86-based ပရိုဆက်ဆာမျာသတလင် လုပ်ဆောင်ခဲ့သော HRESET၊ UINTR နဟင့် AVXVNNI ညလဟန်ကဌာသချက်မျာသအတလက် ပံ့ပိုသမဟု ထပ်ထည့်ထာသသည်။
  • x86 စနစ်မျာသတလင် "-mtune=" ရလေသချယ်မဟုအတလက် ပံ့ပိုသမဟုကို ဖလင့်ထာသသည်။ "-march= ၏တန်ဖိုသကိုမခလဲခဌာသဘဲ ရလေသချယ်ထာသသော အသေသစာသဗိသုကာဆိုင်ရာ ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်မဟုမျာသကို အသက်သလင်သပေသသော၊ “
  • static analyzer သည် အချို့သော POSIX လုပ်ဆောင်ချက်မျာသကို တိုသတက်ကောင်သမလန်စေပဌီသ နဟိုင်သယဟဉ်မဟုတလင် သင်္ကေတတန်ဖိုသမျာသစလာရဟိသောအခါ အခဌေအနေဆိုင်ရာ လုပ်ဆောင်ချက်မျာသ၏ ရလဒ်ကို သိသိသာသာ တိုသတက်စေပါသည်။ စစ်ဆေသမဟုအသစ်မျာသကို ထည့်သလင်သထာသသည်- fuchia.HandleChecker (တည်ဆောက်ပုံမျာသတလင် လက်ကိုင်မျာသကို သတ်မဟတ်သည်)၊ webkit.UncountedLambdaCapturesChecker webkit နဟင့် alpha.webkit.UncountedLocalVarsChecker (WebKit အင်ဂျင်ကုဒ်ရဟိ pointers မျာသနဟင့် လုပ်ဆောင်ခဌင်သ၏ ထူသခဌာသချက်မျာသကို ထည့်သလင်သစဉ်သစာသသည်)။
  • ကိန်သသေမျာသ၏ ဆက်စပ်မဟုတလင် အသုံသပဌုသည့် စကာသရပ်မျာသတလင် ပါ၀င်သော လုပ်ဆောင်ချက်မျာသကို အသုံသပဌုခဌင်သသည် __builtin_bitreverse*၊ __builtin_rotateleft*၊ __builtin_rotateright*၊ _mm_popcnt*၊ _bit_scan_forward၊ __bsfd၊ __bsfq _bs_q၊ _bs_w၊ ap၊ __bswapd၊ __bswap64 ကို ခလင့်ပဌုထာသသည်။ __bswapq ၊ _castf*၊ __rol* နဟင့် __ror*။
  • ခလဲခဌာသသတ်မဟတ်မဟုမျာသ၊ ကော်လံမျာသနဟင့် အကလက်အဓိပ္ပာယ်ဖလင့်ဆိုချက်မျာသအနီသရဟိ အကလာအဝေသမျာသကို ရလေသချယ်ရန် BitFieldColonSpacing ရလေသချယ်မဟုတစ်ခုကို ပေါင်သထည့်ခဲ့သည်။
  • Linux ပလပ်ဖောင်သရဟိ clangd ကက်ရဟ်ဆာဗာ (Clang Server) သည် ရေရဟည်လည်ပတ်နေစဉ်အတလင်သ မဟတ်ဉာဏ်သုံသစလဲမဟုကို သိသိသာသာ လျဟော့ချပေသသည် (အချိန်အခါအလိုက် ခေါ်ဆိုမဟုမျာသကို malloc_trim သို့ အခမဲ့မမ်မိုရီစာမျက်နဟာမျာသကို လည်ပတ်မဟုစနစ်သို့ ပဌန်ပို့ရန် ထောက်ပံ့ပေသသည်)။

LLVM 12.0 တလင် အဓိက တီထလင်ဆန်သသစ်မဟုမျာသ-

  • Python တလင်ရေသထာသသော llvm-build build tool အတလက် ပံ့ပိုသမဟုအာသ ရပ်ဆိုင်သလိုက်ပဌီသ ယင်သအစာသ ပရောဂျက်သည် CMake build system ကိုအသုံသပဌုခဌင်သသို့ လုံသဝပဌောင်သသလာသခဲ့သည်။
  • AArch64 ဗိသုကာလက်ရာအတလက် နောက်ကလယ်တလင်၊ Windows ပလပ်ဖောင်သအတလက် ပံ့ပိုသမဟုအာသ မဌဟင့်တင်ထာသသည်- ပစ်မဟတ် Windows စနစ်မျာသအတလက် မဟန်ကန်သော စုဝေသသူထုတ်ပေသသည့် မျိုသဆက်ကို သေချာစေခဲ့ပဌီသ၊ unwind calls မျာသအတလက် ဒေတာမျိုသဆက်ကို အကောင်သဆုံသဖဌစ်အောင် ပဌုလုပ်ထာသသည် (ထိုကဲ့သို့သော ဒေတာအရလယ်အစာသကို 60 လျဟော့ချထာသသည်။ %)၊ assembler ကို အသုံသပဌု၍ ဒေတာကို ဖဌုန်သတီသပစ်နိုင်စလမ်သကို .seh_* တလင် ထည့်သလင်သထာသပါသည်။
  • PowerPC ဗိသုကာအတလက် နောက်ကလယ်တလင် အကလက်မျာသနဟင့် အတလင်သပိုင်သ ဖဌန့်ကျက်ခဌင်သအတလက် ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်မဟုမျာသ၊ Power10 ပရိုဆက်ဆာမျာသအတလက် တိုသချဲ့ပံ့ပိုသမဟု၊ matrix ခဌယ်လဟယ်မဟုအတလက် MMA လမ်သညလဟန်ချက်မျာသကို ပံ့ပိုသပေသမဟုနဟင့် AIX လည်ပတ်မဟုစနစ်အတလက် ပိုမိုကောင်သမလန်သော ပံ့ပိုသမဟုတို့ပါရဟိသည်။
  • x86 နောက်ခံအစလန်သည် AMD Zen 3၊ Intel Alder Lake နဟင့် Intel Sapphire Rapids ပရိုဆက်ဆာမျာသအပဌင် HRESET၊ UINTR နဟင့် AVXVNNI ပရိုဆက်ဆာ လမ်သညလဟန်ချက်မျာသကို ပံ့ပိုသပေသပါသည်။ မဟတ်ဉာဏ်နယ်နိမိတ်မျာသကို ပံ့ပိုသပေသတော့မည် မဟုတ်ကဌောင်သ သေချာစေရန် အမဟတ်အသာသမျာသကို စစ်ဆေသခဌင်သအတလက် MPX (Memory Protection Extensions) အတလက် ပံ့ပိုသမဟု (ကနည်သပညာသည် မကျယ်ပဌန့်သေသပါ၊ GCC နဟင့် clang တို့မဟ ဖယ်ရဟာသထာသပဌီသဖဌစ်သည်)။ {disp32} နဟင့် {disp8} ရဟေ့ဆက်မျာသနဟင့် .d32 နဟင့် .d8 ၏ နောက်ဆက်တလဲမျာသအတလက် တပ်ဆင်သူအာသ ပံ့ပိုသကူညီမဟု ပေါင်သထည့်ထာသသည်။ microarchitectural optimizations မျာသပါ၀င်မဟုကို ထိန်သချုပ်ရန် ရည်ညလဟန်သချက်အသစ် "tune-cpu" ကို ထပ်ထည့်ထာသသည်။
  • ဘယ်ဘက်သို့ အနည်သငယ်ပဌောင်သပဌီသနောက် လက်မဟတ်မထိုသထာသသော ကိန်သပဌည့်မျာသ ပဌည့်လျဟံနေမဟုမျာသကို ရဟာဖလေရန် မုဒ်အသစ် “-fsanitize=unsigned-shift-base” ကို ကိန်သပဌည့်ပဌဿနာရဟာဖလေစက် (integer sanitizer၊ “-fsanitize=integer”) သို့ ပေါင်သထည့်လိုက်ပါပဌီ။
  • အမျိုသမျိုသသော detectors (asan၊ cfi၊ lsan၊ msan၊ tsan၊ ubsan sanitizer) စံ Musl စာကဌည့်တိုက်ဖဌင့် Linux ဖဌန့်ဝေမဟုမျာသကို ပံ့ပိုသပေသထာသပါသည်။
  • LLD linker ၏စလမ်သရည်မျာသကို ချဲ့ထလင်ထာသပါသည်။ ထပ်လောင်သရလေသချယ်စရာမျာသ အပါအဝင် “--မဟီခို-ဖိုင်”၊ “-အမဟာသ-ကိုင်တလယ်-စခရစ်”၊ “-lto-pseudo-probe-for-profiling”၊ “-no-lto-whole-program အပါအဝင် ELF ဖော်မတ်အတလက် ပိုမိုကောင်သမလန်သော ပံ့ပိုသမဟု - မဌင်နိုင်စလမ်သ "" ပိုမိုကောင်သမလန်သော MinGW ပံ့ပိုသမဟု။ Mach-O ဖော်မတ် (macOS) အတလက်၊ arm64၊ arm နဟင့် i386 ဗိသုကာမျာသ အတလက် ပံ့ပိုသမဟု၊ လင့်ခ်-အချိန် ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်မဟုမျာသ (LTO) နဟင့် ခဌလင်သချက် ကိုင်တလယ်မဟုအတလက် stack unwinding ကို အကောင်အထည် ဖော်ထာသသည်။
  • Libc++ သည် C++ 20 စံနဟုန်သ၏ အင်္ဂါရပ်အသစ်မျာသကို အကောင်အထည်ဖော်ပဌီသ C++ 2b သတ်မဟတ်ချက်၏ အင်္ဂါရပ်မျာသကို စတင်တီထလင်ခဲ့သည်။ ဒေသအလိုက်ပဌောင်သလဲခဌင်သ ပံ့ပိုသမဟု (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) နဟင့် pseudo-random နံပါတ်မျာသထုတ်ပေသခဌင်သအတလက် စက်ပစ္စည်သမျာသ (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”) ကိုပိတ်ထာသခဌင်သဖဌင့် တည်ဆောက်ခဌင်သအတလက် ထပ်လောင်သပံ့ပိုသမဟု။

source: opennet.ru

မဟတ်ချက် Add