LLVM 11.0 کمپائلر سیٹ کی ریلیز

چھ ماہ کی ترقی کے بعد پیش کیا منصوبے کی رہائی LLVM 11.0 — جی سی سی سے مطابقت رکھنے والے ٹولز (مرتب کرنے والے، آپٹیمائزرز اور کوڈ جنریٹر)، پروگراموں کو RISC جیسی ورچوئل ہدایات کے انٹرمیڈیٹ بٹ کوڈ میں مرتب کرنا (ملٹی لیول آپٹیمائزیشن سسٹم کے ساتھ نچلی سطح کی ورچوئل مشین)۔ تیار کردہ سیڈو کوڈ کو JIT کمپائلر کا استعمال کرتے ہوئے براہ راست پروگرام کے عمل کے وقت مشین ہدایات میں تبدیل کیا جا سکتا ہے۔

نئی ریلیز میں اہم تبدیلی کی شمولیت تھی۔ فلانکفورٹران زبان کے لیے فرنٹ اینڈ۔ Flang Fortran 2018، OpenMP 4.5 اور OpenACC 3.0 کو سپورٹ کرتا ہے، لیکن پروجیکٹ کی ڈیولپمنٹ ابھی تک مکمل نہیں ہوئی ہے اور فرنٹ اینڈ کوڈ کو پارس کرنے اور درستگی کی جانچ تک محدود ہے۔ LLVM انٹرمیڈیٹ کوڈ کی جنریشن ابھی تک تعاون یافتہ نہیں ہے اور قابل عمل فائلوں کو بنانے کے لیے، کینونیکل کوڈ تیار کیا جاتا ہے اور ایک بیرونی فورٹران کمپائلر کو دیا جاتا ہے۔

بہتری بجنا 11.0 میں:

  • تجریدی نحوی درخت کو بحال کرنے کی صلاحیت شامل کی گئی (AST) ٹوٹے ہوئے C++ کوڈ کے لیے، جو غلطیوں کی تشخیص میں مدد کے لیے استعمال کیا جا سکتا ہے اور بیرونی افادیت جیسے clang-tidy اور clangd کو اضافی معلومات فراہم کرتا ہے۔ یہ خصوصیت C++ کوڈ کے لیے بطور ڈیفالٹ فعال ہے اور اسے "-Xclang -f[no-]recovery-ast" کے اختیارات کے ذریعے کنٹرول کیا جاتا ہے۔
  • نئے تشخیصی طریقوں کو شامل کیا گیا:
    • "-Wpointer-to-int-cast" انتباہات کا ایک گروپ ہے جس میں انٹیجر قسم کے int پر پوائنٹرز کاسٹ کرنے کے بارے میں انتباہات ہیں جو تمام ممکنہ اقدار کو ایڈجسٹ نہیں کرتا ہے۔
    • "-Wuninitialized-const-reference" - فنکشن پیرامیٹرز میں غیر شروع شدہ متغیرات کو منتقل کرنے کے بارے میں انتباہ جو "const" وصف کے ساتھ حوالہ کے دلائل کو قبول کرتے ہیں۔
    • "-Wimplicit-const-int-float-conversion" - ایک حقیقی مستقل کو عددی قسم میں مضمر تبدیلی کے بارے میں پہلے سے طے شدہ انتباہ کے طور پر فعال کیا گیا ہے۔
  • اے آر ایم پلیٹ فارم کے لیے، کمپائلر میں بنائے گئے سی فنکشن فراہم کیے گئے ہیں (اندرونی باتیں)، موثر ویکٹر ہدایات Arm v8.1-M MVE اور CDE سے تبدیل کیا گیا ہے۔ دستیاب افعال کی تعریف ہیڈر فائلوں arm_mve.h اور arm_cde.h میں کی گئی ہے۔
  • شامل کیا گیا۔ توسیع شدہ عددی قسموں کا ایک سیٹ _ExtInt(N)، جو آپ کو ایسی قسمیں بنانے کی اجازت دیتا ہے جو دو کی طاقتوں کے ضرب نہ ہوں، جن پر FPGA/HLS پر مؤثر طریقے سے کارروائی کی جا سکتی ہے۔ مثال کے طور پر، _ExtInt(7) 7 بٹس پر مشتمل ایک عددی قسم کی وضاحت کرتا ہے۔
  • ARM SVE (Scalable Vector Extension) کی ہدایات پر مبنی بلٹ ان 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۔ مثال کے طور پر، کمانڈ لائن آپشن "-march=armv64-a+sve" سیٹ کرکے AArch8 کوڈ تیار کرتے وقت __ARM_FEATURE_SVE میکرو کی وضاحت کی جاتی ہے۔

  • "-O" پرچم کی شناخت اب "-O1" کے بجائے "-O2" اصلاحی موڈ سے کی گئی ہے۔
  • نئے مرتب کرنے والے جھنڈے شامل کیے گئے:
    • "-fstack-clash-protection" - کے خلاف تحفظ کو قابل بناتا ہے۔ ڈھیر اور ڈھیر کے چوراہوں.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - آپ کو فلوٹنگ پوائنٹ نمبرز کے لیے استثنا ہینڈلر موڈ کو منتخب کرنے کی اجازت دیتا ہے۔
    • "-ffp-model={precise,strict,fast}" - فلوٹنگ پوائنٹ نمبرز کے لیے خصوصی اختیارات کی ایک سیریز تک رسائی کو آسان بناتا ہے۔
    • "-fpch-codegen" اور "-fpch-debuginfo" کوڈ اور debuginfo کے لیے علیحدہ آبجیکٹ فائلوں کے ساتھ پہلے سے مرتب شدہ ہیڈر (PCH) بنانے کے لیے۔
    • "-fsanitize-coverage-allowlist" اور "-fsanitize-coverage-blocklist" کوریج جانچنے کے لیے سفید اور سیاہ فہرستوں کی جانچ پڑتال کریں۔
    • "-mtls-size={12,24,32,48}" TLS (تھریڈ-لوکل اسٹوریج) کا سائز منتخب کرنے کے لیے۔
    • تجرباتی RISC-V ایکسٹینشنز کو فعال کرنے کے لیے "-menable-experimental-extension"۔
  • 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، putenv کے غیر محفوظ استعمال کا پتہ لگانے کے لیے alpha.security.cert.pos.34c، webkit.NoUncountedMemberChecker اور webkit.RefCntblBaseVirtualDtor غیر محفوظ اقسام کے مسائل کا پتہ لگانے کے لیے، .cplusplus .SmartPtr null smart pointer dereference کے لیے چیک کرنے کے لیے۔
  • لنٹر میں بجنا صاف شامل کیا نئے چیکوں کا ایک بڑا حصہ۔
  • clangd کیشنگ سرور (Clang Server) نے کارکردگی کو بہتر کیا ہے اور نئی تشخیصی صلاحیتوں کا اضافہ کیا ہے۔

اہم بدعات LLVM 11.0:

  • تعمیراتی نظام کو Python 3 استعمال کرنے کے لیے تبدیل کر دیا گیا ہے۔ اگر Python 3 دستیاب نہیں ہے، تو Python 2 کے استعمال پر واپس جانا ممکن ہے۔
  • گو لینگویج (llgo) کے کمپائلر کے ساتھ فرنٹ اینڈ کو ریلیز سے خارج کر دیا گیا ہے، جسے مستقبل میں ری اسٹرکچر کیا جا سکتا ہے۔
  • ویکٹر-فنکشن-ابی-ویرینٹ وصف کو انٹرمیڈیٹ نمائندگی (IR) میں شامل کیا گیا ہے تاکہ کالوں کو ویکٹرائز کرنے کے لیے اسکیلر اور ویکٹر فنکشنز کے درمیان میپنگ کی وضاحت کی جا سکے۔ llvm::VectorType سے دو الگ الگ ویکٹر کی قسمیں ہیں llvm::FixedVectorType اور llvm::ScalableVectorType۔
  • udef اقدار پر مبنی برانچنگ اور undef اقدار کو معیاری لائبریری فنکشنز میں منتقل کرنے کو غیر متعینہ رویے کے طور پر تسلیم کیا جاتا ہے۔ میں
    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 (Enhanced 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 پروسیسرز کے لیے کوڈ جنریشن کے لیے سپورٹ پاور پی سی فن تعمیر کے لیے بیک اینڈ میں شامل کر دیا گیا ہے۔ لوپ آپٹیمائزیشن کو بڑھا دیا گیا ہے اور فلوٹنگ پوائنٹ سپورٹ کو بہتر بنایا گیا ہے۔
  • RISC-V فن تعمیر کا پسدید ان پیچوں کو قبول کرنے کی اجازت دیتا ہے جو تجرباتی توسیعی ہدایات کے سیٹوں کی حمایت کرتے ہیں جنہیں ابھی تک سرکاری طور پر منظور نہیں کیا گیا ہے۔
  • AVR فن تعمیر کے پس منظر کو تجرباتی زمرے سے مستحکم میں منتقل کر دیا گیا ہے، جو بنیادی تقسیم میں شامل ہے۔
  • x86 فن تعمیر کا پسدید Intel AMX اور TSXLDTRK ہدایات کو سپورٹ کرتا ہے۔ حملوں کے خلاف تحفظ شامل کیا گیا۔ LVI (لوڈ ویلیو انجیکشن)، اور سی پی یو پر کارروائیوں کے قیاس آرائی سے ہونے والے حملوں کو روکنے کے لیے ایک عمومی قیاس آرائی پر عملدرآمد کے ضمنی اثرات کو دبانے کا طریقہ کار بھی نافذ کرتا ہے۔
  • SystemZ فن تعمیر کے پس منظر میں، MemorySanitizer اور LeakSanitizer کے لیے سپورٹ شامل کر دی گئی ہے۔
  • Libc++ میں ریاضی کے مستقل کے ساتھ ہیڈر فائل کے لیے تعاون شامل کیا گیا۔ .
  • توسیع شدہ ایل ایل ڈی لنکر کی صلاحیتیں۔ ELF فارمیٹ کے لیے بہتر سپورٹ، بشمول اضافی اختیارات "-lto-emit-asm"، "-lto-hole-program-visibility"، "-print-archive-stats"، "-shuffle-sections"، " -thinlto- سنگل ماڈیول، "-منفرد"، "-rosegment"، "-threads=N"۔ ٹریس کو فائل میں محفوظ کرنے کے لیے "-time-trace" آپشن شامل کیا گیا، جس کا تجزیہ کروم میں chrome://tracing انٹرفیس کے ذریعے کیا جا سکتا ہے۔

ماخذ: opennet.ru

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