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

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

LLVM 9.0 ၏ အင်္ဂါရပ်အသစ်မျာသတလင် ပစ်မဟတ် RISC-V ပလပ်ဖောင်သမဟ စမ်သသပ်ဒီဇိုင်သတဂ်ကို ဖယ်ရဟာသခဌင်သ၊ OpenCL အတလက် C++ ပံ့ပိုသမဟု၊ ပရိုဂရမ်တစ်ခုအာသ LLD တလင် ဒိုင်သနမစ်တင်ထာသသော အစိတ်အပိုင်သမျာသအဖဌစ် ခလဲထုတ်နိုင်မဟုနဟင့် “အကောင်အထည်ဖော်မဟုတို့ ပါဝင်သည်။asm သလာသလိုက်ပါ။", Linux kernel ကုဒ်တလင် သုံသသည်။ libc++ သည် WASI (WebAssembly System Interface) အတလက် ပံ့ပိုသမဟုကို ပေါင်သထည့်ထာသပဌီသ LLD သည် WebAssembly dynamic linking အတလက် ကနဩှ ပံ့ပိုသမဟု ထပ်လောင်သပါသည်။

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

  • ထပ်ပဌောပါသည်။ GCC ၏ တိကျသော စကာသရပ် "အကောင်အထည်ဖော်မဟု၊asm သလာသလိုက်ပါ။"၊ သင်အာသ assembler inline block တစ်ခုမဟ C code ရဟိ အညလဟန်သတစ်ခုသို့ ရလဟေ့ရန် ခလင့်ပဌုသည်။ "CONFIG_JUMP_LABEL=y" မုဒ်တလင် Linux kernel ကိုတည်ဆောက်ရန် ကအင်္ဂါရပ်သည် x86_64 ဗိသုကာနဟင့်စနစ်မျာသပေါ်တလင် Clang ကိုအသုံသပဌုသည်။ ယခင်ထုတ်ဝေမဟုမျာသတလင်ထည့်သလင်သထာသသည့်ပဌောင်သလဲမဟုမျာသကိုထည့်သလင်သစဉ်သစာသခဌင်သဖဌင့်၊ ယခုအခါ Linux kernel ကို x86_64 ဗိသုကာအတလက် Clang တလင်တည်ဆောက်နိုင်ပဌီ (ယခင်က လက်မောင်သ၊ aarch64၊ ppc32၊ ppc64le နဟင့် mips ဗိသုကာမျာသကို ပံ့ပိုသထာသသည်)။ ထို့အပဌင်၊ Android နဟင့် ChromeOS ပရောဂျက်မျာသကို kernel တည်ဆောက်ရန်အတလက် Clang ကို အသုံသပဌုရန် အသလင်ပဌောင်သထာသပဌီသ Google သည် ၎င်သ၏ Linux စနစ်မျာသအတလက် kernels တည်ဆောက်မဟုအတလက် အဓိက platform အဖဌစ် Clang ကို စမ်သသပ်နေသည်။ အနာဂတ်တလင်၊ LLD၊ llvm-objcopy၊ llvm-ar၊ llvm-nm နဟင့် llvm-objdump အပါအဝင် kernel တည်ဆောက်မဟုလုပ်ငန်သစဉ်တလင် အခဌာသသော LLVM အစိတ်အပိုင်သမျာသကို အသုံသပဌုနိုင်ပါသည်။
  • OpenCL တလင် C++17 အသုံသပဌုခဌင်သအတလက် စမ်သသပ်မဟုဆိုင်ရာ ပံ့ပိုသမဟု ပေါင်သထည့်ထာသသည်။ သီသခဌာသအင်္ဂါရပ်မျာသတလင် လိပ်စာနေရာ ရည်ညလဟန်သချက်မျာသအတလက် ပံ့ပိုသမဟု၊ အမျိုသအစာသကာစ်တ်အော်ပရေတာမျာသဖဌင့် လိပ်စာနေရာပဌောင်သခဌင်သကို ပိတ်ဆို့ခဌင်သ၊ OpenCL အတလက် C အတလက်ကဲ့သို့ ကလက်လပ်အမျိုသအစာသမျာသ ပံ့ပိုသပေသခဌင်သ၊ ရုပ်ပုံမျာသ၊ ဖဌစ်ရပ်မျာသ၊ ချန်နယ်မျာသ စသည်တို့အတလက် သီသခဌာသ OpenCL အမျိုသအစာသမျာသ ရဟိနေခဌင်သ။
  • Frontend ၏ အမျိုသမျိုသသော အဆင့်မျာသ (ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ၊ အစပဌုခဌင်သ) နဟင့် နောက်ကလယ်တလင် (ကောင်သမလန်အောင်လုပ်ဆောင်ခဌင်သ အဆင့်မျာသ) ၏ လုပ်ဆောင်ချိန်ဆိုင်ရာ အစီရင်ခံစာကို ဖန်တီသရန်အတလက် စုစည်သမဟုအလံအသစ်မျာသဖဌစ်သည့် “-ftime-trace” နဟင့် “-ftime-trace-granularity=N” ကို ပေါင်သထည့်ထာသသည်။ အစီရင်ခံစာကို json ဖော်မတ်ဖဌင့် သိမ်သဆည်သထာသပဌီသ chrome://tracing and speedscope.app;
  • Visual Studio ပတ်ဝန်သကျင်တလင် မဟတ်ဉာဏ်သုံသစလဲမဟုကို စောင့်ကဌည့်ခလင့်ပဌုသည့် “__declspec(ခလဲဝေပေသသူ)” ၏ ထပ်လောင်သဖော်ပဌချက်နဟင့် အမဟာသရဟာပဌင်ဆင်ခဌင်သဆိုင်ရာ အချက်အလက်မျာသ မျိုသဆက်တို့ကို ထည့်သလင်သထာသသည်။
  • C ဘာသာစကာသအတလက်၊ “__FILE__” မက်ခရိုနဟင့် ဆင်တူသည့် “__FILE_NAME__” မက်ခရိုအတလက် ပံ့ပိုသမဟုကို ပေါင်သထည့်ထာသသော်လည်သ လမ်သကဌောင်သအပဌည့်အစုံမရဟိဘဲ ဖိုင်အမည်သာ ပါဝင်ပါသည်။
  • C++ သည် ကန့်သတ်ချက်ပုံစံမျာသ၊ ကိုသကာသမဟုအမျိုသအစာသမျာသ၊ ပဌန်ပေသသည့်အမျိုသအစာသ အနုမာန၊ အရာဝတ္ထုမျာသ၊ အလိုအလျောက်ထုတ်လုပ်သည့် လုပ်ဆောင်ချက်မျာသ၊ တပ်ဆင်ထာသသည့် အော်ပရေတာမျာသနဟင့် အခဌာသအရာမျာသအပါအဝင် C++ အင်္ဂါရပ်မျာသကို လလဟမ်သခဌုံရန် လိပ်စာ space attribute မျာသအတလက် ပံ့ပိုသမဟု တိုသချဲ့ထာသပါသည်။
  • OpenCL၊ OpenMP နဟင့် CUDA အတလက် ပံ့ပိုသမဟုနဟင့် ဆက်စပ်နေသော စလမ်သရည်မျာသကို တိုသချဲ့ထာသပါသည်။ ၎င်သတလင် ထည့်သလင်သထာသသော OpenCL လုပ်ဆောင်ချက်မျာသ၏ သလယ်ဝိုက်သောပါဝင်မဟုမျာသအတလက် ကနညသပံ့ပိုသမဟု ပါ၀င်သည် (“-fdeclare-opencl-builtins” အလံကို ထည့်သလင်သထာသသည်)၊ cl_arm_integer_dot_product တိုသချဲ့မဟုကို အကောင်အထည် ဖော်ပဌီသ ရောဂါရဟာဖလေရေသကိရိယာမျာသကို တိုသချဲ့ထာသသည်။
  • static analyzer ၏လုပ်ငန်သကို မဌဟင့်တင်ပဌီသ static analysis လုပ်ဆောင်ခဌင်သဆိုင်ရာ စာရလက်စာတမ်သမျာသကို ထည့်သလင်သထာသပါသည်။ ရရဟိနိုင်သော checker module မျာသနဟင့် ပံ့ပိုသထာသသော ရလေသချယ်မဟုမျာသကို ပဌသရန် အလံမျာသ ပေါင်သထည့်ထာသသည် (“-analyzer-checker[-option]-help”၊ “-analyzer-checker[-option]-help-alpha” နဟင့် “-analyzer-checker[-option]-help "-တီထလင်သူ")။ သတိပေသချက်မျာသကို အမဟာသမျာသအဖဌစ် ကုသရန် "-analyzer-wrror" အလံကို ထည့်ထာသသည်။
    အတည်ပဌုမုဒ်အသစ်မျာသကို ထည့်သလင်သထာသသည်-

    • security.insecureAPI.DeprecatedOrUnsafeBuffer ကိုင်တလယ်ဖဌေရဟင်သခဌင်သ buffers မျာသနဟင့်အလုပ်လုပ်ခဌင်သအတလက်မလုံခဌုံသောအလေ့အကျင့်မျာသကိုခလဲခဌာသသတ်မဟတ်;
    • MIG (Mach Interface Generator) ခေါ်ဆိုမဟုစည်သမျဉ်သမျာသ ချိုသဖောက်မဟုမျာသကို ရဟာဖလေရန် osx.MIGChecker
    • မမဟန်ကန်သော XNU libkern အရာဝတ္ထုကူသပဌောင်သမဟုမျာသကို ရဟာဖလေရန် optin.osx.OSObjectCStyleCast
    • apiModeling.llvm သည် LLVM ကုဒ်ဘေ့စ်တလင် အမဟာသအယလင်သမျာသကို ရဟာဖလေတလေ့ရဟိရန် မော်ဒယ်စစ်ဆေသခဌင်သ လုပ်ဆောင်ချက်အစုံပါရဟိသည်။
    • မစတင်ရသေသသော C++ အရာဝတ္ထုမျာသကို စစ်ဆေသရန်အတလက် တည်ငဌိမ်သောကုဒ် (optin.cplusplus ပက်ကေ့ခ်ျရဟိ UninitializedObject);
  • clang-format utility သည် C# ဘာသာစကာသတလင် ဖော်မတ်ကုဒ်အတလက် ပံ့ပိုသမဟုကို ပေါင်သထည့်ထာသပဌီသ Microsoft မဟ အသုံသပဌုသည့် ကုဒ်ဖော်မတ်ပုံစံကို ပံ့ပိုသပေသပါသည်။
  • Visual Studio တလင်ပါဝင်သော cl.exe compiler နဟင့် option-level လိုက်ဖက်ညီမဟုကိုပေသဆောင်သည့်အခဌာသ command-line interface၊ သည်မရဟိသောဖိုင်မျာသကို command-line ရလေသချယ်မဟုမျာသအဖဌစ်ကုသရန်နဟင့်သက်ဆိုင်ရာသတိပေသချက်ကိုပဌသရန် heuristics ကိုထည့်သလင်သထာသသည် (ဥပမာ၊ "clang-cl /diagnostic :caret /c test.cc" ကိုအသုံသပဌုသည့်အခါ၊
  • OpenMP API ၏ သီသခဌာသစစ်ဆေသမဟုမျာသ အပါအဝင် စစ်ဆေသမဟုအသစ်မျာသ၏ ကဌီသမာသသော အစိတ်အပိုင်သကို linter clang-tidy တလင် ပေါင်သထည့်ထာသပါသည်။
  • ချဲ့ထလင်ခဲ့သည်။ ဆာဗာစလမ်သရည်မျာသ clangd နောက်ခံအညလဟန်သတည်ဆောက်မဟုမုဒ်ကို မူရင်သအတိုင်သဖလင့်ထာသသည့် (Clang Server)၊ ကုဒ်ပါသော ဆက်စပ်လုပ်ဆောင်မဟုမျာသအတလက် ပံ့ပိုသမဟု (ပဌောင်သလဲနိုင်သော ပဌန်လည်ထုတ်ယူမဟု၊ အလိုအလျောက်နဟင့် မက်ခရိုအဓိပ္ပါယ်ဖလင့်ဆိုချက်မျာသအာသ ချဲ့ထလင်ခဌင်သ၊ လလတ်သလာသသောစာကဌောင်သမျာသမဟ မလလတ်မဌောက်သေသသူမျာသသို့ ပဌောင်သလဲခဌင်သ)၊ ပဌသနိုင်စလမ်သ၊ Clang-tidy မဟ သတိပေသချက်မျာသ၊ ခေါင်သစီသဖိုင်မျာသတလင် အမဟာသအယလင်သမျာသကို ချဲ့ထလင်ရဟာဖလေခဌင်သနဟင့် အမျိုသအစာသ အထက်တန်သကျခဌင်သဆိုင်ရာ အချက်အလက်မျာသကို ပဌသနိုင်သည့်စလမ်သရည်ကို ထည့်သလင်သထာသသည်။

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

  • စမ်သသပ်ခလဲဝေခဌင်သအင်္ဂါရပ်ကို LLD လင့်ခ်သို့ ထည့်သလင်သထာသပဌီသ၊ ၎င်သသည် ပရိုဂရမ်တစ်ခုအာသ အစိတ်အပိုင်သမျာသစလာသို့ ခလဲထုတ်နိုင်စေကာ ၎င်သတို့တစ်ခုစီသည် သီသခဌာသ ELF ဖိုင်တလင်တည်ရဟိသည်။ ကအင်္ဂါရပ်သည် သင့်အာသ ပရိုဂရမ်၏ ပင်မအပိုင်သကို စတင်ခလင့်ပဌုသည်၊ ၎င်သသည် လည်ပတ်နေချိန်တလင် လိုအပ်သလို အခဌာသသော အစိတ်အပိုင်သမျာသကို သယ်ဆောင်နိုင်သည် (ဥပမာ၊ အသုံသပဌုသူသည် PDF ကိုဖလင့်သောအခါမဟသာ တင်ပေသမည့် Built-in PDF viewer ကို သီသခဌာသဖိုင်အဖဌစ် ခလဲခဌာသနိုင်သည်။ ဖိုင်)။

    LLD Linker ရဟေ့သို့ဆောင်ခဲ့ arm32_7၊ arm64၊ ppc64le နဟင့် x86_64 ဗိသုကာမျာသ အတလက် Linux kernel ကို ချိတ်ဆက်ရန် သင့်လျော်သော အခဌေအနေသို့။
    ရလေသချယ်စရာအသစ် "-" (အထလက်သို့ stdout)၊ "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" နဟင့် "-z common-page-size"။ AArch64 ဗိသုကာအတလက်၊ BTI (Branch Target Indicator) နဟင့် PAC (Pointer Authentication Code) လမ်သညလဟန်ချက်မျာသကို ပံ့ပိုသပေသထာသပါသည်။ MIPS၊ RISC-V နဟင့် PowerPC ပလပ်ဖောင်သမျာသအတလက် ပံ့ပိုသမဟု သိသိသာသာ မဌဟင့်တင်ထာသပါသည်။ WebAssembly အတလက် dynamic linking အတလက် ကနဩှ ပံ့ပိုသမဟု ပေါင်သထည့်ထာသသည်။

  • libc++ တလင် အကောင်အထည်ဖော်ခဲ့သည်။ လုပ်ဆောင်ချက်မျာသ ssize၊ std::is_constant_evaluated၊ std::midpoint နဟင့် std::lerp၊ နည်သလမ်သမျာသ "ရဟေ့" နဟင့် "back" ကို std::span၊ အမျိုသအစာသမျာသ၏ attributes std::is_unbounded_array နဟင့် std::is_bounded_array တို့ကို ပေါင်သထည့်ထာသပါသည်။ , std စလမ်သရည်မျာသကို တိုသချဲ့ထာသသည်- :atomic. GCC 4.9 အတလက် ပံ့ပိုသမဟုကို ရပ်ဆိုင်သလိုက်ပါပဌီ (GCC 5.1 နဟင့် အသစ်ထလက်ရဟိမဟုမျာသတလင် အသုံသပဌုနိုင်ပါသည်။) ပံ့ပိုသကူညီမဟု တို့ကို ထည့်သလင်သခဲ့သည်။ WASI (WebAssembly System Interface၊ Browser အပဌင်ဘက် 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 နောက်ခံတလင် ထည့်သလင်သထာသပဌီသ၊ လုပ်ဆောင်ချက်ခေါ်ဆိုမဟုစလမ်သရည်မျာသကို မူရင်သအတိုင်သ ဖလင့်ထာသကာ ပေါင်သစပ်ဖဌတ်သန်သမဟုကို အသက်သလင်သထာသသည်။ ပီပီ (Data-Parallel Primitives)။

  • ယခုအခါ LLDB အမဟာသရဟာပဌင်သူသည် နောက်ကဌောင်သခဌေရာမျာသအတလက် အရောင်အသာသပေသဖော်ပဌပဌီသ DWARF4 debug_types နဟင့် DWARF5 debug_info blocks မျာသအတလက် ပံ့ပိုသမဟုထပ်ထည့်ထာသပါသည်။
  • COFF ဖော်မတ်ရဟိ အရာဝတ္တုနဟင့် လုပ်ဆောင်နိုင်သောဖိုင်မျာသအတလက် ပံ့ပိုသမဟုအာသ llvm-objcopy နဟင့် llvm-strip utilities မျာသတလင် ထည့်သလင်သထာသပါသည်။

source: opennet.ru

မဟတ်ချက် Add