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 (Large System Extensions) سپورٹ دستیاب ہے اور فراہم کردہ اٹامک پروسیسر ہدایات کا استعمال کرتے ہیں یا ہم وقت سازی کے لیے LL/SC (لوڈ-لنک/اسٹور-کنڈیشنل) ہدایات کا استعمال کرتے ہیں۔
  • پرانے لنکر اور اسمبلر کے رویے کے ساتھ مطابقت کے لیے binutils سوٹ کے ٹارگٹ ورژن کو منتخب کرنے کے لیے "-fbinutils-version" آپشن شامل کیا گیا۔
  • ELF قابل عمل فائلوں کے لیے، جب "-gz" جھنڈا متعین کیا جاتا ہے، zlib لائبریری کا استعمال کرتے ہوئے ڈیبگنگ معلومات کا کمپریشن بطور ڈیفالٹ فعال ہوتا ہے (gz=zlib)۔ نتیجے میں آنے والی آبجیکٹ فائلوں کو لنک کرنے کے لیے lld یا GNU binutils 2.26+ کی ضرورت ہوتی ہے۔ binutils کے پرانے ورژن کے ساتھ مطابقت بحال کرنے کے لیے، آپ "-gz=zlib-gnu" کی وضاحت کر سکتے ہیں۔
  • 'اس' پوائنٹر پر اب نان اور ڈیریفرنس ایبل (N) چیک کے ساتھ کارروائی کی جاتی ہے۔ جب آپ کو NULL قدریں استعمال کرنے کی ضرورت ہو تو nonnull انتساب کو ہٹانے کے لیے، آپ "-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" کے اختیارات شامل کیے گئے۔ تشخیصی آلات کو وسعت دی گئی ہے۔
  • کچھ x86 پر مبنی پروسیسرز میں لاگو HRESET، UINTR، اور AVXVNNI ہدایات کے لیے اضافی تعاون۔
  • x86 سسٹمز پر، "-mtune=" آپشن کے لیے سپورٹ فعال ہے، جو کہ "-march=" قدر سے قطع نظر منتخب مائیکرو آرکیٹیکچرل آپٹیمائزیشن کو فعال کرتا ہے۔
  • جامد تجزیہ کار نے کچھ POSIX فنکشنز کی پروسیسنگ کو بہتر بنایا ہے اور مشروط آپریشنز کے نتیجے کے تعین میں نمایاں طور پر بہتری لائی ہے جب موازنہ میں کئی علامتی قدریں ہوں۔ نئے چیک شامل کیے گئے ہیں: fuchia.HandleChecker (سٹرکچرز میں ہینڈلز کی وضاحت کرتا ہے)، webkit.UncountedLambdaCapturesChecker ویب کٹ اور alpha.webkit.UncountedLocalVarsChecker (ویب کٹ انجن کوڈ میں پوائنٹرز کے ساتھ کام کرنے کی خصوصیات کو مدنظر رکھتا ہے)۔
  • مستقل کے سیاق و سباق میں استعمال ہونے والے تاثرات میں، بلٹ ان فنکشنز کا استعمال __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, wap__bs, wap, wap64, XNUMX، __ bswapq کی اجازت ہے۔ ، _castf*، __rol* اور __ror*۔
  • شناخت کنندگان، کالموں اور فیلڈ کی تعریفوں کے ارد گرد وقفہ کاری کو منتخب کرنے کے لیے کلینگ فارمیٹ یوٹیلیٹی میں بٹ فیلڈ کولن اسپیسنگ آپشن شامل کیا گیا۔
  • لینکس پلیٹ فارم پر کلینگڈ کیشنگ سرور (کلینگ سرور) نے طویل مدتی آپریشن کے دوران میموری کی کھپت کو نمایاں طور پر کم کیا ہے (آپریٹنگ سسٹم میں میموری کے صفحات کو مفت واپس کرنے کے لیے malloc_trim کو متواتر کال فراہم کی جاتی ہیں)۔

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 اور clang سے ہٹا دیا گیا ہے)۔ آپرینڈ آفسیٹس اور چھلانگوں کے سائز کو کنٹرول کرنے کے لیے {disp32} اور {disp8} سابقہ ​​جات اور .d32 اور .d8 لاحقوں کے لیے اسمبلر کے لیے معاونت شامل کی گئی۔ مائیکرو آرکیٹیکچرل آپٹیمائزیشن کی شمولیت کو کنٹرول کرنے کے لیے ایک نیا وصف "tune-cpu" شامل کیا گیا۔
  • ایک نیا موڈ "-fsanitize=unsigned-shift-base" انٹیجر پرابلم ڈیٹیکٹر (انٹیجر سینیٹائزر، "-fsanitize=integer") میں شامل کیا گیا ہے تاکہ تھوڑا سا بائیں جانب شفٹ ہونے کے بعد غیر دستخط شدہ عدد کے اوور فلو کا پتہ لگایا جا سکے۔
  • معیاری مسل لائبریری کے ساتھ لینکس کی تقسیم کے لیے مختلف ڈیٹیکٹرز (آسن، سی ایف آئی، ایل ایسان، ایم ایسان، تسان، اوبسان سینیٹائزر) میں مدد شامل کی گئی ہے۔
  • ایل ایل ڈی لنکر کی صلاحیتوں کو بڑھا دیا گیا ہے۔ ELF فارمیٹ کے لیے بہتر سپورٹ، بشمول اضافی اختیارات "--dependency-file"، "-error-handling-script"، "-lto-pseudo-probe-for-profiling"، "-no-lto-hole-program" مرئیت "" بہتر MinGW سپورٹ۔ Mach-O فارمیٹ (macOS) کے لیے، arm64، arm، اور i386 architectures کے لیے سپورٹ، Link-time optimizations (LTO)، اور استثنیٰ ہینڈلنگ کے لیے اسٹیک ان وائنڈنگ کو لاگو کیا گیا ہے۔
  • Libc++ C++20 معیار کی نئی خصوصیات کو لاگو کرتا ہے اور اس نے C++2b تصریح کی خصوصیات کو تیار کرنا شروع کر دیا ہے۔ غیر فعال لوکلائزیشن سپورٹ ("-DLIBCXX_ENABLE_LOCALIZATION=OFF") اور چھدم بے ترتیب نمبر ("-DLIBCXX_ENABLE_RANDOM_DEVICE=OFF") پیدا کرنے کے لیے آلات کے ساتھ تعمیر کے لیے سپورٹ شامل کی گئی۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں