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

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

Кључна промена у новом издању било је укључивање Бок, фронтенд за језик Фортран. Фланг подржава Фортран 2018, ОпенМП 4.5 и ОпенАЦЦ 3.0, али развој пројекта још није завршен и фронт енд је ограничен на рашчлањивање кода и проверу исправности. Генерисање ЛЛВМ средњег кода још увек није подржано и да би се генерисале извршне датотеке, канонски код се генерише и прослеђује екстерном Фортран компајлеру.

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

  • Додата је могућност враћања стабла апстрактне синтаксе (АСТ) за неисправан Ц++ код, који се може користити за помоћ у дијагностицирању грешака и пружа додатне информације спољним услужним програмима као што су цланг-тиди и цлангд. Ова функција је подразумевано омогућена за Ц++ код и контролише се преко опција „-Ксцланг -ф[но-]рецовери-аст“.
  • Додати нови дијагностички режими:
    • „-Впоинтер-то-инт-цаст“ је група упозорења о пребацивању показивача на целобројни тип инт који не прихвата све могуће вредности.
    • “-Вунинитиализед-цонст-референце” – упозорење о прослеђивању неиницијализованих променљивих у параметрима функције који прихватају референтне аргументе са атрибутом “цонст”.
    • "-Вимплицит-цонст-инт-флоат-цонверсион" - подразумевано омогућено упозорење о имплицитној конверзији реалне константе у целобројни тип.
  • За АРМ платформу, обезбеђене су Ц функције уграђене у компајлер (Интринсицс), замењен ефикасним векторским инструкцијама Арм в8.1-М МВЕ и ЦДЕ. Доступне функције су дефинисане у датотекама заглавља арм_мве.х и арм_цде.х.
  • Додато скуп проширених целих типова _ЕктИнт(Н), који вам омогућава да креирате типове који нису вишеструки степена два, а који се могу ефикасно обрадити на ФПГА/ХЛС. На пример, _ЕктИнт(7) дефинише целобројни тип који се састоји од 7 битова.
  • Додати макрои који дефинишу подршку за уграђене Ц функције на основу АРМ СВЕ (Сцалабле Вецтор Ектенсион) упутстава:
    __АРМ_ФЕАТУРЕ_СВЕ, __АРМ_ФЕАТУРЕ_СВЕ_БФ16,
    __АРМ_ФЕАТУРЕ_СВЕ_МАТМУЛ_ФП32, __АРМ_ФЕАТУРЕ_СВЕ_МАТМУЛ_ФП64,
    __АРМ_ФЕАТУРЕ_СВЕ_МАТМУЛ_ИНТ8,
    __АРМ_ФЕАТУРЕ_СВЕ2, __АРМ_ФЕАТУРЕ_СВЕ2_АЕС,
    __АРМ_ФЕАТУРЕ_СВЕ2_БИТПЕРМ,
    __АРМ_ФЕАТУРЕ_СВЕ2_СХА3,
    __АРМ_ФЕАТУРЕ_СВЕ2_СМ4. На пример, макро __АРМ_ФЕАТУРЕ_СВЕ се дефинише приликом генерисања ААрцх64 кода постављањем опције командне линије "-марцх=армв8-а+све".

  • Ознака "-О" је сада идентификована са "-О1" оптимизационим режимом уместо "-О2".
  • Додате нове ознаке компајлера:
    • "-фстацк-цласх-протецтион" - омогућава заштиту од пресеци стека и гомиле.
    • "-ффп-екцептион-бехавиор={игноре,маитрап,стрицт}" - омогућава вам да изаберете режим руковања изузетком за бројеве са покретним зарезом.
    • "-ффп-модел={прецизно,строго,брзо}" - Поједностављује приступ низу специјализованих опција за бројеве са покретним зарезом.
    • "-фпцх-цодеген" и "-фпцх-дебугинфо" за генерисање унапред компајлираног заглавља (ПЦХ) са засебним објектним датотекама за код и информације за отклањање грешака.
    • „-фсанитизе-цовераге-алловлист“ и „-фсанитизе-цовераге-блоцклист“ за проверу покривености тестирањем беле и црне листе.
    • „-мтлс-сизе={12,24,32,48}“ да бисте изабрали ТЛС (локално складиштење нити) величину.
    • "-менабле-екпериментал-ектенсион" за омогућавање експерименталних РИСЦ-В екстензија.
  • Подразумевани режим за Ц је "-фно-цоммон", што омогућава ефикаснији приступ глобалним променљивим на неким платформама.
  • Подразумевана кеш меморија модула је премештена из /тмп у директоријум ~/.цацхе. Да бисте заменили, можете користити ознаку “-фмодулес-цацхе-патх=”.
  • Стандардни стандард језика Ц је ажуриран са гну11 на гну17.
  • Додата прелиминарна подршка за ГНУ Ц екстензију "асм инлине» за додавање асемблерских уметака. Екстензија се још анализира, али се ни на који начин не обрађује.
  • Могућности повезане са ОпенЦЛ и ЦУДА подршком су проширене. Додата подршка за дијагностику блокова ОпенЦЛ 2.0 и имплементиране нове ОпенМП 5.0 карактеристике.
  • Додата опција ИндентЕктернБлоцк услужном програму цланг-формат за поравнање унутар ектерн "Ц" и ектерн "Ц++" блокова.
  • Статички анализатор је побољшао руковање наслеђеним конструкторима у Ц++. Додате нове провере алпха.цоре.Ц11Лоцк и алпха.фуцхсиа.Лоцк за проверу брава, алпха.сецурити.церт.пос.34ц за откривање небезбедне употребе путенв, вебкит.НоУнцоунтедМемберЦхецкер и вебкит.РефЦнтблБасеВиртуалДтор за откривање проблема са небројеним типовима алпха .цплусплус .СмартПтр да провери нулту дереференцу паметног показивача.
  • У линтеру звекет-уредно додао је велики део нових чекова.
  • Цлангд сервер за кеширање (Цланг Сервер) је побољшао перформансе и додао нове дијагностичке могућности.

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

  • Систем изградње је пребачен на коришћење Питхон-а 3. Ако Питхон 3 није доступан, могуће је вратити се на коришћење Питхон-а 2.
  • Предњи крај са компајлером за језик Го (ллго) је искључен из издања, које може бити реструктурирано у будућности.
  • Атрибут вектор-функција-аби-варијанта је додат средњем представљању (ИР) да би се описао мапирање између скаларних и векторских функција за векторизацију позива. Од ллвм::ВецторТипе постоје два одвојена типа вектора ллвм::ФикедВецторТипе и ллвм::СцалаблеВецторТипе.
  • Гранање засновано на удеф вредностима и прослеђивање ундеф вредности функцијама стандардне библиотеке се препознаје као недефинисано понашање. ИН
    мемсет/мемцпи/меммове дозвољава прослеђивање ундеф показивача, али ако је параметар величине нула.

  • ЛЉИТ је додао подршку за извођење статичких иницијализација путем метода ЛЉИТ::инитиализе и ЛЉИТ::деинитиализе. Имплементирана је могућност додавања статичких библиотека у ЈИТДилиб помоћу класе СтатицЛибрариДефинитионГенератор. Додат Ц АПИ за ОРЦв2 (АПИ за изградњу ЈИТ компајлера).
  • Подршка за Цортек-А64, Цортек-А34, Цортек-А77 и Цортек-Кс78 процесоре је додата у позадину за ААрцх1 архитектуру. Имплементирана проширења АРМв8.2-БФ16 (БФлоат16) и АРМв8.6-А, укључујући РМв8.6-ЕЦВ (побољшана виртуелизација бројача), АРМв8.6-ФГТ (фино зрнасте замке), АРМв8.6-АМУ (виртуелизација монитора активности) и АРМв8.0-ДГХ (наговештај за прикупљање података). Обезбеђена је могућност генерисања кода за уграђене функције-везивања за СВЕ векторске инструкције.
  • Подршка за Цортек-М55, Цортек-А77, Цортек-А78 и Цортек-Кс1 процесоре је додата у позадину за АРМ архитектуру. Екстензије су имплементиране
    Армв8.6-А Матрик Мултипли и РМв8.2-АА32БФ16 БФлоат16.

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

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

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