የኤልኤልቪኤም 11.0 ማጠናከሪያ ስብስብ መለቀቅ

ከስድስት ወር እድገት በኋላ ቀርቧል የፕሮጀክት መለቀቅ LLVM 11.0 — ከጂሲሲ ጋር ተኳሃኝ የሆኑ መሳሪያዎች (አቀናባሪዎች፣ አመቻቾች እና ኮድ ማመንጫዎች)፣ ፕሮግራሞችን ወደ መካከለኛ ቢትኮድ እንደ RISC መሰል ምናባዊ መመሪያዎች ማጠናቀር (ዝቅተኛ ደረጃ ምናባዊ ማሽን ባለብዙ ደረጃ ማሻሻያ ስርዓት)። የመነጨው pseudocode በፕሮግራሙ አፈጻጸም ጊዜ በቀጥታ በጂአይቲ ማጠናከሪያ ወደ ማሽን መመሪያዎች ሊቀየር ይችላል።

በአዲሱ ልቀት ውስጥ ያለው ቁልፍ ለውጥ ማካተት ነበር። ጎን፣ ለፎርራን ቋንቋ ግንባር። ፍላንግ ፎርትራን 2018፣ OpenMP 4.5 እና OpenACC 3.0ን ይደግፋል፣ ነገር ግን የፕሮጀክቱ ልማት ገና አልተጠናቀቀም እና የፊተኛው ጫፍ በኮድ መተንተን እና ትክክለኛነትን በመፈተሽ ብቻ የተገደበ ነው። የኤልኤልቪኤም መካከለኛ ኮድ ማመንጨት ገና አልተደገፈም እና ሊተገበሩ የሚችሉ ፋይሎችን ለማመንጨት ቀኖናዊ ኮድ ተፈጥሯል እና ወደ ውጫዊ የፎርትራን አጠናቃሪ ተላልፏል።

ማሻሻያዎች በክላንግ 11.0 ውስጥ:

  • ረቂቅ አገባብ ዛፉን ወደነበረበት የመመለስ ችሎታ ታክሏል (AST) ለተሰበረ የC++ ኮድ፣ ስህተቶችን ለመመርመር የሚያግዝ እና ተጨማሪ መረጃ ለውጪ መገልገያዎች ለምሳሌ ክላንግ-ቲዲ እና ክላንግዲ። ባህሪው በነባሪነት ለC++ ኮድ የነቃ ሲሆን በ"-Xclang -f[no-]recovery-ast" አማራጮች በኩል ቁጥጥር ይደረግበታል።
  • አዲስ የምርመራ ሁነታዎች ታክለዋል፡
    • "-Wpointer-to-int-cast" ሁሉንም ሊሆኑ የሚችሉ እሴቶችን ወደሌለው የኢንቲጀር አይነት ኢንቲ ስለመጣል የማስጠንቀቂያ ቡድን ነው።
    • “-Wuninitialized-const-reference” - የማጣቀሻ ነጋሪ እሴቶችን ከ"const" ባህሪ ጋር በሚቀበሉ የተግባር መለኪያዎች ውስጥ ያልታወቁ ተለዋዋጮችን ስለማለፍ ማስጠንቀቂያ።
    • "-Wimplicit-const-int-float-conversion" - እውነተኛ ቋሚ ወደ ኢንቲጀር አይነት ስውር ስለመቀየር በነባሪ ማስጠንቀቂያ የነቃ።
  • ለ ARM መድረክ፣ በአቀነባባሪው ውስጥ የተገነቡ የ C ተግባራት ተሰጥተዋል (ውስጣዊ ነገሮች), በብቃት የቬክተር መመሪያዎች ክንድ v8.1-M MVE እና CDE ተተክቷል. ያሉት ተግባራት በአርእስት ፋይሎች arm_mve.h እና arm_cde.h ውስጥ ተገልጸዋል።
  • ታክሏል። የተዘረጉ የኢንቲጀር አይነቶች ስብስብ _ExtInt(N)፣ የሁለት ሃይሎች ብዜት ያልሆኑ አይነቶች እንዲፈጥሩ የሚያስችልዎ፣ ይህም በFPGA/HLS ላይ በብቃት ሊሰሩ ይችላሉ። ለምሳሌ, _ExtInt(7) 7 ቢት ያቀፈ የኢንቲጀር አይነት ይገልጻል።
  • በARM SVE (ስኬል የቬክተር ማራዘሚያ) መመሪያዎችን መሰረት በማድረግ አብሮገነብ የ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። ለምሳሌ የ__ARM_FEATURE_SVE ማክሮ የሚገለጸው AArch64 ኮድ ሲያመነጭ "-march=armv8-a+sve" የሚለውን የትእዛዝ መስመር አማራጭ በማዘጋጀት ነው።

  • የ"-O" ባንዲራ አሁን ከ "-O1" ይልቅ በ"-O2" ማሻሻያ ሁነታ ተለይቷል።
  • አዲስ የአቀናባሪ ባንዲራዎች ታክለዋል፡
    • "-fstack-clash-protection" - መከላከልን ያስችላል መደራረብ እና መደራረብ መገናኛዎች.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - ለተንሳፋፊ ነጥብ ቁጥሮች ልዩ ተቆጣጣሪ ሁነታን እንዲመርጡ ያስችልዎታል።
    • "-ffp-model={ትክክለኛ፣ ጥብቅ፣ፈጣን}" - ለተንሳፋፊ ነጥብ ቁጥሮች ተከታታይ ልዩ አማራጮችን መድረስን ያቃልላል።
    • "-fpch-codegen" እና "-fpch-debuginfo" ቀድሞ የተጠናቀረ አርዕስት (PCH) በተለየ የነገር ፋይሎች ለኮድ እና ለማረም።
    • "-fsanitize-coverage-allowlist" እና "-fsanitize-coverage-blocklist" ሽፋንን ነጭ እና ጥቁር ዝርዝሮችን ለማጣራት።
    • "-mtls-size={12,24,32,48}" TLS (ክር-አካባቢያዊ ማከማቻ) መጠንን ለመምረጥ።
    • የሙከራ RISC-V ቅጥያዎችን ለማንቃት "-የሚቻል-የሙከራ-ቅጥያ"።
  • የ C ነባሪ ሁነታ "-fno-common" ነው, ይህም በአንዳንድ መድረኮች ላይ ይበልጥ ቀልጣፋ ወደ አለምአቀፍ ተለዋዋጮች ለመድረስ ያስችላል.
  • ነባሪው ሞጁል መሸጎጫ ከ/tmp ወደ ~/.cache ማውጫ ተወስዷል። ለመሻር፣ የ«-fmodules-cache-path=» ባንዲራ መጠቀም ይችላሉ።
  • ነባሪው የC ቋንቋ መስፈርት ከ gnu11 ወደ gnu17 ተዘምኗል።
  • ለጂኤንዩ ሲ ቅጥያ የመጀመሪያ ድጋፍ ታክሏልasm inline» የመሰብሰቢያ ማስገቢያዎችን ለመጨመር። ቅጥያው አሁንም እየተተነተነ ነው፣ ግን በምንም መልኩ አልተሰራም።
  • ከOpenCL እና CUDA ድጋፍ ጋር የተያያዙ ችሎታዎች ተዘርግተዋል። ለOpenCL 2.0 የማገጃ ምርመራዎች ድጋፍ ታክሏል እና አዲስ የOpenMP 5.0 ባህሪያትን ተግባራዊ አድርጓል።
  • በውጫዊ "C" እና በ"C++" ብሎኮች ውስጥ ለማሰለፍ የIndentExternBlock አማራጭ ወደ ክላንግ-ቅርጸት መገልገያ ታክሏል።
  • የማይንቀሳቀስ ተንታኝ በC++ ውስጥ የተወረሱ ገንቢዎችን አያያዝ አሻሽሏል። አዳዲስ ቼኮች alpha.core.C11Lock እና alpha.fuchsia.መቆለፊያዎችን ለመፈተሽ፣ alpha.security.cert.pos.34c ደህንነቱ ያልተጠበቀ የputenv፣ webkit.NoUncountedMemberChecker እና webkit.RefCntblBaseVirtualDtor ችግሮችን ለመለየት የማይቆጠሩ አይነቶች፣ alpha. .cplusplus .SmartPtr ባዶ ስማርት የጠቋሚ ማነስን ለማረጋገጥ።
  • በሊንተር ክላንግ-የተስተካከለ ታክሏል አዲስ ቼኮች ትልቅ ክፍል.
  • የ Clangd መሸጎጫ አገልጋይ (Clang Server) አፈፃፀሙን አሻሽሏል እና አዳዲስ የምርመራ ችሎታዎችን አክሏል።

ዋና ፈጠራዎች LLVM 11.0:

  • የግንባታ ስርዓቱ ወደ Python 3 ተለውጧል። Python 3 ከሌለ ወደ Python 2 መመለስ ይቻላል ።
  • ለጎ ቋንቋ (llgo) አቀናባሪ ያለው የፊተኛው ጫፍ ከመልቀቁ የተገለለ ነው፣ ይህም ወደፊት ሊዋቀር ይችላል።
  • የቬክተር-ተግባር-አቢ-ተለዋዋጭ ባህሪ ወደ መካከለኛ ውክልና (IR) ተጨምሯል በ scalar እና በቬክተር ተግባራት መካከል ያለውን የካርታ ስራ ለመግለፅ ጥሪዎችን ለማስተላለፍ። ከllvm::VectorType ሁለት የተለያዩ የቬክተር አይነቶች አሉ lvm::FixedVectorType እና lvm::ScalableVectorType::
  • በ udef እሴቶች ላይ የተመሰረተ ቅርንጫፎ ማደራጀት እና ያልተለመዱ እሴቶችን ወደ መደበኛ ቤተ-መጽሐፍት ተግባራት ማለፍ ያልተገለጸ ባህሪ እንደሆነ ይታወቃል። ውስጥ
    memset/memcpy/memmove ያልፉ ጠቋሚዎችን ይፈቅዳል፣ነገር ግን የመጠን መለኪያው ዜሮ ከሆነ።

  • LLJIT በ LLJIT :: initialize እና LLJIT :: deinitialize ስልቶች በኩል የማይለዋወጡ ጅምር ስራዎችን ለማከናወን ድጋፍ አክሏል። StaticLibraryDefinitionGenerator ክፍልን በመጠቀም ወደ JITDylib የማይንቀሳቀሱ ቤተ-ፍርግሞችን የመጨመር ችሎታን ተግባራዊ አድርጓል። ለ C API ታክሏል። ORCv2 (ኤፒአይ ለጂአይቲ ኮምፕሌተሮች ግንባታ)።
  • ለ AArch64 አርክቴክቸር ለ Cortex-A34፣ Cortex-A77፣ Cortex-A78 እና Cortex-X1 ፕሮሰሰሮች ድጋፍ ወደ ኋላ ተጨምሯል። የተተገበረ ARMv8.2-BF16 (BFloat16) እና ARMv8.6-A ቅጥያዎች፣ RMv8.6-ECV (የተሻሻለ Counter Virtualization)፣ ARMv8.6-FGT (ጥሩ የእህል ወጥመዶች)፣ ARMv8.6-AMU (የእንቅስቃሴ ተቆጣጣሪዎች ቨርቹዋልላይዜሽን) እና ARMv8.0-DGH (የመረጃ መሰብሰብ ፍንጭ)። አብሮገነብ ተግባራት - ከ SVE ቬክተር መመሪያዎች ጋር ማያያዝ ኮድ የማመንጨት ችሎታ ቀርቧል።
  • ለ Cortex-M55፣ Cortex-A77፣ Cortex-A78 እና Cortex-X1 ፕሮሰሰሮች ድጋፍ ለARM አርክቴክቸር ከጀርባው ታክሏል። ቅጥያዎች ተተግብረዋል
    Armv8.6-A ማትሪክስ ማባዛት እና RMv8.2-AA32BF16 BFloat16.

  • ለPOWER10 ፕሮሰሰሮች የኮድ ማመንጨት ድጋፍ ለPowerPC architecture ከኋላ ታክሏል። የሉፕ ማመቻቸት ተዘርግቷል እና የተንሳፋፊ ነጥብ ድጋፍ ተሻሽሏል።
  • የ RISC-V አርክቴክቸር ጀርባ እስካሁን በይፋ ያልተፈቀዱ የሙከራ የተራዘሙ የማስተማሪያ ስብስቦችን የሚደግፉ ጥገናዎችን መቀበል ያስችላል።
  • የAVR አርክቴክቸር የኋላ ከሙከራ ምድብ ወደ መረጋጋት ተላልፏል፣ በመሠረታዊ ስርጭቱ ውስጥ ተካትቷል።
  • የ x86 አርክቴክቸር ጀርባ ኢንቴል AMX እና TSXLDTRK መመሪያዎችን ይደግፋል። ከጥቃቶች ጥበቃ ታክሏል LVI (Load Value Injection)፣ እና በሲፒዩ ላይ በሚደረጉ ግምታዊ አፈፃፀም የሚደርሱ ጥቃቶችን ለመከላከል አጠቃላይ ግምታዊ ማስፈጸሚያ የጎን ተፅእኖ ማፈን ዘዴን ተግባራዊ ያደርጋል።
  • በSystemZ አርክቴክቸር ጀርባ ላይ የMemorySanitizer እና LeakSanitizer ድጋፍ ታክሏል።
  • Libc++ ለራስጌ ፋይል በሒሳብ ቋሚዎች ድጋፍን ይጨምራል .
  • ተስፋፋ የኤልኤልዲ ማያያዣ ችሎታዎች። ለELF ቅርጸት የተሻሻለ ድጋፍ፣ የተጨመሩትን አማራጮች "--lto-emit-asm"፣ "--lto-ሙሉ-ፕሮግራም-ታይነት"፣ "-የህትመት-ማህደር-ስታቲስቲክስ"፣ "-ሹፍል-ክፍል"፣ " -thinlto- ነጠላ-ሞዱል፣ "-ልዩ"፣ "-rosegment", "-threads=N"። ዱካውን ወደ ፋይል ለማስቀመጥ የ"--time-trace" አማራጭ ታክሏል፣ ይህም በChrome ውስጥ በchrome://tracing በይነገጽ በኩል ሊተነተን ይችላል።

ምንጭ: opennet.ru

አስተያየት ያክሉ