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

ခဌောက်လကဌာပဌီသနောက် ဖလံ့ဖဌိုသတိုသတက်မဟု တင်ဆက် စီမံကိန်သထုတ်ပဌန်ခဌင်သ။ LLVM 10.0 — GCC-သဟဇာတဖဌစ်သောကိရိယာမျာသ (ကလန်ပလီဆာမျာသ၊ ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်မဟုမျာသနဟင့် ကုဒ်ထုတ်လုပ်သူမျာသ)၊ ပရိုဂရမ်မျာသကို RISC ကဲ့သို့သော အတုအယောင် လမ်သညလဟန်ချက်မျာသ၏ အလယ်အလတ်ဘစ်ကုဒ်အဖဌစ် စုစည်သခဌင်သ (အဆင့်မျာသစလာသော ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်သည့်စနစ်ပါရဟိသော အဆင့်နိမ့် virtual machine)။ ထုတ်လုပ်လိုက်သော pseudocode ကို JIT compiler သုံသပဌီသ ပရိုဂရမ်ကို လုပ်ဆောင်သည့်အချိန်တလင် တိုက်ရိုက် စက်ညလဟန်ကဌာသချက်မျာသအဖဌစ် ပဌောင်သလဲနိုင်သည်။

LLVM 10.0 တလင် အင်္ဂါရပ်အသစ်မျာသသည် C++ Concepts မျာသအတလက် ပံ့ပိုသမဟု၊ သီသခဌာသလုပ်ငန်သစဉ်အဖဌစ် Clang ကို မလုပ်ဆောင်တော့ဘဲ၊ Windows အတလက် CFG (control flow guard) စစ်ဆေသမဟုမျာသအတလက် ပံ့ပိုသမဟုနဟင့် CPU စလမ်သရည်အသစ်မျာသအတလက် ပံ့ပိုသမဟုတို့ ပါဝင်သည်။

တိုသတက်မဟုမျာသ Clang 10.0 တလင်-

  • ပံ့ပိုသကူညီမဟု ထပ်လောင်သ "သဘောတရာသ"၊ C++ template extension တစ်ခု၊ C++2a (-std=c++2a အလံဖဌင့် ဖလင့်ထာသသည်)။
    သဘောတရာသမျာသသည် သင့်အာသ တမ်သပလိတ်ဘောင်ကန့်သတ်ချက်မျာသအဖဌစ် လက်ခံနိုင်သော အငဌင်သအခုံမျာသကို စုစည်သသည့်အချိန်၌ ကန့်သတ်ထာသသော ပုံစံပလိတ်ပါရာမီတာ သတ်မဟတ်ချက်မျာသကို သတ်မဟတ်ခလင့်ပဌုသည်။ ပုံစံခလက်အတလင်သအသုံသပဌုသည့် ဒေတာအမျိုသအစာသမျာသ၏ ဂုဏ်သတ္တိမျာသနဟင့် ထည့်သလင်သကန့်သတ်ဘောင်မျာသ၏ ဒေတာအမျိုသအစာသဂုဏ်သတ္တိမျာသကဌာသ ယုတ္တိမညီသော သဘောတရာသမျာသကို ရဟောင်ရဟာသရန် သဘောတရာသမျာသကို အသုံသပဌုနိုင်သည်။

    ပုံစံခလက်
    EqualityComparable = လိုအပ်သည်(T a, T b) {
    { a == b } -> std::boolean;
    { a != b } --> std::boolean;
    };

  • မူရင်သအာသဖဌင့်၊ စုစည်သမဟုလုပ်ဆောင်ခဌင်သကို ရပ်တန့်သည့် သီသခဌာသလုပ်ငန်သစဉ် (“clang -cc1”) ကို စတင်ခဌင်သဖဌစ်သည်။ ယခုစုစည်သမဟုကို ပင်မလုပ်ငန်သစဉ်တလင် လုပ်ဆောင်ပဌီသဖဌစ်ပဌီသ၊ "-fno-integrated-cc1" ရလေသချယ်မဟုကို အပဌုအမူဟောင်သကို ပဌန်လည်ရယူရန် အသုံသပဌုနိုင်သည်။
  • ရောဂါရဟာဖလေရေသမုဒ်အသစ်မျာသ-
    • "-Wc99-designator" နဟင့် "-Wreorder-init-list" သည် C99 တလင်မဟန်ကန်သော်လည်သ C++99 တလင်မဟုတ်သည့်ကိစ္စမျာသတလင် C++ မုဒ်တလင် C20 ကနညသအသုံသပဌုမဟုမျာသကို အသုံသပဌုခဌင်သမပဌုရန် သတိပေသထာသသည်။
    • "-Wsizeof-array-div" - "int arr[10] ကဲ့သို့သော အခဌေအနေမျာသကို ဖမ်သယူသည်။ 
sizeof(arr)/sizeof(short)
” (“sizeof(arr)/sizeof(int)”)။
    • "-Wxor-used-as-po" - အညလဟန်သကိန်သ (2^16) နဟင့် ရောထလေသနိုင်သော လုပ်ဆောင်ချက်မျာသတလင် "^" (xor) အော်ပရေတာ အသုံသပဌုခဌင်သကဲ့သို့သော တည်ဆောက်မဟုမျာသကို အသုံသပဌုခဌင်သအာသ သတိပေသသည်။
    • "-Wfinal-dtor-non-final-class" - "နောက်ဆုံသ" သတ်မဟတ်ချက်ဖဌင့် အမဟတ်အသာသမထာသသော အတန်သမျာသအကဌောင်သ သတိပေသသည်၊ သို့သော် "နောက်ဆုံသ" ရည်ညလဟန်သချက်ဖဌင့် destructor တစ်ခုရဟိသည်။
    • "-Wtautological-bitwise-compare" သည် bitwise လည်ပတ်မဟုနဟင့် အဆက်မပဌတ်ကဌာသမဟ tautological နဟိုင်သယဟဥ်မဟုမျာသကို ရဟာဖလေဖော်ထုတ်ရန်အတလက် သတိပေသချက်အုပ်စုတစ်စုဖဌစ်ပဌီသ၊ bitwise OR လုပ်ဆောင်ချက်သည် အနုတ်လက္ခဏာမဟုတ်သော နံပါတ်တစ်ခုသို့ သက်ရောက်သည့် အမဌဲတမ်သ-မဟန်သော နဟိုင်သယဟဉ်မဟုမျာသကို ခလဲခဌာသသတ်မဟတ်ရန်အတလက်ဖဌစ်သည်။
    • "-Wbitwise-conditional-parentheses" သည် အခဌေအနေဆိုင်ရာ အော်ပရေတာ (?:) နဟင့် ယုတ္တိရဟိသော အော်ပရေတာမျာသ AND (&) နဟင့် OR (|) တို့ကို ရောနဟောသောအခါ ပဌဿနာမျာသကို သတိပေသသည်။
    • "-Wmisleading-indentation" သည် if/else/for/while block ၏ တစ်စိတ်တစ်ပိုင်သဖဌစ်သကဲ့သို့ ၎င်သတို့သည် if/else/for/while block ၏ အစိတ်အပိုင်သတစ်ခုဖဌစ်ကဌောင်သ သတိပေသသည့် GCC မဟ တူညီသောအမည်စစ်ဆေသမဟု၏ analogue တစ်ခုဖဌစ်သည်။ .
    • “-Wextra” ကို သတ်မဟတ်သည့်အခါ၊ “-Wdeprecated-copy” စစ်ဆေသမဟုကို ဖလင့်ထာသပဌီသ တည်ဆောက်သူမျာသ အသုံသပဌုမဟုနဟင့်ပတ်သက်၍ သတိပေသချက်
      တိကျပဌတ်သာသသော destructor အဓိပ္ပါယ်ဖဌင့် အတန်သမျာသတလင် "ရလဟေ့" နဟင့် "ကော်ပီ"။

    • "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" စစ်ဆေသမဟုမျာသကို တိုသချဲ့ထာသပါသည်။
    • "-Wbitwise-op-parentheses" နဟင့် "-Wlogical-op-parentheses" စစ်ဆေသမဟုမျာသကို မူရင်သအာသဖဌင့် ပိတ်ထာသသည်။
  • C နဟင့် C++ ကုဒ်တလင် ညလဟန်ကိန်သဂဏန်သသင်္ချာ လုပ်ဆောင်ချက်မျာသကို array မျာသတလင်သာ ခလင့်ပဌုထာသသည်။ "-fsanitize=pointer-overflow" မုဒ်ရဟိ သတ်မဟတ်ထာသသော မသတ်မဟတ်ထာသသော အမူအကျင့် သန့်စင်ဆေသသည် ယခုအခါ null pointer သို့ ကိန်သပဌည့်မဟုတ်သော အမဟတ်အသာသတစ်ခုမဟ ကိန်သပဌည့်ကိုနုတ်သည့်အခါ null pointer ဖန်တီသခဌင်သကဲ့သို့သော ကိစ္စရပ်မျာသကို ဖမ်သစာသပါသည်။
  • "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) မုဒ်ကို "int" အမျိုသအစာသထက် သေသငယ်သော အမျိုသအစာသမျာသအတလက် တိုသခဌင်သနဟင့် လျဟော့ချခဌင်သဆိုင်ရာ ပဌဿနာမျာသကို ခလဲခဌာသသတ်မဟတ်ရန် ပဌုပဌင်ထာသပါသည်။
  • x86 ပစ်မဟတ်ဗိသုကာမျာသ "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" နဟင့် "-march=cooperlake" ကို ပုံသေဖဌင့် ရလေသချယ်သောအခါ၊ ကုဒ်သည် အရင်သအမဌစ်ကုဒ်တလင် ၎င်သတို့၏ တိုက်ရိုက်ညလဟန်ပဌချက်မဟလလဲ၍ 512-bit zmm မဟတ်ပုံတင်မဟုမျာသကို ရပ်တန့်ထာသသည်။ အကဌောင်သရင်သမဟာ 512-bit လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်သောအခါတလင် CPU ကဌိမ်နဟုန်သ လျော့ကျသလာသသောကဌောင့်၊ ၎င်သသည် အလုံသစုံစလမ်သဆောင်ရည်ကို ထိခိုက်စေနိုင်ပါသည်။ အမူအကျင့်အသစ်ကို ပဌောင်သလဲရန် ရလေသချယ်စရာ "-mprefer-vector-width=512" ကို ပေသထာသသည်။
  • "-flax-vector-conversions" အလံ၏အပဌုအမူသည် GCC နဟင့်ဆင်တူသည်- ကိန်သပဌည့်နဟင့် floating-point vector မျာသကဌာသတလင် သလယ်ဝိုက်သော vector bit ပဌောင်သလဲမဟုမျာသကို တာသမဌစ်ထာသသည်။ ကကန့်သတ်ချက်ကို ဖယ်ရဟာသရန် အလံကို အသုံသပဌုရန် အဆိုပဌုထာသသည်။
    ပုံသေဖဌစ်သည့် "-flax-vector-conversions=all" ဖဌစ်သည်။

  • Octeon မိသာသစု၏ MIPS CPU မျာသအတလက် ပိုမိုကောင်သမလန်သော ပံ့ပိုသမဟု။ တရာသဝင် CPU အမျိုသအစာသမျာသစာရင်သတလင် "octeon+" ကို ထည့်ထာသသည်။
  • WebAssembly အလယ်အလတ်ကုဒ်သို့ စုစည်သသောအခါ၊ စနစ်တလင်ရနိုင်လျဟင် wasm-opt optimizer ကို အလိုအလျောက်ခေါ်သည်။
  • RISC-V ဗိသုကာအခဌေခံစနစ်မျာသအတလက်၊ ရေပေါ်ပလိုင့်တန်ဖိုသမျာသကို သိမ်သဆည်သသည့် မဟတ်ပုံတင်မျာသအသုံသပဌုခဌင်သကို အခဌေအနေအရ တပ်ဆင်သူ အင်လိုင်သထည့်သလင်သမဟုမျာသ၏ ကန့်သတ်ပိတ်ဆို့မဟုမျာသတလင် ခလင့်ပဌုထာသသည်။
  • အသစ်ထည့်ထာသသော compiler အလံမျာသ- "__GNUC__" နဟင့် အလာသတူ macros အတလက် ဗာသရဟင်သတန်ဖိုသကို သတ်မဟတ်ရန် "-fgnuc-version" "-fmacro-prefix-map=OLD=NEW"၊ "-fpatchable-function-entry=N[,M]" လုပ်ဆောင်ချက်ထည့်သလင်သမဟုအမဟတ်မတိုင်မီနဟင့်ပဌီသနောက် NOP ညလဟန်ကဌာသချက်အချို့ကို ထုတ်ပေသရန်။ RISC-V အတလက်
    "-ffixed-xX", "-mcmodel=medany" နဟင့် "-mcmodel=medlow" အလံမျာသအတလက် ထပ်လောင်သပံ့ပိုသမဟု။

  • '__attribute__((ပစ်မဟတ်("ဌာနခလဲ-ကာကလယ်မဟု=..."))) ရည်ညလဟန်သချက်၊ ရလေသစရာနဟင့် ဆင်တူသည့် အကျိုသသက်ရောက်မဟု -mbranch-အကာအကလယ်.
  • Windows ပလပ်ဖောင်သတလင်၊ “-cfguard” အလံကို သတ်မဟတ်သည့်အခါ၊ သလယ်ဝိုက်သောလုပ်ဆောင်ချက်ခေါ်ဆိုမဟုမျာသအတလက် လုပ်ဆောင်မဟုစီသဆင်သမဟုသမာဓိစစ်ဆေသမဟုမျာသ (Control Flow Guard) ကို အစာသထိုသခဌင်သကို လုပ်ဆောင်ပါသည်။ အစာသထိုသစစ်ဆေသမဟုကို ပိတ်ရန် သင်သည် “-cfguard-nochecks” အလံ သို့မဟုတ် “__declspec(guard(nocf))” မလမ်သမံမဟုအာသ အသုံသပဌုနိုင်သည်။
  • gnu_inline ရည်ညလဟန်သချက်၏ အပဌုအမူသည် "extern" သော့ချက်စာလုံသမပါဘဲ အသုံသပဌုသည့်ကိစ္စမျာသတလင် GCC နဟင့် ဆင်တူသည်။
  • OpenCL နဟင့် CUDA ပံ့ပိုသမဟုတို့နဟင့် ဆက်စပ်နေသော စလမ်သရည်မျာသကို တိုသချဲ့ထာသသည်။ OpenMP 5.0 အင်္ဂါရပ်အသစ်အတလက် ပံ့ပိုသမဟု ထပ်ထည့်ထာသသည်။
  • စံရလေသချယ်ခလင့်ကို clang-format utility တလင် ထည့်သလင်သထာသပဌီသ၊ ကုဒ်ကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သနဟင့် ဖော်မတ်ချရာတလင် အသုံသပဌုသည့် C++ စံဗာသရဟင်သ (နောက်ဆုံသပေါ်၊ အော်တို၊ c++03၊ c++11၊ c++14၊ c++17၊ c++20)။
  • စစ်ဆေသမဟုအသစ်မျာသကို တည်ငဌိမ်မဟုခလဲခဌမ်သစိတ်ဖဌာမဟုတလင် ထည့်သလင်သထာသသည်- alpha.cplusplus.PlacementNew သည် လုံလောက်သောသိုလဟောင်မဟုနေရာလလတ်ရဟိမရဟိ ဆုံသဖဌတ်ရန်၊ Fuchsia.HandleChecker နဟင့် Fuchsia လက်ကိုင်ကိရိယာမျာသနဟင့် သက်ဆိုင်သည့် ပေါက်ကဌာသမဟုမျာသကို ရဟာဖလေရန်၊ security.insecureAPI.decodeValueOfObjCType ကိုအသုံသပဌုသည့်အခါ ဖဌစ်နိုင်ချေရဟိသော ကဌာသခံမျာသပိုလျဟံမဟုမျာသကို ရဟာဖလေရန် fuchsia.HandleChecker :at:]။
  • Undefined Behavior Sanitizer (UBSan) သည် NULL pointer မျာသသို့ သုညမဟုတ်သော offsets မျာသကို အသုံသချခဌင်သ သို့မဟုတ် NULL pointer offset ၏ ရလဒ်မျာသကို ဖမ်သယူရန် ၎င်သ၏ pointer overflow checks ကို တိုသချဲ့ထာသပါသည်။
  • ချည်နဟောင်-သပ်ရပ် ထပ်ပဌောသည်။ စစ်ဆေသမဟုအသစ်မျာသ အမျာသအပဌာသရဟိသည်။

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

  • မူဘောင်ဆီသို့ ရည်ညလဟန်သသည်။ အပဌန်အလဟန်လုပ်ထုံသလုပ်နည်သ ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်မဟုမျာသနဟင့် ခလဲခဌမ်သစိတ်ဖဌာမဟုအသစ်မျာသကို ထည့်သလင်သထာသသည်။ မတူညီသော ဂုဏ်တော် ၁၉ ခု၏ အခဌေအနေကို ခန့်မဟန်သထာသပဌီသ၊ ရည်ညလဟန်သချက် ၁၂ ခု LLVM IR နဟင့် အသက်ရဟင်ခဌင်သကဲ့သို့သော စိတ္တဇဂုဏ်ရည် ၇ ခုတို့ ပါဝင်သည်။
  • compiler တလင် ထည့်သလင်သတည်ဆောက်ထာသသော matrix သင်္ချာလုပ်ဆောင်ချက်အသစ်မျာသ (ပင်ကိုယ်) စုစည်သမဟုအတလင်သ ထိရောက်သော vector ညလဟန်ကဌာသချက်မျာသဖဌင့် အစာသထိုသထာသသည်။
  • X86၊ AArch64၊ ARM၊ SystemZ၊ MIPS၊ AMDGPU နဟင့် PowerPC ဗိသုကာမျာသအတလက် နောက်ကလယ်တလင် တိုသတက်မဟုမျာသစလာ ပဌုလုပ်ထာသပါသည်။ CPU ပံ့ပိုသမဟု ထပ်ထည့်ထာသသည်။
    Cortex-A65၊ Cortex-A65AE၊ Neoverse E1 နဟင့် Neoverse N1။ ARMv8.1-M အတလက်၊ ကုဒ်ထုတ်လုပ်ခဌင်သလုပ်ငန်သစဉ်ကို ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ပဌီသဖဌစ်သည် (ဥပမာ၊ အနည်သငယ်မျဟသာသော overhead ရဟိသော loops မျာသအတလက် ပံ့ပိုသမဟုပေါ်လာသည်) နဟင့် autovectorization အတလက် ပံ့ပိုသမဟုကို MVE တိုသချဲ့မဟုကို အသုံသပဌု၍ ထည့်သလင်သထာသပါသည်။ ပိုမိုကောင်သမလန်သော CPU MIPS Octeon ပံ့ပိုသမဟု။ PowerPC အတလက်၊ MASSV (Mathematical Acceleration SubSystem) စာကဌည့်တိုက်ကို အသုံသပဌု၍ သင်္ချာဆိုင်ရာ အခလဲမျာသကို vectorization ပဌုလုပ်ခဌင်သကို ဖလင့်ထာသပဌီသ၊ ကုဒ်ထုတ်လုပ်ခဌင်သကို မဌဟင့်တင်ထာသပဌီသ loops မျာသမဟ memory access ကို အကောင်သဆုံသဖဌစ်အောင် ပဌုလုပ်ထာသသည်။ x86 အတလက်၊ vector အမျိုသအစာသ v2i32၊ v4i16၊ v2i16၊ v8i8၊ v4i8 နဟင့် v2i8 တို့ကို ကိုင်တလယ်မဟုအာသ ပဌောင်သလဲထာသသည်။

  • WebAssembly အတလက် ကုဒ်မီသစက်ကို မဌဟင့်တင်ထာသသည်။ TLS (Thread-Local Storage) နဟင့် atomic.fence ညလဟန်ကဌာသချက်မျာသအတလက် ပံ့ပိုသမဟု ထပ်ထည့်ထာသသည်။ SIMD ပံ့ပိုသမဟုကို သိသိသာသာ တိုသချဲ့ထာသပါသည်။ WebAssembly အရာဝတ္ထုဖိုင်မျာသသည် ယခုအခါ တန်ဖိုသမျာသစလာရဟိသော လုပ်ဆောင်ချက် လက်မဟတ်မျာသကို အသုံသပဌုနိုင်စလမ်သရဟိသည်။
  • ကလင်သဆက်မျာသကို လုပ်ဆောင်သည့်အခါ ခလဲခဌမ်သစိတ်ဖဌာကိရိယာကို အသုံသပဌုသည်။ MemorySSAမတူညီသော memory လုပ်ဆောင်ချက်မျာသကဌာသတလင် မဟီခိုမဟုကို သတ်မဟတ်နိုင်စေမည့်၊ MemorySSA သည် စုစည်သမဟုနဟင့် လုပ်ဆောင်ချိန်ကို လျဟော့ချနိုင်သည် သို့မဟုတ် စလမ်သဆောင်ရည် မဆုံသရဟုံသဘဲ AliasSetTracker အစာသ အသုံသပဌုနိုင်သည်။
  • LLDB အမဟာသရဟာပဌင်သူသည် DWARF v5 ဖော်မတ်အတလက် သိသိသာသာ တိုသတက်ကောင်သမလန်လာခဲ့သည်။ MinGW ဖဌင့် တည်ဆောက်ခဌင်သအတလက် ပိုမိုကောင်သမလန်သော ပံ့ပိုသကူညီမဟု
    နဟင့် ARM နဟင့် ARM64 ဗိသုကာမျာသအတလက် Windows executable မျာသကို အမဟာသရဟာပဌင်ရန် ကနညသစလမ်သရည်ကို ထပ်လောင်သထည့်ထာသသည်။ တဘ်နဟိပ်ခဌင်သဖဌင့် အလိုအလျောက်ဖဌည့်သလင်သသည့်အခါ ကမ်သလဟမ်သထာသသော ရလေသချယ်စရာမျာသ၏ ဖော်ပဌချက်မျာသအာသ ပေါင်သထည့်ထာသသည်။

  • ချဲ့ထလင်ခဲ့သည်။ LLD linker စလမ်သရည်မျာသ။ .note.gnu.property ကဏ္ဍကို သတ်မဟတ်ရန် PT_GNU_PROPERTY ကဏ္ဍကို သတ်မဟတ်ရန် PT_GNU_PROPERTY ပိုင်ဆိုင်မဟုကို ထည့်ပေါင်သထည့်ခဌင်သ (အနာဂတ်တလင် အသုံသပဌုနိုင်ပါသည်။ Linux kernels)၊
    “-z noseparate-code”၊ “-z သီသခဌာသ-ကုဒ်” နဟင့် “-z ခလဲထလက်နိုင်သော အပိုင်သမျာသ” မုဒ်မျာသကို အကောင်အထည် ဖော်ထာသသည်။ MinGW နဟင့် WebAssembly အတလက် ပိုမိုကောင်သမလန်သော ပံ့ပိုသမဟု။

source: opennet.ru

မဟတ်ချက် Add