Нашри маҷмӯи компилятори LLVM 11.0

Пас аз шаш моҳи рушд пешниҳод карда мешавад нашри лоиҳа LLVM 11.0 — Асбобҳои ба GCC мувофиқ (компиляторҳо, оптимизаторҳо ва генераторҳои код), тартиб додани барномаҳо ба биткоди фосилавии дастурҳои виртуалии ба RISC монанд (мошини виртуалии сатҳи паст бо системаи оптимизатсияи бисёрсатҳа). Псевдокоди тавлидшуда метавонад бо истифода аз компилятори JIT ба дастурҳои мошин бевосита дар вақти иҷрои барнома табдил дода шавад.

Тағйироти калидӣ дар версияи нав ворид кардани он буд Фланк, як фронт барои забони Фортран. Flang Fortran 2018, OpenMP 4.5 ва OpenACC 3.0 -ро дастгирӣ мекунад, аммо таҳияи лоиҳа ҳанӯз ба анҷом нарасидааст ва қисми пеш бо таҳлили код ва санҷиши дурустӣ маҳдуд аст. Насли рамзи фосилавии LLVM ҳанӯз дастгирӣ намешавад ва барои тавлиди файлҳои иҷрошаванда, рамзи каноникӣ тавлид мешавад ва ба компилятори берунии Fortran интиқол дода мешавад.

Беҳбудиҳо дар Clang 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, функсияҳои C дар компилятор сохта шудаанд (Мушкилот), бо дастурҳои самараноки векторӣ Arm v8.1-M MVE ва CDE иваз карда шудааст. Функсияҳои дастрас дар файлҳои сарлавҳаи arm_mve.h ва arm_cde.h муайян карда мешаванд.
  • Илова карда шуд маҷмӯи намудҳои васеъшудаи бутуни _ExtInt(N), ки ба шумо имкон медиҳад, ки намудҳоеро эҷод кунед, ки ба ду адад баробар нестанд, ки метавонанд дар FPGA/HLS самаранок коркард шаванд. Барои мисол, _ExtInt(7) як намуди бутуни иборат аз 7 битро муайян мекунад.
  • Макросҳои иловашуда, ки дастгирии функсияҳои дохилии C-ро дар асоси дастурҳои ARM SVE (Vektor Extension Scalable Extension) муайян мекунанд:
    __ARM_FATURE_SVE, __ARM_FATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. Масалан, макроси __ARM_FEATURE_SVE ҳангоми тавлиди коди AArch64 бо гузоштани опсияи сатри фармон "-march=armv8-a+sve" муайян карда мешавад.

  • Парчами "-O" ҳоло бо режими оптимизатсияи "-O1" ба ҷои "-O2" муайян карда шудааст.
  • Парчамҳои нави компилятор илова карда шуданд:
    • "-fstack-clash-protection" - имкон медиҳад, ки муҳофизат аз чорроҳаҳои стек ва теппа.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - ба шумо имкон медиҳад, ки ҳолати коркарди истисноро барои рақамҳои нуқтаи шинокунанда интихоб кунед.
    • "-ffp-model={precise,strict,fast}" - Дастрасӣ ба як қатор имконоти махсус барои рақамҳои нуқтаи шинокунандаро осон мекунад.
    • "-fpch-codegen" ва "-fpch-debuginfo" барои тавлиди сарлавҳаи пешакӣ тартибдодашуда (PCH) бо файлҳои объекти алоҳида барои код ва debuginfo.
    • "-fsanitize-coverage-allowlist" ва "-fsanitize-coverage-blocklist" барои тафтиши санҷиши фарогирии рӯйхатҳои сафед ва сиёҳ.
    • "-mtls-size={12,24,32,48}" барои интихоби андозаи TLS (нигаҳдории риштаи маҳаллӣ).
    • "-menable-experimental-extension" барои фаъол кардани васеъшавии таҷрибавии RISC-V.
  • Ҳолати пешфарз барои C "-fno-common" аст, ки имкон медиҳад дастрасии муассиртар ба тағирёбандаҳои глобалӣ дар баъзе платформаҳо.
  • Кэши модули пешфарз аз /tmp ба феҳристи ~/.cache кӯчонида шудааст. Барои бекор кардан, шумо метавонед парчами "-fmodules-cache-path =" -ро истифода баред.
  • Стандарти забони пешфарзии C аз gnu11 ба gnu17 навсозӣ шудааст.
  • Дастгирии пешакӣ барои васеъшавии GNU C илова карда шудааст "asm inline» барои илова кардани замимаҳои ассемблер. Васеъ ҳоло ҳам таҳлил карда мешавад, аммо ба ҳеҷ ваҷҳ коркард нашудааст.
  • Имкониятҳои марбут ба дастгирии OpenCL ва CUDA васеъ карда шуданд. Дастгирии иловагӣ барои ташхиси блоки OpenCL 2.0 ва хусусиятҳои нави OpenMP 5.0 татбиқ карда шуд.
  • Имконияти IndentExternBlock ба утилитаи clang-формат барои ҳамоҳангсозӣ дар блокҳои берунии "C" ва берунии "C++" илова карда шуд.
  • Анализатори статикӣ коркарди конструкторҳои меросиро дар C++ беҳтар кардааст. Илова чекҳои нави alpha.core.C11Lock ва alpha.fuchsia.Lock барои тафтиши қулфҳо, alpha.security.cert.pos.34c барои ошкор кардани истифодаи хатарноки putenv, webkit.NoUncountedMemberChecker ва webkit.RefCntblBaseVirtualDtor барои ошкор кардани мушкилот бо alpha, .cplusplus .SmartPtr барои санҷидани истинод ба нул нишоннамои интеллектуалӣ.
  • Дар линтер садои тоза илова кард як қисми зиёди чекҳои нав.
  • Сервери кэшкунии clangd (Clang Server) иҷрои онро беҳтар кард ва қобилиятҳои нави ташхисро илова кард.

асосӣ навовариҳо LLVM 11.0:

  • Системаи сохтан ба истифодаи Python 3 гузаштааст. Агар Python 3 дастрас набошад, имкон дорад ба истифодаи Python 2 баргардад.
  • Қисми асосӣ бо компилятори забони Go (llgo) аз нашр хориҷ карда шудааст, ки он метавонад дар оянда аз нав сохта шавад.
  • Аттрибути вектор-функсия-abi-variant ба намояндагии мобайнӣ (IR) барои тавсифи харитасозии байни функсияҳои скалярӣ ва векторӣ барои векторизатсияи зангҳо илова карда шудааст. Аз llvm::VectorType ду намуди векторҳои алоҳидаи llvm::FixedVectorType ва llvm::ScalableVectorType мавҷуданд.
  • Шохаҳо дар асоси арзишҳои udef ва интиқоли арзишҳои undef ба функсияҳои стандартии китобхона ҳамчун рафтори номуайян эътироф карда мешаванд. ДАР
    memset/memcpy/memmove имкон медиҳад, ки нишондиҳандаҳои undef гузаранд, аммо агар параметр бо андоза сифр бошад.

  • LLJIT барои иҷрои инициализатсияҳои статикӣ тавассути усулҳои LLJIT::initialize ва LLJIT::deinitialize дастгирии илова кардааст. Қобилияти илова кардани китобхонаҳои статикӣ ба JITDylib бо истифода аз синфи StaticLibraryDefinitionGenerator амалӣ карда шуд. Иловаи C API барои ORCv2 (API барои сохтани компиляторҳои JIT).
  • Дастгирии протсессори 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 (Fine Grained Traps), ARMv8.6-AMU (Virtualization Monitors Activity) ва ARMv8.0-DGH (Маслиҳати ҷамъоварии маълумот). Имконияти тавлиди код барои функсияҳои дарунсохт-пайвандҳо ба дастурҳои вектории SVE пешбинӣ шудааст.
  • Дастгирии протсессори Cortex-M55, Cortex-A77, Cortex-A78 ва Cortex-X1 ба пуштибонии меъмории ARM илова карда шудааст. Васеъкуниҳо амалӣ карда шуданд
    Armv8.6-A матритсаи зарб ва RMv8.2-AA32BF16 BFloat16.

  • Дастгирии тавлиди код барои коркардкунандагони POWER10 ба пуштибонии меъмории PowerPC илова карда шудааст. Оптимизатсияи давр васеъ карда шуд ва дастгирии нуқтаи шинокунанда такмил дода шуд.
  • Нусхаи пуштибонии меъмории RISC-V имкон медиҳад, ки часбҳоеро, ки маҷмӯи дастурҳои таҷрибавии васеъро, ки ҳанӯз расман тасдиқ нашудаанд, дастгирӣ кунанд.
  • Бозгашти меъмории AVR аз категорияи таҷрибавӣ ба устувор гузаронида шуд, ки ба тақсимоти асосӣ дохил карда шудааст.
  • Зеркашӣ барои меъмории x86 дастурҳои Intel AMX ва TXLDTRK -ро дастгирӣ мекунад. Муҳофизати иловагӣ аз ҳамлаҳо LVI (Injection Value Load) ва инчунин як механизми умумии рафъи Таъсири Спекулятории Иҷроро барои бастани ҳамлаҳое, ки дар натиҷаи иҷрои тахминии амалиётҳо дар CPU ба вуҷуд омадаанд, татбиқ мекунад.
  • Дар пуштибонии меъмории SystemZ, дастгирии MemorySanitizer ва LeakSanitizer илова карда шудааст.
  • Дастгирии файли сарлавҳа бо константаҳои математикӣ ба Libc++ илова карда шуд .
  • Васеъ карда шудааст Имкониятҳои пайвандгари LLD. Дастгирии мукаммал барои формати ELF, аз ҷумла имконоти иловагии "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shaffle-sections", " -thinlto- як-модули", "-нодир", "-rosegment", "-threads = N". Опсияи "--time-trace" барои захира кардани пай дар файл илова карда шуд, ки баъдан онро тавассути интерфейси chrome://tracing дар Chrome таҳлил кардан мумкин аст.

Манбаъ: opennet.ru

Илова Эзоҳ