Издање комплета компајлера ЛЛВМ 12.0

Након шест месеци развоја, представљено је издање ЛЛВМ 12.0 пројекта - ГЦЦ-компатибилног комплета алата (компајлери, оптимизатори и генератори кода) који компајлира програме у средњи бит код виртуелних инструкција сличних РИСЦ-у (виртуелна машина ниског нивоа са систем оптимизације на више нивоа). Генерисани псеудокод се може конвертовати помоћу ЈИТ компајлера у машинске инструкције директно у време извршавања програма.

Побољшања у Цланг 12.0:

  • Подршка за атрибуте „вероватно“ и „невероватно“ предложене у стандарду Ц++20 је имплементирана и омогућена подразумевано, омогућавајући оптимизатору да буде обавештен о вероватноћи покретања условне конструкције (на пример, „[[вероватно ]] ако (насумично > 0) {“).
  • Додата подршка за АМД Зен 3 (-марцх=знвер3), Интел Алдер Лаке (-марцх=алдерлаке) и Интел Саппхире Рапидс (-марцх=саппхирерапидс) процесоре.
  • Додата подршка за "-марцх=к86-64-в[234]" заставице за одабир нивоа к86-64 архитектуре (в2 - покрива ССЕ4.2, СССЕ3, ПОПЦНТ и ЦМПКСЦХГ16Б екстензије; в3 - АВКС2 и МОВБЕ; в4 - АВКС-512 ) .
  • Додата подршка за процесоре Арм Цортек-А78Ц (цортек-а78ц), Арм Цортек-Р82 (цортек-р82), Арм Неоверсе В1 (неоверсе-в1), Арм Неоверсе Н2 (неоверсе-н2) и Фујитсу А64ФКС (а64фк). На пример, да бисте омогућили оптимизације за Неоверсе-В1 ЦПУ, можете навести „-мцпу=неоверсе-в1“.
  • За архитектуру ААрцх64, нове заставице компајлера „-моутлине-атомицс“ и „-мно-оутлине-атомицс“ су додате да би се омогућиле или онемогућиле помоћне функције атомске операције, као што је „__аарцх64_цас8_релак“. Такве функције откривају током извршавања да ли је доступна подршка за ЛСЕ (Ларге Систем Ектенсионс) и користе дата атомска процесорска упутства или се враћају на коришћење ЛЛ/СЦ (Лоад-линк/сторе-цондитионал) инструкција за синхронизацију.
  • Додата је опција "-фбинутилс-версион" за одабир циљне верзије бинутилс пакета ради компатибилности са старијим понашањем линкера и асемблера.
  • За ЕЛФ извршне датотеке, када је наведена ознака „-гз“, компресија информација за отклањање грешака помоћу библиотеке злиб је подразумевано омогућена (гз=злиб). Повезивање резултујућих објектних датотека захтева ллд или ГНУ бинутилс 2.26+. Да бисте вратили компатибилност са старијим верзијама бинутилса, можете навести "-гз=злиб-гну".
  • Показивач 'тхис' се сада обрађује са ненулл и дереференцираним (Н) проверама. Да бисте уклонили атрибут ноннулл, ако треба да користите НУЛЛ вредности, можете користити опцију "-фделете-нулл-поинтер-цхецкс".
  • На Линук платформи, режим "-фасинцхроноус-унвинд-таблес" је омогућен за ААрцх64 и ПоверПЦ архитектуре за генерисање табела позива за одмотавање, као у ГЦЦ-у.
  • У „#прагма цланг лооп вецторизе_видтх“ додата је могућност да се наведу „фиксне“ (подразумеване) и „скалабилне“ опције за избор методе векторизације. Режим „скалабилног“, независно од дужине вектора, је експерименталан и може се користити на хардверу који подржава скалабилну векторизацију.
  • Побољшана подршка за Виндовс платформу: Припремљени су званични бинарни склопови за Виндовс на Арм64 системима, укључујући Цланг компајлер, ЛЛД линкер и цомпилер-рт рунтиме библиотеке. Приликом израде за МинГВ циљне платформе, .еке суфикс се додаје, чак и приликом унакрсног компајлирања.
  • Могућности повезане са подршком за ОпенЦЛ, ОпенМП и ЦУДА су проширене. Додате опције "-цл-стд=ЦЛ3.0" и "-цл-стд=ЦЛ1.0" за избор макро опција за ОпенЦЛ 3.0 и ОпенЦЛ 1.0. Дијагностички алати су проширени.
  • Додата подршка за инструкције ХРЕСЕТ, УИНТР и АВКСВННИ имплементиране у неке процесоре засноване на к86.
  • На к86 системима је омогућена подршка за опцију "-мтуне=", омогућавајући изабране микроархитектонске оптимизације без обзира на вредност "-марцх=".
  • Статички анализатор је побољшао обраду неких ПОСИКС функција и значајно побољшао одређивање резултата условних операција када постоји неколико симболичких вредности у поређењу. Додате су нове провере: фуцхиа.ХандлеЦхецкер (дефинише ручке у структурама), вебкит.УнцоунтедЛамбдаЦаптуресЦхецкер вебкит и алпха.вебкит.УнцоунтедЛоцалВарсЦхецкер (узима у обзир посебности рада са показивачима у коду ВебКит енгине-а).
  • У изразима који се користе у контексту константи, употреба уграђених функција __буилтин_битреверсе*, __буилтин_ротателефт*, __буилтин_ротатеригхт*, _мм_попцнт*, _бит_сцан_форвард, __бсфд, __бсфк, __бит_сцан_бсбсрд,вап_реверсе, __бсвап64, __ је дозвољен бсвапк , _цастф*, __рол* и __рор*.
  • Додата опција БитФиелдЦолонСпацинг услужном програму цланг-формат за одабир размака око идентификатора, колона и дефиниција поља.
  • Цлангд сервер за кеширање (Цланг Сервер) на Линук платформи је значајно смањио потрошњу меморије током дуготрајног рада (периодични позиви маллоц_трим-у су обезбеђени за враћање слободних меморијских страница у оперативни систем).

Кључне иновације у ЛЛВМ 12.0:

  • Подршка за алатку за прављење ллвм-буилд написану у Питхон-у је укинута, а уместо тога пројекат је у потпуности прешао на коришћење ЦМаке система изградње.
  • У бацкенд-у за ААрцх64 архитектуру, побољшана је подршка за Виндовс платформу: обезбеђено је исправно генерисање асемблерског излаза за циљне Виндовс системе, оптимизовано је генерисање података о позивима за одмотавање (величина таквих података је смањена за 60 %), могућност креирања података за одмотавање помоћу асемблера је додата директивама .сех_*.
  • Позадински део за ПоверПЦ архитектуру садржи нове оптимизације за петље и инлине примену, проширену подршку за Повер10 процесоре, додатну подршку за ММА упутства за манипулацију матрицом и побољшану подршку за АИКС оперативни систем.
  • Позадина к86 додаје подршку за АМД Зен 3, Интел Алдер Лаке и Интел Саппхире Рапидс процесоре, као и упутства за ХРЕСЕТ, УИНТР и АВКСВННИ процесоре. Подршка за МПКС (Мемори Протецтион Ектенсионс) за проверу показивача како би се осигурало да границе меморије више нису подржане (ова технологија није широко распрострањена и већ је уклоњена из ГЦЦ-а и звекета). Додата подршка асемблеру за префиксе {дисп32} и {дисп8} и суфиксе .д32 и .д8 за контролу величине помака и скокова операнда. Додан је нови атрибут "туне-цпу" за контролу укључивања микроархитектонских оптимизација.
  • Нови режим „-фсанитизе=унсигнед-схифт-басе” је додат детектору целобројних проблема (целобројни дезинфикатор, „-фсанитизе=интегер”) за откривање прекорачења целих бројева без предзнака након померања бита улево.
  • У разним детекторима (асан, цфи, лсан, мсан, тсан, убсан санитизер) додата је подршка за Линук дистрибуције са стандардном Мусл библиотеком.
  • Могућности ЛЛД линкера су проширене. Побољшана подршка за ЕЛФ формат, укључујући додатне опције “--депенденци-филе”, “-еррор-хандлинг-сцрипт”, “-лто-псеудо-пробе-фор-профилинг”, “-но-лто-вхоле-програм” -видљивост" " Побољшана подршка за МинГВ. За Мацх-О формат (мацОС), имплементирана је подршка за арм64, арм и и386 архитектуре, оптимизације времена везе (ЛТО) и одмотавање стека за руковање изузетцима.
  • Либц++ имплементира нове карактеристике стандарда Ц++20 и започео је развој карактеристика Ц++2б спецификације. Додата подршка за прављење са онемогућавањем подршке за локализацију (“-ДЛИБЦКСКС_ЕНАБЛЕ_ЛОЦАЛИЗАТИОН=ОФФ”) и уређаја за генерисање псеудо-случајних бројева (“-ДЛИБЦКСКС_ЕНАБЛЕ_РАНДОМ_ДЕВИЦЕ=ОФФ”).

Извор: опеннет.ру

Додај коментар