LLVM 13.0 компиляторлар жинағының шығарылымы

Алты айлық әзірлеуден кейін LLVM 13.0 жобасының шығарылымы ұсынылды - GCC-үйлесімді құралдар жинағы (компиляторлар, оңтайландырушылар және код генераторлары), ол бағдарламаларды RISC-тәрізді виртуалды нұсқаулардың аралық бит-кодына (төмен деңгейлі виртуалды машина) құрастырады. көп деңгейлі оңтайландыру жүйесі). Жасалған псевдокодты JIT компиляторы бағдарламаның орындалу сәтінде машиналық нұсқауларға түрлендіруі мүмкін.

Clang 13.0 жақсартулары:

  • Кепілдендірілген қосалқы қоңырауларға қолдау көрсетілді (функцияның ең соңында ішкі бағдарламаны шақыру, ішкі бағдарлама өзін шақырса, қосалқы рекурсияны қалыптастыру). Кепілдендірілген қосалқы қоңырауларға қолдау C++ тіліндегі "[[clang::musttail]]" атрибуты және "қайтару" мәлімдемесінде қолданылатын C тіліндегі "__attribute__((musttail))" арқылы қамтамасыз етіледі. Бұл мүмкіндік стек тұтынуын үнемдеу үшін кодты тегіс итерацияға орналастыру арқылы оңтайландыруларды жүзеге асыруға мүмкіндік береді.
  • «пайдалану» мәлімдемелері мен кланг кеңейтімдері «[[]]» пішімін пайдаланып C++ 11 стиліндегі атрибуттарды анықтауға қолдау көрсетеді.
  • Пайдаланушы кодында сақталған идентификаторларды көрсеткен кезде ескертуді көрсету үшін "-Wreserved-идентификатор" жалаушасы қосылды.
  • Параметр немесе айнымалы орнатылған, бірақ пайдаланылмаған жағдайда ескертуді көрсету үшін "-Wunused-but-set-parameter" және "-Wunused-birak-set-variable" жалаушалары қосылды.
  • Егер код алу әрекеттерінде нөлдік көрсеткішті пайдалану себебінен анықталмаған әрекетті енгізуі мүмкін болса, ескерту беру үшін "-Wnull-көрсеткіш-алу" жалаушасы қосылды.
  • Әрбір код файлы үшін өңделетін файлда анықталған әрбір функция үшін стек кадрларының өлшемі туралы ақпаратты қамтитын қосымша ".su" файлын жасау үшін "-fstack-usage" жалаушасы қосылды.
  • Статикалық анализаторға жаңа шығыс түрі қосылды - HTML және Sarif пішімінде есептерді бір уақытта жасауға әкелетін «sarif-html». Жаңа allocClassWithName тексеруі қосылды. «-анализер-дисплей-прогресс» опциясын көрсеткенде, әрбір функцияның талдау уақыты көрсетіледі. Смарт көрсеткіш анализаторы (alpha.cplusplus.SmartPtr) дерлік дайын.
  • OpenCL қолдауымен байланысты мүмкіндіктер кеңейтілді. cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields және __cl_clang_non_portable_kernel_param_types жаңа кеңейтімдерге қолдау қосылды. OpenCL 3.0 спецификациясын енгізу жалғасты. C үшін OpenCL 1.2 спецификациясы басқа нұсқа анық таңдалмаған болса, әдепкі бойынша пайдаланылады. C++ үшін «.clcpp» кеңейтімі бар файлдарды қолдау қосылды.
  • OpenMP 5.1 спецификациясында анықталған циклды түрлендіру директивалары («#pragma omp unrol» және «#pragma omp tile») қолдауы жүзеге асырылды.
  • Clang пішімінің утилитасына опциялар қосылды: түсініктемелер алдындағы бос орындар санын анықтау үшін SpacesInLineCommentPrefix, жазбалардың, ламбда өрнектерінің және препроцессор директивтерінің теңестірілуін басқару үшін IndentAccessModifiers, LambdaBodyIndentation және PPIndentWidth. Тақырып файлдарының (SortIncludes) тізімін сұрыптау мүмкіндіктері кеңейтілді. JSON файлдарын пішімдеуге қолдау қосылды.
  • Жаңа чектердің үлкен бөлігі linter clang-tidy қызметіне қосылды.

LLVM 13.0 негізгі инновациялары:

  • Ерекшеліктерді өңдеу сатысында Қайтаруға бағытталған бағдарламалау (ROP) әдістерін пайдаланып жасалған эксплойттардың орындалуынан қорғау үшін CET (Windows Control-flow Enforcement Technology) технологиясын пайдалану үшін «-ehcontguard» опциясы қосылды.
  • Debuginfo-тесті жобасының аты жобааралық сынақтар деп өзгертілді және отладка ақпаратымен шектелмей, әртүрлі жобалардың құрамдастарын тексеруге арналған.
  • Құрастыру жүйесі бірнеше дистрибутивтерді құруға қолдау көрсетеді, мысалы, біреуі утилиталары бар, екіншісі әзірлеушілерге арналған кітапханалармен.
  • AArch64 архитектурасына арналған серверлік бағдарламада Armv9-A RME (Аймақтарды басқару кеңейтімі) және SME (масштабталатын матрица кеңейтімі) кеңейтімдерін қолдау ассемблерде жүзеге асырылады.
  • ISA V68/HVX қолдауы Hexagon архитектурасына арналған серверге қосылды.
  • x86 сервері AMD Zen 3 процессорларына қолдауды жақсартты.
  • AMDGPU серверіне GFX1013 RDNA2 APU қолдауы қосылды.
  • Libc++ C++20 және C++2b стандарттарының жаңа мүмкіндіктерін енгізуді жалғастыруда, соның ішінде «концепциялар» кітапханасын аяқтау. MinGW негізіндегі Windows платформасы үшін std::filesystem қолдауы қосылды. Тақырып файлдары бөлінген , Және . Толық орындалмаған функционалдығы бар тақырып файлдарын өшіру үшін LIBCXX_ENABLE_INCOMPLETE_FEATURES құрастыру опциясы қосылды.
  • LLD байланыстырғышының мүмкіндіктері кеңейтілді, онда Big-endian Aarch64 процессорларына қолдау көрсетіледі және Mach-O сервері тұрақты бағдарламаларды байланыстыруға мүмкіндік беретін күйге келтірілді. Glibc-ті LLD арқылы байланыстыру үшін қажет жақсартулар қамтылған.
  • llvm-mca (Machine Code Analyzer) утилитасы ARM Cortex-A55 сияқты нұсқауларды ретпен орындайтын процессорларға қолдауды қосты (реттік суперскалярлық құбыр).
  • AArch64 платформасына арналған LLDB отладкасы меңзердің аутентификациясы, MTE (MemTag, жадты белгілеу кеңейтімі) және SVE регистрлеріне толық қолдау көрсетеді. Әрбір жадты бөлу операциясына тегтерді байланыстыруға және жадқа қатынасу кезінде көрсеткішті тексеруді ұйымдастыруға мүмкіндік беретін қосылды пәрмендер дұрыс тегпен байланысты болуы керек.
  • LLDB отладчик және Fortran тілінің фронтенді - Flang жобамен жасалған екілік жинақтарға қосылды.

Ақпарат көзі: opennet.ru

пікір қалдыру