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

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

ထုတ်ဝေမဟုအသစ်တလင် အဓိကပဌောင်သလဲမဟုမဟာ ပါဝင်ခဌင်သပင်ဖဌစ်သည်။ အလံမျာသFortran ဘာသာစကာသအတလက် ရဟေ့ဆုံသတန်သ။ Flang သည် Fortran 2018၊ OpenMP 4.5 နဟင့် OpenACC 3.0 ကို ပံ့ပိုသပေသသော်လည်သ ပရောဂျက်၏ ဖလံ့ဖဌိုသတိုသတက်မဟု မပဌီသပဌတ်သေသဘဲ ရဟေ့ဆုံသအပိုင်သသည် ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာခဌင်သနဟင့် မဟန်ကန်မဟုရဟိမရဟိ စစ်ဆေသခဌင်သအတလက် ကန့်သတ်ထာသသည်။ LLVM အလယ်အလတ်ကုဒ်၏ မျိုသဆက်ကို မပံ့ပိုသရသေသဘဲ စီမံလုပ်ဆောင်နိုင်သော ဖိုင်မျာသကို ထုတ်ပေသရန်အတလက်၊ Canonical ကုဒ်ကို ထုတ်ပေသပဌီသ ပဌင်ပ Fortran စုစည်သမဟုသို့ ပေသပို့ပါသည်။

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

  • abstract syntax tree ကို ပဌန်ယူနိုင်တဲ့ စလမ်သရည်ကို ပေါင်သထည့်ထာသပါတယ် (AST) ပျက်စီသနေသော C++ ကုဒ်အတလက် အမဟာသအယလင်သမျာသကို ရဟာဖလေဖော်ထုတ်ရာတလင် ကူညီရန်နဟင့် clang-tidy နဟင့် clangd ကဲ့သို့သော ပဌင်ပအသုံသအဆောင်မျာသအတလက် အပိုအချက်အလက်မျာသကို ပေသဆောင်နိုင်သည်။ အင်္ဂါရပ်ကို C++ ကုဒ်အတလက် မူရင်သအာသဖဌင့် ဖလင့်ထာသပဌီသ "-Xclang -f[no-]recovery-ast" ရလေသချယ်မဟုမျာသမဟတဆင့် ထိန်သချုပ်ထာသသည်။
  • ရောဂါရဟာဖလေရေသမုဒ်အသစ်မျာသကို ထည့်သလင်သထာသသည်-
    • “-Wpointer-to-int-cast” သည် ဖဌစ်နိုင်ချေတန်ဖိုသမျာသအာသလုံသကို လိုက်လျောညီထလေမဖဌစ်နိုင်သော ကိန်သပဌည့်အမျိုသအစာသ int သို့ ညလဟန်ပဌချက်မျာသအာသ ညလဟန်ပဌခဌင်သအကဌောင်သ သတိပေသချက်အုပ်စုတစ်စုဖဌစ်သည်။
    • "-wuninitialized-const-reference" - "const" ရည်ညလဟန်သချက်ဖဌင့် အကိုသအကာသမျာသကို လက်ခံသည့် function parameters မျာသတလင် uninitialized variables မျာသဖဌတ်သန်သခဌင်သအကဌောင်သ သတိပေသချက်။
    • "-Wimplicit-const-int-float-conversion" - ကိန်သပဌည့်အမျိုသအစာသသို့ အမဟန်တကယ် ကိန်သသေတစ်ခုသို့ သလယ်ဝိုက်သောနည်သဖဌင့် ပဌောင်သလဲခဌင်သအကဌောင်သ မူရင်သသတိပေသချက်ဖဌင့် ဖလင့်ထာသသည်။
  • ARM ပလပ်ဖောင်သအတလက်၊ compiler တလင်တည်ဆောက်ထာသသော C လုပ်ဆောင်ချက်မျာသကို ပေသသည် (ပင်ကိုယ်) ၊ ထိရောက်သော vector ညလဟန်ကဌာသချက် Arm v8.1-M MVE နဟင့် CDE ဖဌင့် အစာသထိုသသည်။ ရနိုင်သောလုပ်ဆောင်ချက်မျာသကို header files arm_mve.h နဟင့် arm_cde.h တလင် သတ်မဟတ်ထာသပါသည်။
  • ထပ်ပဌောပါသည်။ တိုသချဲ့ကိန်သပဌည့်အမျိုသအစာသမျာသ _ExtInt(N) သည် သင့်အာသ FPGA/HLS တလင် ထိရောက်စလာ လုပ်ဆောင်နိုင်သည့် ပါဝါနဟစ်ခု၏ အမဌဟောက်မျာသမဟုတ်သော အမျိုသအစာသမျာသကို ဖန်တီသခလင့်ပဌုသည်။ ဥပမာအာသ, _ExtInt(7) သည် 7 bits ပါဝင်သော ကိန်သပဌည့်အမျိုသအစာသကို သတ်မဟတ်သည်။
  • ARM SVE (Scalable Vector Extension) လမ်သညလဟန်ချက်မျာသအပေါ် အခဌေခံ၍ Built-in C လုပ်ဆောင်ချက်မျာသအတလက် ပံ့ပိုသမဟုကို သတ်မဟတ်ပေသသည့် မက်ခရိုမျာသ-
    __ARM_FEATURE_SVE၊ __ARM_FEATURE_SVE_BF16၊
    __ARM_FEATURE_SVE_MATMUL_FP32၊ __ARM_FEATURE_SVE_MATMUL_FP64၊
    __ARM_FEATURE_SVE_MATMUL_INT8၊
    __ARM_FEATURE_SVE2၊ __ARM_FEATURE_SVE2_AES၊
    __ARM_FEATURE_SVE2_BITPERM၊
    __ARM_FEATURE_SVE2_SHA3၊
    __ARM_FEATURE_SVE2_SM4။ ဥပမာအာသဖဌင့်၊ command line option "-march=armv64-a+sve" ကို သတ်မဟတ်ခဌင်သဖဌင့် AArch8 ကုဒ်ကိုထုတ်ပေသသောအခါ __ARM_FEATURE_SVE မက်ခရိုကို သတ်မဟတ်သည်။

  • "-O" အလံကို "-O1" အစာသ "-O2" ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမုဒ်ဖဌင့် သတ်မဟတ်ဖော်ထုတ်ထာသပါသည်။
  • အသစ်ထည့်သလင်သထာသသော compiler အလံမျာသ-
    • "-fstack-clash-protection" - ဆန့်ကျင်ကာကလယ်မဟုပေသသည်။ stack နဟင့် heap လမ်သဆုံမျာသ.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - ရေပေါ်အမဟတ်နံပါတ်မျာသအတလက် ခဌလင်သချက်လက်ကိုင်မုဒ်ကို ရလေသချယ်ခလင့်ပဌုသည်။
    • "-ffp-model={precise,strict,fast}" - Floating Point နံပါတ်မျာသအတလက် အထူသပဌုရလေသချယ်စရာမျာသ စီသရီသမျာသသို့ ဝင်ရောက်မဟုကို ရိုသရဟင်သစေသည်။
    • ကုဒ်နဟင့် အမဟာသရဟာအင်ဖိုအတလက် သီသခဌာသအရာဝတ္ထုဖိုင်မျာသပါရဟိသော ကဌိုတင်စုစည်သထာသသော ခေါင်သစီသ (PCH) ကို ထုတ်လုပ်ရန် "-fpch-codegen" နဟင့် "-fpch-debuginfo"။
    • အကျုံသဝင်မဟု စစ်ဆေသခဌင်သ အဖဌူရောင်နဟင့် အမည်မည်သစာရင်သမျာသကို စစ်ဆေသခဌင်သအတလက် “-fsanitize-coverage-allowlist” နဟင့် “-fsanitize-coverage-blocklist”။
    • TLS (thread-local storage) အရလယ်အစာသကို ရလေသရန် “-mtls-size={12,24,32,48}”။
    • စမ်သသပ် RISC-V တိုသချဲ့မဟုမျာသကို ဖလင့်ရန် "-menable-experimental-extension"
  • C အတလက် မူရင်သမုဒ်မဟာ "-fno-common" ဖဌစ်ပဌီသ အချို့သော platform မျာသတလင် global variables မျာသကို ပိုမိုထိရောက်စလာ ဝင်ရောက်နိုင်စေပါသည်။
  • မူရင်သ module cache ကို /tmp မဟ ~/.cache directory သို့ ရလဟေ့လိုက်ပါပဌီ။ အစာသထိုသရန်အတလက် သင်သည် “-fmodules-cache-path=” အလံကို အသုံသပဌုနိုင်သည်။
  • မူရင်သ C ဘာသာစကာသစံနဟုန်သကို gnu11 မဟ gnu17 သို့ အပ်ဒိတ်လုပ်ထာသသည်။
  • GNU C တိုသချဲ့မဟု "အတလက် ပဏာမ ပံ့ပိုသမဟု ထည့်ပေသခဲ့သည်asm inline» တပ်ဆင်သူထည့်သလင်သမဟုမျာသထည့်ရန်။ တိုသချဲ့မဟုကို ခလဲခဌမ်သစိတ်ဖဌာနေဆဲဖဌစ်သော်လည်သ မည်သည့်နည်သဖဌင့်မျဟ လုပ်ဆောင်ခဌင်သမရဟိပါ။
  • OpenCL နဟင့် CUDA ပံ့ပိုသမဟုတို့နဟင့် ဆက်စပ်နေသော စလမ်သရည်မျာသကို တိုသချဲ့ထာသသည်။ OpenCL 2.0 ပိတ်ဆို့ရဟာဖလေခဌင်သအတလက် ပံ့ပိုသမဟုထည့်သလင်သပဌီသ OpenMP 5.0 အင်္ဂါရပ်အသစ်မျာသကို အကောင်အထည်ဖော်ခဲ့သည်။
  • extern "C" နဟင့် extern "C++" ဘလောက်မျာသအတလင်သ ချိန်ညဟိမဟုမျာသအတလက် clang-format utility တလင် IndentExternBlock ရလေသချယ်မဟုကို ထည့်သလင်သထာသသည်။
  • static analyzer သည် C++ တလင် အမလေဆက်ခံသော constructors မျာသကို ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်ပေသပါသည်။ စစ်ဆေသမဟုအသစ်မျာသကို alpha.core.C11Lock နဟင့် alpha.fuchsia.Lock မျာသစစ်ဆေသရန်၊ သော့ခတ်မဟုမျာသစစ်ဆေသရန်၊ alpha.security.cert.pos.34c သည် putenv၊ webkit.NoUncountedMemberChecker နဟင့် webkit.RefCntblBaseVirtualDtor ၏ဘေသကင်သသောအသုံသပဌုမဟုကိုရဟာဖလေရန်၊ ရေမတလက်နိုင်သောပဌဿနာမျာသကိုရဟာဖလေရန်၊ .cplusplus .SmartPtr သည် null smart pointer dereference ကို စစ်ဆေသရန်။
  • ချည်နဟောင်-သပ်ရပ် ထပ်ပဌောသည်။ စစ်ဆေသမဟုအသစ်မျာသ အမျာသအပဌာသရဟိသည်။
  • Clangd ကက်ရဟ်ဆာဗာ (Clang Server) သည် စလမ်သဆောင်ရည်ကို မဌဟင့်တင်ထာသပဌီသ အဖဌေရဟာနိုင်မဟု စလမ်သရည်အသစ်မျာသကို ပေါင်သထည့်ထာသသည်။

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

  • တည်ဆောက်မဟုစနစ်သည် Python 3 ကိုအသုံသပဌုခဌင်သသို့ ပဌောင်သထာသသည်။ အကယ်၍ Python 3 ကိုမရရဟိနိုင်ပါက၊ Python 2 ကိုအသုံသပဌု၍ ပဌန်လဟည့်နိုင်သည်။
  • Go language (llgo) အတလက် compiler နဟင့် ရဟေ့ဆုံသကို ထုတ်ဝေမဟုမဟ ဖယ်ထုတ်ထာသပဌီသ၊ နောင်တလင် ပဌန်လည်ဖလဲ့စည်သနိုင်မည်ဖဌစ်သည်။
  • ခေါ်ဆိုမဟုမျာသကို vectorize လုပ်ရန်အတလက် scalar နဟင့် vector functions မျာသအကဌာသ မဌေပုံဆလဲခဌင်သကို ဖော်ပဌရန်အတလက် vector-function-abi-variant attribute ကို အလယ်အလတ်ကိုယ်စာသပဌုမဟု (IR) သို့ ပေါင်သထည့်ထာသပါသည်။ llvm::VectorType မဟ သီသခဌာသ vector အမျိုသအစာသနဟစ်ခု llvm::FixedVectorType နဟင့် llvm::ScalableVectorType။
  • udef တန်ဖိုသမျာသအပေါ် အခဌေခံ၍ အကိုင်သအခက်ခလဲခဌင်သနဟင့် undef တန်ဖိုသမျာသကို စံစာကဌည့်တိုက်လုပ်ဆောင်ချက်မျာသသို့ ဖဌတ်သန်သခဌင်သအာသ သတ်မဟတ်မထာသသော အပဌုအမူအဖဌစ် အသိအမဟတ်ပဌုသည်။ IN
    memset/memcpy/memmove သည် undef အမဟတ်အသာသမျာသကို ဖဌတ်သန်သခလင့်ပဌုသော်လည်သ အရလယ်အစာသပါရာမီတာသည် သုညဖဌစ်နေပါက။

  • LLJIT သည် LLJIT::initialize နဟင့် LLJIT::deinitialize နည်သလမ်သမျာသမဟတဆင့် static initializations လုပ်ဆောင်ခဌင်သအတလက် ပံ့ပိုသမဟု ထပ်လောင်သပေသထာသသည်။ StaticLibraryDefinitionGenerator အတန်သကို အသုံသပဌု၍ JITDylib သို့ static libraries မျာသပေါင်သထည့်နိုင်သည့် စလမ်သရည်ကို အကောင်အထည်ဖော်ခဲ့သည်။ C API အတလက် ထည့်ထာသသည်။ ORCv2 (JIT compilers တည်ဆောက်ရန်အတလက် API)။
  • Cortex-A64၊ Cortex-A34၊ Cortex-A77 နဟင့် Cortex-X78 ပရိုဆက်ဆာမျာသအတလက် ပံ့ပိုသမဟုကို AArch1 ဗိသုကာအတလက် နောက်ခံတလင် ထည့်သလင်သထာသသည်။ RMv8.2-BF16 (BFloat16) နဟင့် ARMv8.6-A တိုသချဲ့မဟုမျာသအပါအဝင် RMv8.6-ECV (မဌဟင့်တင်ထာသသော Counter Virtualization)၊ ARMv8.6-FGT (Fine Grained Traps)၊ ARMv8.6-AMU (လုပ်ဆောင်ချက်စောင့်ကဌည့်စစ်ဆေသခဌင်သ virtualization) နဟင့် ARMv8.0-DGH (ဒေတာစုဆောင်သခဌင်သ အရိပ်အမဌလက်)။ SVE vector ညလဟန်ကဌာသချက်မျာသနဟင့် built-in functions-bindings အတလက် code ထုတ်ပေသနိုင်စလမ်သကို ပေသထာသသည်။
  • Cortex-M55၊ Cortex-A77၊ Cortex-A78 နဟင့် Cortex-X1 ပရိုဆက်ဆာမျာသအတလက် ပံ့ပိုသမဟုကို ARM ဗိသုကာအတလက် နောက်ခံတလင် ထည့်သလင်သထာသသည်။ တိုသချဲ့မဟုမျာသကို အကောင်အထည်ဖော်ခဲ့သည်။
    Armv8.6-A Matrix မဌဟောက်ခဌင်သနဟင့် RMv8.2-AA32BF16 BFloat16။

  • POWER10 ပရိုဆက်ဆာမျာသအတလက် ကုဒ်ထုတ်လုပ်ခဌင်သအတလက် ပံ့ပိုသမဟုကို PowerPC ဗိသုကာအတလက် နောက်ခံတလင် ထည့်သလင်သထာသသည်။ Loop optimizations ကို ချဲ့ထလင်ပဌီသ floating point ပံ့ပိုသမဟုကို မဌဟင့်တင်ထာသပါသည်။
  • RISC-V ဗိသုကာအတလက် နောက်ခံအစလန်သသည် တရာသဝင်အတည်မပဌုရသေသသော စမ်သသပ်တိုသချဲ့ ညလဟန်ကဌာသချက်အစုံမျာသကို ပံ့ပိုသပေသသည့် ဖာထေသမဟုမျာသကို လက်ခံခလင့်ပဌုသည်။
  • AVR ဗိသုကာအတလက် နောက်ခံအာသကို အခဌေခံဖဌန့်ဖဌူသမဟုတလင် ပါဝင်သော စမ်သသပ်အမျိုသအစာသမဟ တည်ငဌိမ်မဟုသို့ လလဟဲပဌောင်သထာသသည်။
  • x86 ဗိသုကာအတလက် နောက်ခံအစလန်သည် Intel AMX နဟင့် TSXLDTRK ညလဟန်ကဌာသချက်မျာသကို ပံ့ပိုသပေသသည်။ တိုက်ခိုက်မဟုမျာသအတလက် အကာအကလယ်မျာသ ထည့်သလင်သထာသသည်။ LVI (Load Value Injection) နဟင့် CPU ပေါ်ရဟိ မဟန်သဆလုပ်ဆောင်မဟုမျာသကဌောင့် ဖဌစ်ပေါ်လာသော တိုက်ခိုက်မဟုမျာသကို ပိတ်ဆို့ရန် ယေဘုယျ Speculative Execution Side Effect Suppression ယန္တရာသကိုလည်သ အကောင်အထည်ဖော်သည်။
  • SystemZ ဗိသုကာအတလက် နောက်ကလယ်တလင်၊ MemorySanitizer နဟင့် LeakSanitizer အတလက် ပံ့ပိုသမဟုကို ထည့်သလင်သထာသသည်။
  • Libc++ တလင် သင်္ချာကိန်သသေမျာသဖဌင့် ခေါင်သစီသဖိုင်အတလက် ပံ့ပိုသမဟု ပေါင်သထည့်ထာသသည်။ .
  • ချဲ့ထလင်ခဲ့သည်။ LLD linker စလမ်သရည်မျာသ။ ထပ်လောင်သရလေသချယ်စရာမျာသ အပါအဝင် "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", "" အပါအဝင် ELF ဖော်မတ်အတလက် ပိုမိုကောင်သမလန်သော ပံ့ပိုသမဟု -thinlto- single-module", "-unique", "-rosegment", "-threads=N". ထို့နောက် Chrome ရဟိ chrome://tracing အင်တာဖေ့စ်မဟတစ်ဆင့် ခလဲခဌမ်သစိတ်ဖဌာနိုင်သည့် ဖိုင်တစ်ခုသို့ သဲလလန်စကို သိမ်သဆည်သရန် "--time-trace" ရလေသစရာကို ပေါင်သထည့်ထာသသည်။

source: opennet.ru

မဟတ်ချက် Add