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

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

Нове карактеристике ЛЛВМ 9.0 укључују уклањање ознаке експерименталног дизајна са циљне РИСЦ-В платформе, Ц++ подршку за ОпенЦЛ, могућност поделе програма на динамички учитане делове у ЛЛД-у и имплементацију „асм гото“, који се користи у коду Линук кернела. либц++ је додао подршку за ВАСИ (ВебАссембли Систем Интерфаце), а ЛЛД је додао почетну подршку за ВебАссембли динамичко повезивање.

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

  • Додато имплементација израза специфичног за ГЦЦ "асм гото“, што вам омогућава да пређете са инлине блока асемблера на ознаку у Ц коду. Ова функција је потребна за прављење Линук кернела у режиму „ЦОНФИГ_ЈУМП_ЛАБЕЛ=и“ користећи Цланг на системима са архитектуром к86_64. Узимајући у обзир промене додате у претходним издањима, Линук кернел сада може да се изгради у Цланг-у за архитектуру к86_64 (раније је била подржана само зграда за архитектуру арм, аарцх64, ппц32, ппц64ле и мипс). Штавише, пројекти за Андроид и ЦхромеОС су већ конвертовани да користе Цланг за изградњу кернела, а Гоогле тестира Цланг као главну платформу за прављење кернела за своје производне Линук системе. У будућности, друге ЛЛВМ компоненте се могу користити у процесу изградње кернела, укључујући ЛЛД, ллвм-објцопи, ллвм-ар, ллвм-нм и ллвм-објдумп;
  • Додата експериментална подршка за коришћење Ц++17 у ОпенЦЛ-у. Специфичне карактеристике укључују подршку за атрибуте адресног простора, блокирање конверзије адресног простора према операторима за преливање типа, обезбеђивање векторских типова као у ОпенЦЛ за Ц, присуство специфичних ОпенЦЛ типова за слике, догађаје, канале, итд.
  • Додате нове заставице компајлера „-фтиме-траце“ и „-фтиме-траце-грануларити=Н“ за генерисање извештаја о времену извршавања различитих фаза фронтенда (парсинг, иницијализација) и бацкенд-а (фазе оптимизације). Извештај се чува у јсон формату, компатибилном са цхроме://трацинг и спеедсцопе.апп;
  • Додата обрада спецификације “__децлспец(аллоцатор)” и генерисање пратећих информација за отклањање грешака које вам омогућавају да надгледате потрошњу меморије у окружењу Висуал Студио;
  • За језик Ц, додата је подршка за макро „__ФИЛЕ_НАМЕ__“, који подсећа на макро „__ФИЛЕ__“, али укључује само име датотеке без пуне путање;
  • Ц++ је проширио подршку за атрибуте адресног простора како би покрио различите карактеристике Ц++-а, укључујући обрасце параметара и аргумената, референтне типове, закључивање типа повратка, објекте, аутоматски генерисане функције, уграђене операторе и још много тога.
  • Могућности повезане са подршком за ОпенЦЛ, ОпенМП и ЦУДА су проширене. Ово укључује почетну подршку за имплицитно укључивање уграђених ОпенЦЛ функција (додата је заставица „-фдецларе-опенцл-буилтинс“), имплементирано је проширење цл_арм_интегер_дот_продуцт, а дијагностички алати су проширени;
  • Унапређен је рад статичког анализатора и додата је документација о извођењу статичке анализе. Додате су заставице за приказ доступних модула за проверу и подржаних опција („-анализер-цхецкер[-оптион]-хелп“, „-анализер-цхецкер[-оптион]-хелп-алпха“ и „-анализер-цхецкер[-оптион]-хелп ” -програмер"). Додата је ознака „-анализер-веррор“ за третирање упозорења као грешака.
    Додати нови начини верификације:

    • сецурити.инсецуреАПИ.ДепрецатедОрУнсафеБуфферХандлинг за идентификацију небезбедних пракси за рад са баферима;
    • оск.МИГЦхецкер за тражење кршења МИГ (Мацх Интерфаце Генератор) правила позива;
    • оптин.оск.ОСОбјецтЦСтилеЦаст за проналажење нетачних конверзија КСНУ либкерн објеката;
    • апиМоделинг.ллвм са скупом функција за проверу моделирања за откривање грешака у ЛЛВМ кодној бази;
    • Стабилизовани код за проверу неиницијализованих Ц++ објеката (УнинитиализедОбјецт у пакету оптин.цплусплус);
  • Услужни програм цланг-формат је додао подршку за форматирање кода у језику Ц# и пружа подршку за стил форматирања кода који користи Мицрософт;
  • цланг-цл, алтернативни интерфејс командне линије који обезбеђује компатибилност на нивоу опција са компајлером цл.еке укљученим у Висуал Студио, додао је хеуристику за третирање непостојећих датотека као опција командне линије и приказивање одговарајућег упозорења (на пример, када се покреће "цланг-цл /диагностиц :царет /ц тест.цц");
  • Велики део нових провера је додат у линтер цланг-тиди, укључујући додатне провере специфичне за ОпенМП АПИ;
  • Проширен могућности сервера цлангд (Цланг Сервер), у којем је подразумевано омогућен режим изградње позадинског индекса, додата је подршка за контекстуалне акције са кодом (преузимање променљивих, проширење ауто и макро дефиниција, конверзија излазних стрингова у необрађене), могућност приказа упозорења од Цланг-тиди, проширена дијагностика грешака у датотекама заглавља и додата могућност приказа информација о хијерархији типова;

Главни иновације ЛЛВМ 9.0:

  • ЛЛД линкеру је додата експериментална функција партиционисања, која вам омогућава да поделите један програм на неколико делова, од којих се сваки налази у засебној ЕЛФ датотеци. Ова функција вам омогућава да покренете главни део програма, који ће учитавати остале компоненте по потреби током рада (на пример, можете да одвојите уграђени ПДФ прегледач у засебну датотеку, која ће се учитати само када корисник отвори ПДФ фајл).

    ЛЛД Линкер донео у стање погодно за повезивање Линук кернела за арм32_7, арм64, ппц64ле и к86_64 архитектуре.
    Нове опције "-" (излаз у стдоут), "-[но-]аллов-схлиб-ундефинед", "-ундефинед-глоб", "-нмагиц", "-омагиц", "-депендент-либрари", " - з ифунц-ноплт" и "-з цоммон-паге-сизе". За архитектуру ААрцх64, додата је подршка за упутства за БТИ (Бранцх Таргет Индицатор) и ПАЦ (Поинтер Аутхентицатион Цоде). Подршка за МИПС, РИСЦ-В и ПоверПЦ платформе је значајно побољшана. Додата почетна подршка за динамичко повезивање за ВебАссембли;

  • У либц++ имплементиран функције ссизе, стд::ис_цонстант_евалуатед, стд::мидпоинт и стд::лерп, методе „фронт“ и „бацк“ су додате у стд::спан, атрибути типова стд::ис_унбоундед_арраи и стд::ис_боундед_арраи су додати , стд могућности су проширене: :атомиц. Подршка за ГЦЦ 4.9 је укинута (може се користити са ГЦЦ 5.1 и новијим издањима). Додата подршка ЈЕСАМ ЛИ ЈА (ВебАссембли Систем Интерфаце, интерфејс за коришћење ВебАссембли-а ван претраживача);
  • Додате су нове оптимизације. Омогућена конверзија мемцмп позива у бцмп у неким ситуацијама. Имплементирано изостављање провере опсега за табеле скокова у којима су доњи блокови прекидача недоступни или када се инструкције не користе, на пример, када се позивају функције типа воид;
  • Позадина за РИСЦ-В архитектуру је стабилизована, која више није позиционирана као експериментална и изграђена је подразумевано. Пружа пуну подршку за генерисање кода за РВ32И и РВ64И варијанте скупа инструкција са МАФДЦ екстензијама;
  • Бројна побољшања су направљена на позадинским површинама за архитектуре Кс86, ААрцх64, АРМ, СистемЗ, МИПС, АМДГПУ и ПоверПЦ. На пример, за архитектуру
    ААрцх64 је додао подршку за СВЕ2 (Сцалабле Вецтор Ектенсион 2) и МТЕ (Мемори Таггинг Ектенсионс) инструкције; у АРМ бацкенд, подршка за Армв8.1-М архитектуру и МВЕ (М-Профиле Вецтор Ектенсион) је додата. Подршка за ГФКС10 (Нави) архитектуру је додата у АМДГПУ позадину, могућности позивања функција су подразумевано омогућене, а комбиновани пролаз је активиран ЛЦС (Дата-Параллел Примитивес).

  • ЛЛДБ програм за отклањање грешака сада има истицање боја за трагове уназад и додатну подршку за блокове ДВАРФ4 дебуг_типес и ДВАРФ5 дебуг_инфо;
  • Подршка за објектне и извршне датотеке у ЦОФФ формату је додата услужним програмима ллвм-објцопи и ллвм-стрип.

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

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