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

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

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

  • د C++ 20 معیار کې وړاندیز شوي "احتمال" او "احتمالي" ځانګړتیاو لپاره ملاتړ د ډیفالټ په واسطه پلي شوی او فعال شوی دی ، چې اصلاح کونکي ته اجازه ورکوي چې د مشروط جوړونې د رامینځته کیدو احتمال په اړه خبر شي (د مثال په توګه ، "[[احتمال ]] که (تصادفي > 0) {“).
  • د AMD Zen 3 (-march=znver3)، Intel Alder Lake (-march=alderlake) او Intel Sapphire Rapids (-march=sapphirerapids) پروسیسرونو لپاره ملاتړ اضافه شوی.
  • د x86-64 معمارۍ کچې غوره کولو لپاره د "-march=x234-86-v[64]" بیرغونو لپاره ملاتړ اضافه شوی (v2 - پوښي SSE4.2، SSSE3، POPCNT او CMPXCHG16B توسیعونه؛ v3 - AVX2 او MOVBE؛ v4 - AVX-512 ) .
  • د Arm Cortex-A78C (cortex-a78c)، Arm Cortex-R82 (cortex-r82)، Arm Neoverse V1 (neoverse-v1)، Arm Neoverse N2 (neoverse-n2) او Fujitsu A64FX (a64fx) پروسیسرونو لپاره ملاتړ اضافه شوی. د مثال په توګه، د Neoverse-V1 CPUs لپاره د اصلاح کولو وړ کولو لپاره، تاسو کولی شئ "-mcpu=neoverse-v1" مشخص کړئ.
  • د AArch64 آرکیټیکچر لپاره، نوي کمپیلر بیرغونه "-moutline-atomics" او "-mno-outline-atomics" اضافه شوي ترڅو د اټومي عملیاتو مرستندویه افعال فعال یا غیر فعال کړي، لکه "__aarch64_cas8_relax". دا ډول فنکشنونه د چلولو په وخت کې معلوموي چې ایا د LSE (لوی سیسټم توسیع) ملاتړ شتون لري او د چمتو شوي اټومي پروسیسر لارښوونې وکاروئ یا د همغږي کولو لپاره د LL/SC (Load-link/store-conditional) لارښوونو کارولو ته بیرته راشي.
  • د "-fbinutils-version" اختیار اضافه شوی ترڅو د زاړه لینکر او راټولونکي چلند سره مطابقت لپاره د بینوټیل سویټ هدف نسخه غوره کړي.
  • د ELF د اجرا وړ فایلونو لپاره، کله چې د "-gz" بیرغ مشخص شي، د zlib کتابتون په کارولو سره د ډیبګ کولو معلوماتو کمپریشن په ډیفالټ (gz=zlib) فعال شوی. د پایلې شوي اعتراض فایلونو لینک کول lld یا GNU binutils 2.26+ ته اړتیا لري. د binutils د زړو نسخو سره مطابقت بحالولو لپاره، تاسو کولی شئ "-gz=zlib-gnu" مشخص کړئ.
  • 'دا' پوائنټر اوس د غیر نول او بې اعتباره (N) چکونو سره پروسس شوی. د غیر نول خاصیت لرې کولو لپاره کله چې تاسو د NULL ارزښتونو کارولو ته اړتیا لرئ ، تاسو کولی شئ د "-fdelete-null-pointer-checks" اختیار وکاروئ.
  • په لینکس پلیټ فارم کې، د "-fasynchronous-unwind-tables" حالت د AArch64 او PowerPC آرکیټیکچرونو لپاره فعال شوی ترڅو د انونډ کال میزونه تولید کړي، لکه په GCC کې.
  • په "#pragma clang loop vectorize_width" کې د ویکٹرائزیشن میتود غوره کولو لپاره د "فکسډ" (ډیفالټ) او "د توزیع وړ" اختیارونو مشخص کولو وړتیا اضافه کړه. د "د توزیع وړ" حالت، د ویکتور اوږدوالی څخه خپلواک، تجربوي دی او په هارډویر کې کارول کیدی شي چې د توزیع وړ ویکتوریزیزیشن ملاتړ کوي.
  • د وینډوز پلیټ فارم لپاره ښه ملاتړ: په آرم 64 سیسټمونو کې د وینډوز لپاره رسمي بائنري مجلسونه چمتو شوي ، پشمول د کلینګ کمپیلر ، ایل ایل ډی لینکر او کمپیلر - آر ټي رن ټایم کتابتونونه. کله چې د MinGW هدف پلیټ فارمونو لپاره رامینځته کیږي ، د .exe لایحه اضافه کیږي ، حتی کله چې کراس تالیف کیږي.
  • د OpenCL، OpenMP او CUDA لپاره د ملاتړ سره تړلي وړتیاوې پراخې شوې. د OpenCL 3.0 او OpenCL 1.0 لپاره د میکرو انتخابونو غوره کولو لپاره "-cl-std=CL3.0" او "-cl-std=CL1.0" اختیارونه اضافه کړل. د تشخیص وسایل پراخ شوي دي.
  • د HRESET، UINTR، او AVXVNNI لارښوونو لپاره اضافي ملاتړ په ځینو x86-based پروسیسرونو کې پلي شوي.
  • په x86 سیسټمونو کې، د "-mtune=" اختیار لپاره ملاتړ فعال شوی، د "-march=" ارزښت په پام کې نیولو پرته د ټاکل شوي مایکرو آرکیټیکچرل اصلاح کول فعالوي.
  • جامد تحلیل کونکي د ځینې POSIX دندو پروسس کولو ته وده ورکړې او د مشروط عملیاتو پایلې کې د پام وړ ښه والی ټاکلی کله چې په پرتله کولو کې ډیری سمبولیک ارزښتونه شتون ولري. نوي چکونه اضافه شوي دي: fuchia.HandleChecker (په جوړښتونو کې لاسوندونه تعریفوي)، webkit.UncountedLambdaCapturesChecker webkit او alpha.webkit.UncountedLocalVarsChecker (د ویب کیټ انجن کوډ کې د اشارو سره د کار کولو ځانګړتیاوې په پام کې نیسي).
  • د استثمار په شرایطو کې کارول شوي بیانونو کې، د جوړ شوي فنکشن کارول __builtin_bitreverse*، __builtin_rotateleft*، __builtin_rotateright*، _mm_popcnt*، _bit_scan_forward، __bsfd، __bsfq، __bit_scan_reverse__waps__، wapd64، XNUMX، __ د bswapq اجازه لري , _castf*، __rol* او __ror*.
  • د BitFieldColonSpacing اختیار د کلینګ فارمیټ یوټیلیټ ته اضافه شوی ترڅو د پیژندونکو ، کالمونو ، او ساحې تعریفونو شاوخوا فاصله غوره کړي.
  • په لینکس پلیټ فارم کې د کلینګ کیشینګ سرور (کلینګ سرور) د اوږدې مودې عملیاتو په جریان کې د حافظې مصرف د پام وړ کم کړی دی (مالوک_ټریم ته وختي زنګونه عملیاتي سیسټم ته د وړیا حافظې پا pagesو بیرته راستنولو لپاره چمتو شوي).

په LLVM 12.0 کې کلیدي نوښتونه:

  • په Python کې لیکل شوي llvm-build build وسیلې لپاره ملاتړ بند شوی ، او پرځای یې پروژه په بشپړ ډول د CMake جوړونې سیسټم کارولو ته بدله شوې.
  • د AArch64 جوړښت لپاره په شالید کې ، د وینډوز پلیټ فارم ملاتړ ښه شوی: د هدف وینډوز سیسټمونو لپاره د راټولونکي محصول درست نسل ډاډمن شوی ، د بې ځایه تلیفونونو په اړه د ډیټا تولید غوره شوی (د داسې ډیټا اندازه د 60 لخوا کمه شوې. %)، د اسمبلر په کارولو سره د بې ځایه معلوماتو رامینځته کولو وړتیا د لارښودونو اضافه شوي .seh_*.
  • د پاور پی سی آرکیټیکچر لپاره بیکینډ د لوپس او انلاین ګمارنې لپاره نوي اصلاحونه ، د پاور10 پروسیسرونو لپاره پراخه ملاتړ ، د میټریکس مینځلو لپاره د MMA لارښوونو لپاره اضافي ملاتړ ، او د AIX عملیاتي سیسټم لپاره ښه ملاتړ وړاندې کوي.
  • د x86 پس منظر د AMD Zen 3، Intel Alder Lake او Intel Sapphire Rapids پروسیسرونو، او همدارنګه د HRESET، UINTR او AVXVNNI پروسیسر لارښوونو لپاره ملاتړ اضافه کوي. د MPX (د حافظې محافظت توسیعونو) لپاره د پوائنټرونو چک کولو لپاره ملاتړ ترڅو ډاډ ترلاسه شي چې د حافظې حدود نور ملاتړ نه کوي (دا ټیکنالوژي پراخه نه ده او دمخه د GCC او کلنګ څخه لرې شوې ده). د {disp32} او {disp8} مخففونو او .d32 او .d8 لاحقو لپاره د راټولونکي لپاره ملاتړ اضافه شوی ترڅو د عملیاتي آفسیټونو او کودونو اندازه کنټرول کړي. د مایکرو آرکیټیکچر اصلاح کولو شاملولو کنټرول لپاره یو نوی خاصیت "tune-cpu" اضافه کړ.
  • یو نوی موډ "-fsanitize=unsigned-shift-base" د انټیجر ستونزې کشف کونکي ته اضافه شوی (integer sanitizer, "-fsanitize=integer") ترڅو د یو څه بدلون وروسته د غیر لاسلیک شوي انټیجرونو ډیر جریان کشف کړي.
  • په مختلف کشف کونکو کې (asan, cfi, lsan, msan, tsan, ubsan sanitizer) د معیاري مسل کتابتون سره د لینکس توزیع لپاره ملاتړ اضافه شوی.
  • د LLD لینکر وړتیاوې پراخې شوې. د ELF فارمیټ لپاره ښه شوی ملاتړ، په شمول د اضافه شوي اختیارونو "-- انحصار-دوتنه"، "-غلطي - اداره کولو-سکریپټ"، "-lto-pseudo-probe-for-profiling"، "-no-lto-bhole-program - لید د MinGW ملاتړ ښه شوی. د Mach-O فارمیټ (macOS) لپاره، د arm64، arm، او i386 آرکیټیکچرونو لپاره ملاتړ، د لینک وخت اصلاح کول (LTO)، او د استثنایی سمبالولو لپاره د سټیک انونډینګ پلي شوي.
  • Libc++ د C++20 معیاري نوې بڼې پلي کوي او د C++2b ځانګړتیاوو پراختیا یې پیل کړې ده. د غیر فعال کولو ځایی کولو مالتړ ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") سره د جوړولو لپاره ملاتړ اضافه شوی او د تصادفي نمبرونو رامینځته کولو لپاره وسایل ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF").

سرچینه: opennet.ru

Add a comment