LLVM 12.0 گڏ ڪرڻ وارو سوٽ ڇڏڻ

ڇهن مهينن جي ترقيءَ کان پوءِ، LLVM 12.0 پروجيڪٽ جو رليز پيش ڪيو ويو - هڪ GCC-مطابقت رکندڙ ٽول ڪٽ (ڪمپائلر، آپٽمائيزر ۽ ڪوڊ جنريٽر) جيڪو پروگرامن کي RISC-جهڙي ورچوئل هدايتن جي وچ واري بٽ ڪوڊ ۾ گڏ ڪري ٿو (هڪ گهٽ-سطح واري ورچوئل مشين سان. گھڻ-سطح اصلاحي نظام). ٺاهيل pseudocode کي JIT ڪمپيلر استعمال ڪندي مشين جي هدايتن ۾ سڌو سنئون پروگرام جي عمل جي وقت ۾ تبديل ڪري سگھجي ٿو.

Clang 12.0 ۾ بهتري:

  • C++ 20 معيار ۾ تجويز ڪيل ”امڪان“ ۽ ”امڪان“ خاصيتن لاءِ سپورٽ ڊفالٽ طور تي لاڳو ڪئي وئي آهي ۽ ان کي فعال ڪيو ويو آهي، بهتر ڪرڻ واري کي اجازت ڏني وڃي ته مشروط تعمير شروع ٿيڻ جي امڪان بابت ڄاڻ ڏني وڃي (مثال طور، “[[شايد ]] جيڪڏھن (بي ترتيب > 0) {“).
  • AMD Zen 3 (-march=znver3)، Intel Alder Lake (-march=alderlake) ۽ Intel Sapphire Rapids (-march=sapphirerapids) پروسيسرز لاءِ سپورٽ شامل ڪئي وئي.
  • شامل ڪيل سپورٽ "-march=x86-64-v[234]" جھنڊو x86-64 آرڪيٽيڪچر ليولز کي چونڊڻ لاءِ (v2 - covers 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" آپشن کي چونڊڻ لاءِ binutils سوٽ جو ٽارگيٽ ورجن پراڻن لنڪر ۽ گڏ ڪرڻ واري رويي سان مطابقت لاءِ.
  • ELF قابل عمل فائلن لاءِ، جڏھن "-gz" جھنڊو بيان ڪيو ويو آھي، zlib لائبريري استعمال ڪندي ڊيبگنگ معلومات جي ڪمپريشن کي ڊفالٽ طور فعال ڪيو ويندو آھي (gz=zlib). نتيجن واري اعتراض فائلن کي ڳنڍڻ جي ضرورت آهي lld يا GNU binutils 2.26+. binutils جي پراڻن نسخن سان مطابقت بحال ڪرڻ لاء، توهان وضاحت ڪري سگھو ٿا "-gz=zlib-gnu".
  • 'ھي' پوائنٽر ھاڻي عمل ڪيو ويو آھي nonnull ۽ dereferenceable (N) چيڪن سان. nonnull وصف کي هٽائڻ لاءِ جڏهن توهان کي NULL قدر استعمال ڪرڻ جي ضرورت آهي، توهان استعمال ڪري سگهو ٿا "-fdelete-null-pointer-checks" اختيار.
  • لينڪس پليٽ فارم تي، "-fasynchronous-unwind-tables" موڊ فعال ڪيو ويو آهي AArch64 ۽ پاور پي سي آرڪيٽيڪچرز لاءِ unwind ڪال ٽيبل ٺاهڻ لاءِ، جيئن GCC ۾.
  • "#pragma clang loop vectorize_width" ۾ ویکٹرائيزيشن جو طريقو چونڊڻ لاءِ "مقرر ٿيل" (ڊفالٽ) ۽ "اسڪيلبل" اختيارن کي بيان ڪرڻ جي صلاحيت شامل ڪئي وئي. "اسڪيلبل" موڊ، ویکٹر جي ڊيگهه کان آزاد، تجرباتي آهي ۽ هارڊويئر تي استعمال ڪري سگهجي ٿو جيڪو اسپيبلبل ویکٹرائيزيشن کي سپورٽ ڪري ٿو.
  • ونڊوز پليٽ فارم لاءِ بهتر سپورٽ: Arm64 سسٽم تي ونڊوز لاءِ سرڪاري بائنري اسيمبليون تيار ڪيون ويون آهن، جن ۾ ڪلانگ ڪمپلر، ايل ايل ڊي لنڪر ۽ ڪمپلر-آر ٽي رن ٽائم لائبريريون شامل آهن. جڏهن 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, __bit_scan_reverse, __wapd64, wap XNUMX، __ جي اجازت آهي bswapq , _castf*, __rol* and __ror*.
  • شامل ڪيو ويو BitFieldColonSpacing آپشن کي ڪلانگ-فارميٽ يوٽيلٽي کي سڃاڻڻ وارن، ڪالمن، ۽ فيلڊ جي وصفن جي چوڌاري فاصلو چونڊڻ لاءِ.
  • لينڪس پليٽ فارم تي ڪلانگڊ ڪيشنگ سرور (ڪلانگ سرور) ڊگھي مدي واري آپريشن دوران ياداشت جي استعمال کي خاص طور تي گھٽائي ڇڏيو آهي (مالڪ_ٽريم کي وقتي ڪالون مهيا ڪيون وينديون آهن مفت ميموري صفحن کي آپريٽنگ سسٽم ڏانهن موٽڻ لاءِ).

LLVM 12.0 ۾ اهم جدت:

  • Python ۾ لکيل llvm-build بلڊ ٽول لاءِ سپورٽ بند ڪئي وئي آهي، ۽ ان جي بدران پروجيڪٽ مڪمل طور تي CMake بلڊ سسٽم استعمال ڪرڻ لاءِ تبديل ٿي چڪو آهي.
  • AArch64 آرڪيٽيڪچر لاءِ پسمنظر ۾، ونڊوز پليٽ فارم لاءِ سپورٽ بهتر ڪئي وئي آهي: ٽارگيٽ ونڊوز سسٽم لاءِ اسمبلر آئوٽ جي صحيح نسل کي يقيني بڻايو ويو آهي، اڻڄاتل ڪالن تي ڊيٽا جي پيداوار کي بهتر ڪيو ويو آهي (اهڙي ڊيٽا جي سائيز کي 60 کان گھٽ ڪيو ويو آهي. %)، اسمبلر استعمال ڪندي اڻڄاتل ڊيٽا ٺاهڻ جي صلاحيت شامل ڪئي وئي آهي هدايتون .seh_*.
  • پاور پي سي آرڪيٽيڪچر لاءِ پس منظر لوپس ۽ ان لائن ڊيپلائيمينٽ لاءِ نيون اصلاحون، پاور10 پروسيسرز لاءِ وڌايل سپورٽ، ميٽرڪس مينيپوليشن لاءِ ايم ايم اي هدايتون لاءِ شامل ڪيل سپورٽ، ۽ AIX آپريٽنگ سسٽم لاءِ بهتر سپورٽ شامل ڪري ٿو.
  • x86 پس منظر AMD Zen 3، Intel Alder Lake ۽ Intel Sapphire Rapids پروسيسرز، انهي سان گڏ HRESET، UINTR ۽ AVXVNNI پروسيسر هدايتون لاءِ سپورٽ شامل ڪري ٿو. ايم پي ايڪس (ميموري پروٽيڪشن ايڪسٽينشن) جي مدد لاءِ پوائنٽرز کي چيڪ ڪرڻ لاءِ انهي ڳالهه کي يقيني بڻائڻ لاءِ ته ميموري جون حدون وڌيڪ سهڪاري نه رهيون آهن (هي ٽيڪنالاجي وسيع نه آهي ۽ اڳ ۾ ئي GCC ۽ ڪلانگ مان هٽايو ويو آهي). شامل ڪيل سپورٽ اسمبلر لاءِ {disp32} ۽ {disp8} اڳياڙين ۽ .d32 ۽ .d8 لاحقن لاءِ اوپيرينڊ آف سيٽس ۽ جمپس جي سائيز کي ڪنٽرول ڪرڻ لاءِ. شامل ڪيو ويو هڪ نئون وصف "ٽيون-سي پي يو" کي ڪنٽرول ڪرڻ لاءِ مائڪرو آرڪيٽيڪچرل اصلاحن جي شموليت کي.
  • هڪ نئون موڊ “-fsanitize=unsigned-shift-base” شامل ڪيو ويو آهي انٽيجر مسئلو ڊيڪٽر (انٽيجر صاف ڪرڻ وارو، “-fsanitize=integer”) ته جيئن غير دستخط ٿيل انٽيجرز جي اوور فلوز کي کاٻي طرف شفٽ ڪرڻ کان پوءِ.
  • مختلف ڊيڪٽرز ۾ (asan، cfi، lsan، msan، tsan، ubsan sanitizer) لينڪس ڊسٽريبيوشن لاءِ سپورٽ معياري Musl لائبريري سان شامل ڪئي وئي آهي.
  • ايل ايل ڊي لنڪر جي صلاحيت کي وڌايو ويو آهي. ELF فارميٽ لاءِ بهتر سپورٽ، جنهن ۾ شامل ڪيل آپشنز شامل آهن “--انحصار-فائل”، “-error-handling-script”، “-lto-pseudo-probe-for-profiling”، “-no-lto-shole-program - ڏيکاءُ"" بهتر MinGW سپورٽ. Mach-O فارميٽ (macOS) لاءِ، arm64، arm، ۽ i386 آرڪيٽيڪچرز لاءِ سپورٽ، لنڪ ٽائم آپٽمائيزيشن (LTO)، ۽ اسٽيڪ ان وائنڊنگ لاءِ استثنيٰ سنڀالڻ لاءِ لاڳو ڪيو ويو آھي.
  • Libc++ C++ 20 معيار جي نئين خاصيتن کي لاڳو ڪري ٿو ۽ C++2b جي خاصيتن جي ترقي جي شروعات ڪئي آهي. شامل ڪئي وئي مدد سان تعمير ڪرڻ لاءِ غير فعال ڪرڻ واري لوڪلائيزيشن سپورٽ (“-DLIBCXX_ENABLE_LOCALIZATION=OFF”) ۽ ڊيوائسز پيدا ڪرڻ لاءِ pseudo-random numbers (“-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF”).

جو ذريعو: opennet.ru

تبصرو شامل ڪريو