د LLVM 11.0 کمپیلر سیټ خوشې کول

د شپږو میاشتو پراختیا وروسته وړاندې شوی د پروژې خوشې کول LLVM 11.0 - د GCC سره مطابقت لرونکي وسیلې (کمپیلر، اصلاح کونکي او کوډ جنریټرونه)، د RISC په څیر مجازی لارښوونو منځګړی بټکوډ کې د پروګرامونو تالیف کول (د څو کچې اصلاح کولو سیسټم سره د ټیټ کچې مجازی ماشین). تولید شوی سیډوکوډ د JIT کمپیلر په کارولو سره د ماشین لارښوونو ته مستقیم د برنامې اجرا کولو په وخت کې بدل کیدی شي.

په نوي ریلیز کې کلیدي بدلون د شاملولو و فلانکد فورټران ژبې لپاره مخکنی پای. فلانګ د Fortran 2018، OpenMP 4.5 او OpenACC 3.0 ملاتړ کوي، مګر د پروژې پراختیا لا تر اوسه بشپړه شوې نه ده او مخکینۍ پای د کوډ پارس کولو او د سموالي لپاره چک کولو پورې محدود دی. د LLVM منځګړی کوډ تولید لاهم نه دی ملاتړ شوی او د اجرا وړ فایلونو رامینځته کولو لپاره ، کینونیکي کوډ رامینځته شوی او بهرني فورټران کمپیلر ته لیږدول کیږي.

پرمختګونه په کلینګ 11.0 کې:

  • د خلاصې نحو د ونې د بیا رغولو وړتیا اضافه کړه (AST) د مات شوي C++ کوډ لپاره، کوم چې د غلطیو په تشخیص کې د مرستې لپاره کارول کیدی شي او بهرنۍ اسانتیاو ته اضافي معلومات چمتو کوي لکه کلینګ - پاک او کلینګ. فیچر د C++ کوډ لپاره په ډیفالټ فعال شوی او د "-Xclang -f[no-]recovery-ast" اختیارونو له لارې کنټرول کیږي.
  • د نوي تشخیصي طریقې اضافه شوي:
    • "-Wpointer-to-int-cast" د انټیجر ډول int ته د پوائنټرونو کاسټ کولو په اړه د اخطارونو یوه ډله ده چې ټول ممکنه ارزښتونه نه ځایوي.
    • "-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 میکرو تعریف شوی کله چې د کمانډ لاین اختیار "-march=armv64-a+sve" ترتیب کولو سره د AArch8 کوډ رامینځته کول.

  • د "-O" بیرغ اوس د "-O1" پرځای د "-O2" اصلاح کولو حالت سره پیژندل شوی.
  • نوي کمپیلر بیرغونه اضافه کړل:
    • "-fstack-clash-protection" - په وړاندې محافظت وړوي د سټیک او ټوټو تقاطع.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - تاسو ته اجازه درکوي د فلوټینګ پوائنټ شمیرو لپاره د استثنایی سمبالونکي حالت غوره کړئ.
    • "-ffp-model={ دقيق، سخت، چټک}" - د فلوټينګ پوائنټ شمېرو لپاره د ځانګړو انتخابونو لړۍ ته السرسي آسانه کوي.
    • "-fpch-codegen" او "-fpch-debuginfo" د کوډ او debuginfo لپاره د جلا اعتراض فایلونو سره د مخکې جوړ شوي سرلیک (PCH) رامینځته کولو لپاره.
    • "-fsanitize-coverage-allowlist" او "-fsanitize-coverage-blocklist" د پوښښ ازموینې د سپینو او تور لیستونو چک کولو لپاره.
    • "-mtls-size={12,24,32,48}" د TLS (thread-local storage) اندازه غوره کولو لپاره.
    • د تجربوي RISC-V توسیعونو د فعالولو لپاره "-مینیبل-تجربه-توسیع"
  • د C لپاره ډیفالټ حالت "-fno-common" دی، کوم چې په ځینو پلیټ فارمونو کې نړیوالو متغیرونو ته د لا اغیزمن لاسرسي اجازه ورکوي.
  • د ډیفالټ ماډل کیچ له /tmp څخه ~/.cache لارښود ته لیږدول شوی. د پورته کولو لپاره، تاسو کولی شئ د "-fmodules-cache-path=" بیرغ وکاروئ.
  • د ډیفالټ C ژبې معیار له gnu11 څخه gnu17 ته تازه شوی.
  • د GNU C توسیع لپاره لومړني ملاتړ اضافه شوی "asm انلاین» د جمع کونکي داخلولو اضافه کولو لپاره. غزول لاهم تحلیل کیږي، مګر په هیڅ ډول پروسس شوي ندي.
  • د OpenCL او CUDA مالتړ سره تړلي وړتیاوې پراخې شوې. د OpenCL 2.0 بلاک تشخیص لپاره ملاتړ اضافه شوی او د OpenMP 5.0 نوي ځانګړتیاوې پلي شوي.
  • په خارجي "C" او خارجي "C++" بلاکونو کې د سمون لپاره د کلینګ فارمیټ یوټیلټي ته د IndentExternBlock اختیار اضافه شوی.
  • جامد تحلیل کونکي په C++ کې د میراثي جوړونکو اداره کول ښه کړي. د تالاشۍ لپاره نوي چیکونه alpha.core.C11Lock او alpha.fuchsia.Lock د تالاشۍ چیک کولو لپاره اضافه شوي، alpha.security.cert.pos.34c د putenv، webkit.NoUncountedMemberChecker او webkit.RefCntblBaseVirtualDtor غیر محفوظ ډولونو کشف کولو لپاره د غیر حساب وړ ډولونو کشف کولو لپاره. .cplusplus .SmartPtr د null smart pointer dereference لپاره چک کولو لپاره.
  • په لینټر کلینګ - پاک زیاته کړه د نوي چکونو لویه برخه.
  • د کلینګ کیشینګ سرور (کلینګ سرور) فعالیت ښه کړی او نوي تشخیصي وړتیاوې یې اضافه کړې.

اصلي نوښتونه LLVM 11.0:

  • د جوړونې سیسټم د Python 3 کارولو ته بدل شوی دی. که Python 3 شتون ونلري، نو ممکن د Python 2 کارولو ته بیرته راستانه شي.
  • د Go ژبې (llgo) لپاره د کمپیلر سره مخکینۍ پای له خوشې کیدو څخه ایستل شوی ، کوم چې ممکن په راتلونکي کې بیا تنظیم شي.
  • د vector-function-abi-variant خاصیت په منځمهاله نمایندګۍ (IR) کې اضافه شوی ترڅو د کالونو ویکتوریز کولو لپاره د سکالر او ویکتور افعال تر مینځ نقشه تشریح کړي. د llvm::VectorType څخه دوه جلا ویکتور ډولونه شتون لري llvm::FixedVectorType او llvm::ScalableVectorType.
  • د udef ارزښتونو پراساس څانګه کول او د معیاري کتابتون دندو ته د undef ارزښتونو لیږدول د نه تعریف شوي چلند په توګه پیژندل کیږي. IN
    memset/memcpy/memmove د undef پوائنټرونو تیریدو ته اجازه ورکوي، مګر که د اندازې سره پیرامیټر صفر وي.

  • LLJIT د LLJIT::initialize او LLJIT::deinitialize میتودونو له لارې د جامد ابتکاراتو ترسره کولو لپاره ملاتړ اضافه کړی. د StaticLibraryDefinitionGenerator ټولګي په کارولو سره JITDylib ته د جامد کتابتونونو اضافه کولو وړتیا پلي کړه. د C API لپاره اضافه شوی ORCv2 (د JIT کمپیلرونو جوړولو لپاره API).
  • د Cortex-A64، Cortex-A34، Cortex-A77 او Cortex-X78 پروسیسرونو لپاره مالتړ د AArch1 معمارۍ لپاره پس منظر کې اضافه شوی. د ARMv8.2-BF16 (BFloat16) او ARMv8.6-A توسیعونه پلي شوي، په شمول د RMv8.6-ECV (پرمختللي کاونټر مجازی کول)، ARMv8.6-FGT (ښه دانه جالونه)، ARMv8.6-AMU (فعالیت نظارت کونکي) او ARMv8.0-DGH (د معلوماتو راټولولو اشاره). د SVE ویکتور لارښوونو ته د جوړ شوي فنکشن - پابندۍ لپاره د کوډ رامینځته کولو وړتیا چمتو شوې.
  • د Cortex-M55، Cortex-A77، Cortex-A78 او Cortex-X1 پروسیسرونو لپاره مالتړ د ARM جوړښت لپاره پس منظر کې اضافه شوی. تمدیدونه پلي شوي
    Armv8.6-A Matrix ضرب او RMv8.2-AA32BF16 BFloat16.

  • د POWER10 پروسیسرونو لپاره د کوډ تولید لپاره مالتړ د PowerPC جوړښت لپاره شاته پای ته اضافه شوی. د لوپ اصلاح کول پراخ شوي او د فلوټینګ پوائنټ ملاتړ ښه شوی.
  • د RISC-V جوړښت لپاره شالید د پیچونو منلو ته اجازه ورکوي چې د تجربوي تمدید شوي لارښود سیټونو ملاتړ کوي چې لاهم په رسمي ډول تصویب شوي ندي.
  • د AVR معمارۍ لپاره شالید د تجربې کټګورۍ څخه مستحکم ته لیږدول شوی ، په لومړني توزیع کې شامل دی.
  • د x86 جوړښت لپاره شالید د Intel AMX او TSXLDTRK لارښوونو ملاتړ کوي. د بریدونو پروړاندې محافظت اضافه شوی LVI (لوډ ویلیو انجیکشن)، او همدارنګه په CPU کې د عملیاتو د قیاس اجرا کولو له امله رامینځته شوي بریدونو مخنیوي لپاره د عمومي قیاس اجرایی اړخ اغیزې سپپریشن میکانیزم پلي کوي.
  • د SystemZ معمارۍ لپاره په شالید کې، د MemorySanitizer او LeakSanitizer لپاره ملاتړ اضافه شوی.
  • Libc++ ته د ریاضيکي ثابتو سره د سرلیک فایل لپاره ملاتړ اضافه شوی .
  • پراخ شوی د LLD لینکر وړتیاوې. د ELF فارمیټ لپاره ښه ملاتړ، په شمول د اضافې اختیارونو "-lto-emit-asm"، "-lto-ټول-برنامه-لیدوالی"، "-پرنټ-آرشیف-احصایې"، "-شفل-برخې"، " -thinlto- واحد ماډل"، "-ځانګړي"، "-rosegment"، "-threads=N". په فایل کې د ټریس خوندي کولو لپاره د "--time-trace" اختیار اضافه شوی، کوم چې بیا په کروم کې د کروم: // tracing انٹرفیس له لارې تحلیل کیدی شي.

سرچینه: opennet.ru

Add a comment