ЛЛВМ
Оригинальный автор(ы) | Крис Лэттнер , Викрам Адв |
---|---|
Разработчик(и) | Группа разработчиков LLVM |
Первоначальный выпуск | 2003 год |
Стабильная версия | 18.1.8 [2]
/ 18 июня 2024 г. |
Репозиторий | |
Написано в | С++ |
Операционная система | Кросс-платформенный |
Тип | Компилятор |
Лицензия | UIUC ( в стиле BSD ) Лицензия Apache 2.0 с исключениями LLVM (версия 9.0.0 или новее) [3] |
Веб-сайт | www |
LLVM — это набор компилятора и инструментальной цепочки . технологий [4] который можно использовать для разработки внешнего интерфейса для любого языка программирования и внутреннего интерфейса для любой архитектуры набора команд . LLVM разработан на основе независимого от языка промежуточного представления (IR), которое служит переносимым высокого уровня языком ассемблера , который можно оптимизировать с помощью различных преобразований за несколько проходов. [5] Название LLVM изначально означало « Виртуальная машина низкого уровня», однако проект расширился, и официально это имя больше не является инициализмом .
LLVM написан на C++ и предназначен для оптимизации во время компиляции , времени компоновки , времени выполнения и во время простоя. Первоначально реализованный для C и C++, языково-независимый дизайн LLVM с тех пор породил большое количество интерфейсов: языки с компиляторами, которые используют LLVM (или которые не используют LLVM напрямую, но могут генерировать скомпилированные программы как LLVM IR), включают ActionScript , Ada . , C# для .NET , [6] [7] [8] Common Lisp , PicoLisp , Crystal , CUDA , D , Delphi , Дилан , Форт , [9] Fortran , FreeBASIC , Free Pascal , Halide , Haskell , байт-код Java , Julia , Kotlin , LabVIEW , язык G [10] [11] Lua , Objective-C , OpenCL , [12] PostgreSQL SQL и PLpgSQL, [13] Руби , [14] Ржавчина , [15] Скала , [16] [17] Свифт , Ходзё и Зиг .
История
[ редактировать ]Проект LLVM стартовал в 2000 году в Университете Иллинойса в Урбане-Шампейне под руководством Викрама Адве и Криса Латтнера . LLVM изначально разрабатывался как исследовательская инфраструктура для изучения методов динамической компиляции статических и динамических языков программирования. LLVM был выпущен под лицензией открытого исходного кода Университета Иллинойса/NCSA . [3] разрешительная лицензия свободного программного обеспечения . В 2005 году компания Apple Inc. наняла Латтнера и сформировала команду для работы над системой LLVM для различных целей в системах разработки Apple. [18] LLVM является неотъемлемой частью инструментов разработки Apple Xcode для macOS и iOS, начиная с Xcode 4 в 2011 году. [19]
В 2006 году Латтнер приступил к работе над новым проектом под названием Clang . Комбинация внешнего интерфейса Clang и внутреннего интерфейса LLVM называется Clang/LLVM или просто Clang.
Название LLVM изначально было инициализмом для виртуальной машины низкого уровня . Однако проект LLVM превратился в зонтичный проект, который имеет мало общего с тем, что большинство нынешних разработчиков называют виртуальной машиной . Это сделало инициализм «сбивающим с толку» и «неуместным», а с 2011 года LLVM «официально больше не является аббревиатурой». [20] но бренд, который относится к зонтичному проекту LLVM. [21] Проект включает в себя промежуточное представление LLVM LLVM (IR), отладчик , реализацию LLVM стандартной библиотеки C++ (с полной поддержкой C++11 и C++14). [22] ) и т. д. LLVM находится в ведении Фонда LLVM. Инженер-компилятор Таня Латтнер стала его президентом в 2014 году. [23] и занимал эту должность по состоянию на март 2024 г. [update]. [24]
«За разработку и внедрение LLVM» Ассоциация вычислительной техники вручила Викраму Адве, Крису Латтнеру и Эвану Ченгу 2012 премию ACM Software System Award . [25]
Изначально проект был доступен по лицензии UIUC . После выхода версии 9.0.0 в 2019 году [26] LLVM заменена лицензией Apache 2.0 с исключениями LLVM. [3] По состоянию на ноябрь 2022 г. [update] около 400 взносов не получили повторной лицензии. [27] [28]
Функции
[ редактировать ]LLVM может обеспечить средние уровни полной системы компилятора, принимая промежуточного представления код (IR) от компилятора и создавая оптимизированный IR. Затем этот новый IR можно преобразовать и связать с машинно-зависимым кодом ассемблера для целевой платформы. LLVM может принимать IR из GNU Compiler Collection (GCC) инструментальной цепочки , что позволяет использовать его с широким спектром существующих интерфейсов компилятора, написанных для этого проекта. LLVM также можно собрать с помощью gcc после версии 7.5. [29]
LLVM также может генерировать перемещаемый машинный код во время компиляции или компоновки или даже двоичный машинный код во время выполнения.
LLVM поддерживает независимый от языка набор команд и систему типов . [5] Каждая инструкция имеет статическую форму однократного присваивания (SSA), что означает, что каждая переменная (называемая типизированным регистром) назначается один раз, а затем фиксируется. Это помогает упростить анализ зависимостей между переменными. LLVM позволяет компилировать код статически, как в традиционной системе GCC, или оставлять его для поздней компиляции из IR в машинный код посредством JIT- компиляции , аналогично Java . Система типов состоит из базовых типов, таких как целые числа или числа с плавающей запятой , и пяти производных типов : указателей , массивов , векторов , структур и функций . Конструкцию типа на конкретном языке можно представить путем объединения этих базовых типов в LLVM. Например, класс в C++ может быть представлен сочетанием структур, функций и массивов указателей на функции .
JIT-компилятор LLVM может оптимизировать ненужные статические ветки программы во время выполнения и, таким образом, полезен для частичной оценки в тех случаях, когда программа имеет много опций, большинство из которых можно легко определить как ненужные в конкретной среде. Эта функция используется в OpenGL конвейере Mac OS X Leopard (v10.5) для обеспечения поддержки недостающих аппаратных функций. [30]
Графический код в стеке OpenGL можно оставить в промежуточном представлении, а затем скомпилировать при запуске на целевой машине. В системах с высокопроизводительными графическими процессорами (GPU) результирующий код остается довольно тонким, передавая инструкции графическому процессору с минимальными изменениями. В системах с графическими процессорами низкого уровня LLVM компилирует дополнительные процедуры, выполняемые на локальном центральном процессоре (ЦП), которые эмулируют инструкции, которые графический процессор не может выполнять внутри себя. LLVM улучшил производительность на машинах начального уровня с использованием чипсетов Intel GMA . Похожая система была разработана в рамках Gallium3D LLVMpipe и включена в оболочку GNOME , чтобы позволить ей работать без загрузки надлежащего драйвера 3D-оборудования. [31]
В 2011 году программы, составленные GCC, превзошли программы LLVM в среднем на 10%. [32] [33] В 2013 году компания phoronix сообщила, что LLVM догнала GCC, скомпилировав двоичные файлы примерно равной производительности. [34]
Компоненты
[ редактировать ]LLVM стал зонтичным проектом, состоящим из нескольких компонентов.
Интерфейсы
[ редактировать ]LLVM изначально был написан как замена существующему генератору кода в стеке GCC. [35] и многие интерфейсы GCC были модифицированы для работы с ним, в результате чего появился ныне несуществующий пакет LLVM-GCC. Модификации обычно включают этап IR из GIMPLE в LLVM, чтобы можно было использовать оптимизаторы и генератор кода LLVM вместо системы GIMPLE GCC. Apple была активным пользователем LLVM-GCC до Xcode 4.x (2013). [36] [37] Такое использование интерфейса GCC считалось в основном временной мерой, но с появлением Clang и преимуществами LLVM и современной модульной кодовой базы Clang (а также скоростью компиляции) оно по большей части устарело.
ЛЛВМ в настоящее время [ на момент? ] поддерживает компиляцию Ada , C , C++ , D , Delphi , Fortran , Haskell , Julia , Objective-C , Rust и Swift с использованием различных интерфейсов .
Широкий интерес к LLVM привел к нескольким попыткам разработать новые интерфейсы для многих языков. Наибольшее внимание привлек Clang, новый компилятор, поддерживающий C, C++ и Objective-C. Clang, поддерживаемый в первую очередь Apple, нацелен на замену компилятора C/Objective-C в системе GCC системой, которая легче интегрируется с интегрированными средами разработки (IDE) и имеет более широкую поддержку многопоточности . Поддержка директив OpenMP включена в Clang начиная с версии 3.8. [38]
Компилятор Utrecht Haskell может генерировать код для LLVM. Хотя генератор находился на ранней стадии разработки, во многих случаях он был более эффективен, чем генератор кода C. [39] Бэкэнд Glasgow Haskell Compiler (GHC) использует LLVM и обеспечивает ускорение скомпилированного кода на 30% по сравнению с компиляцией собственного кода с помощью GHC или генерации кода C с последующей компиляцией, при этом отсутствует только один из многих методов оптимизации, реализованных GHC. [40]
Многие другие компоненты находятся на разных стадиях разработки, включая, помимо прочего, компилятор Rust , интерфейс байт-кода Java , интерфейс Common Intermediate Language (CIL), MacRuby реализацию Ruby 1.9 на , различные интерфейсы для Standard ML и новый распределитель регистров раскраски графов . [ нужна ссылка ]
Промежуточное представительство
[ редактировать ]Ядром LLVM является промежуточное представление (IR), язык программирования низкого уровня, похожий на ассемблер. IR — это строго типизированный набор команд компьютера с сокращенным набором команд (RISC), который абстрагирует большинство деталей цели. Например, соглашение о вызовах абстрагируется через call
и ret
инструкции с явными аргументами. Кроме того, вместо фиксированного набора регистров IR использует бесконечный набор временных регистров формы %0, %1 и т. д. LLVM поддерживает три эквивалентные формы IR: удобочитаемый формат ассемблера, [41] формат в памяти, подходящий для внешних интерфейсов, и плотный формат битового кода для сериализации. Простое «Привет, мир!» программа в формате IR:
@.str = internal constant [14 x i8] c"Hello, world\0A\00"
declare i32 @printf(ptr, ...)
define i32 @main(i32 %argc, ptr %argv) nounwind {
entry:
%tmp1 = getelementptr [14 x i8], ptr @.str, i32 0, i32 0
%tmp2 = call i32 (ptr, ...) @printf( ptr %tmp1 ) nounwind
ret i32 0
}
Множество различных используемых соглашений и функций, предоставляемых разными целями, означают, что LLVM не может по-настоящему создать независимый от цели IR и перенацелить его, не нарушая некоторых установленных правил. Примеры целевой зависимости, помимо того, что явно упомянуто в документации, можно найти в предложении 2011 года для «wordcode», полностью независимого от цели варианта LLVM IR, предназначенного для распространения в Интернете. [42] Более практичный пример — PNaCl . [43]
Проект LLVM также представляет другой тип промежуточного представления, названный MLIR. [44] который помогает создавать повторно используемую и расширяемую инфраструктуру компилятора за счет использования архитектуры плагинов под названием Dialect. [45] Это позволяет использовать информацию более высокого уровня о структуре программы в процессе оптимизации, включая полиэдральную компиляцию .
Серверные части
[ редактировать ]В версии 16 LLVM поддерживает множество наборов инструкций , включая IA-32 , x86-64 , ARM , Qualcomm Hexagon , LoongArch , M68K , MIPS , NVIDIA Parallel Thread Execution также называется NVPTX (PTX, в документации LLVM ), PowerPC , AMD TeraScale , [46] большинство AMD последних графических процессоров (также называемых AMDGPU в документации LLVM), [47] SPARC , z/Architecture (также называемый SystemZ в документации LLVM) и XCore .
Некоторые функции недоступны на некоторых платформах. Большинство функций присутствует для IA-32, x86-64, z/Architecture, ARM и PowerPC. [48] RISC-V поддерживается начиная с версии 7.
В прошлом LLVM также полностью или частично поддерживал другие бэкенды, включая бэкэнд C, Cell SPU , mblaze (MicroBlaze) , [49] AMD R600, DEC/Compaq Альфа ( Альфа AXP ) [50] и Ниос2 , [51] но это оборудование по большей части устарело, и разработчики LLVM решили, что затраты на поддержку и обслуживание больше не оправданы. [ нужна ссылка ]
LLVM также поддерживает WebAssembly в качестве цели, позволяя выполнять скомпилированные программы в средах с поддержкой WebAssembly, таких как Google Chrome / Chromium , Firefox , Microsoft Edge , Apple Safari или WAVM . Компиляторы WebAssembly, совместимые с LLVM, обычно поддерживают в основном немодифицированный исходный код, написанный на C, C++, D, Rust, Nim, Kotlin и некоторых других языках.
Подпроект машинного кода LLVM (MC) — это платформа LLVM для перевода машинных инструкций между текстовыми формами и машинным кодом. Раньше LLVM полагалась на системный ассемблер или на инструментальную цепочку для перевода ассемблера в машинный код. Встроенный ассемблер LLVM MC поддерживает большинство целей LLVM, включая IA-32, x86-64, ARM и ARM64. Для некоторых целей, включая различные наборы инструкций MIPS, можно использовать встроенную поддержку ассемблера, но она все еще находится на стадии бета-тестирования. [ нужна ссылка ]
Линкер
[ редактировать ]Подпроект lld — это попытка разработать встроенный, независимый от платформы компоновщик для LLVM. [52] lld стремится устранить зависимость от стороннего компоновщика. По состоянию на май 2017 г. [update], lld поддерживает ELF , PE/COFF , Mach-O и WebAssembly. [53] в порядке убывания полноты. lld работает быстрее, чем обе версии GNU ld . [ нужна ссылка ]
В отличие от компоновщиков GNU, lld имеет встроенную поддержку оптимизации времени компоновки (LTO). Это позволяет ускорить генерацию кода, минуя использование плагина компоновщика, но, с другой стороны, запрещает взаимодействие с другими разновидностями LTO. [54]
Стандартная библиотека C++
[ редактировать ]Проект LLVM включает реализацию стандартной библиотеки C++ под названием libc++, имеющую двойную лицензию: лицензию MIT и лицензию UIUC . [55]
Начиная с версии 9.0.0, лицензия была заменена на лицензию Apache 2.0 с исключениями LLVM. [3]
Полли
[ редактировать ]Это реализует набор оптимизаций локальности кэша, а также автопараллелизм и векторизацию с использованием многогранной модели . [56]
Отладчик
[ редактировать ]Стандартная библиотека C
[ редактировать ]llvm-libc — это неполная, готовящаяся к выпуску независимая от ABI стандартная библиотека C , разработанная проектом LLVM и для него. [57]
Производные
[ редактировать ]Благодаря разрешительной лицензии многие поставщики выпускают собственные версии LLVM. Это официально признано в документации LLVM, которая по этой причине не рекомендует использовать номера версий при проверке функций. [58] Некоторые из поставщиков включают в себя:
- компании AMD Оптимизирующий компилятор C/C++ основан на LLVM, Clang и Flang.
- Apple поддерживает форк Xcode с открытым исходным кодом . [59]
- Arm предоставляет ряд наборов инструментов на основе LLVM, в том числе Arm Compiler for Embedded, предназначенный для разработки на «голом железе», и Arm Compiler для Linux, ориентированный на рынок высокопроизводительных вычислений.
- Flang , проект Fortran в разработке по состоянию на 2022 год. [update]
- IBM использует LLVM в своих компиляторах C/C++ и Fortran . [60]
- Intel внедрила LLVM в свой компилятор Intel C++ следующего поколения . [61]
- Национальная лаборатория Лос-Аламоса имеет ответвление LLVM 8 для параллельных вычислений под названием «Кицунэ». [62]
- Nvidia использует LLVM в реализации своего компилятора NVVM CUDA . [63] Компилятор NVVM отличается от серверной части «NVPTX», упомянутой в разделе «Бэкэнды» , хотя оба они генерируют код PTX для графических процессоров Nvidia.
- С 2013 года Sony использует основной интерфейсный компилятор Clang LLVM в комплекте разработки программного обеспечения (SDK) своей консоли PlayStation 4 . [64]
См. также
[ редактировать ]- Общий промежуточный язык
- ХХВМ
- С--
- Амстердамский компилятор (ACK)
- Оптимизирующий компилятор
- LLDB (отладчик)
- ГНУ молния
- Коллекция компиляторов GNU (GCC)
- Чистый
- OpenCL
- РПЦм
- Эмскрипты
- Формат распространения TenDRA
- Формат распределения нейтральной архитектуры (ANDF)
- Сравнение программного обеспечения для виртуализации приложений
- SPIR-V
- Открытия и инновации Университета Иллинойса в Урбана Шампейн
Литература
[ редактировать ]- Крис Лэттнер - Архитектура приложений с открытым исходным кодом - Глава 11 LLVM , ISBN 978-1257638017 , выпущен в 2012 году под лицензией CC BY 3.0 ( Открытый доступ ). [65]
- LLVM: Структура компиляции для анализа и трансформации программ на протяжении всей жизни , опубликованная статья Криса Латтнера и Викрама Адве.
Ссылки
[ редактировать ]- ^ «Логотип ЛЛВМ» . Проект инфраструктуры компилятора LLVM .
- ^ «ЛЛВМ 18.1.8» . 18 июня 2024 г. Проверено 18 июня 2024 г.
- ^ Jump up to: а б с д «ЛИЦЕНЗИЯ.TXT» . llvm.org . Проверено 24 сентября 2019 г.
- ^ «Проект инфраструктуры компилятора LLVM» . Проверено 11 марта 2016 г.
- ^ Jump up to: а б «Справочное руководство по языку LLVM» . Проверено 9 июня 2019 г.
- ^ «Анонсируем LLILC — новый компилятор на основе LLVM для .NET» . dotnetfoundation.org . Архивировано из оригинала 12 декабря 2021 года . Проверено 12 сентября 2020 г.
- ^ «Моно ЛЛВМ» . Проверено 10 марта 2013 г.
- ^ Латтнер, Крис (2011). «ЛЛВМ» . В Брауне, Эми; Уилсон, Грег (ред.). Архитектура приложений с открытым исходным кодом .
- ^ «МовФорт» . Гитхаб . 28 ноября 2021 г.
- ^ Уильям Вонг (23 мая 2017 г.). «В чем разница между LabVIEW 2017 и LabVIEW NXG?» . Электронный дизайн .
- ^ «Компилятор NI LabVIEW: под капотом» .
- ^ Ларабель, Майкл (11 апреля 2018 г.). «Khronos официально объявляет о своем переводчике LLVM/SPIR-V» . Фороникс.com .
- ^ «32.1. Что такое JIT-компиляция?» . Документация PostgreSQL . 12 ноября 2020 г. . Проверено 25 января 2021 г.
- ^ "Функции" . Рубидвижение . ООО «Скретчворк Девелопмент» . Проверено 17 июня 2017 г.
RubyMotion преобразует исходный код Ruby вашего проекта в ... машинный код с помощью [n] ... опережающего компилятора (AOT), основанного на LLVM.
- ^ «Генерация кода — Руководство по разработке Rustc» . www.rust-lang.org . Проверено 4 января 2023 г.
- ^ Риди, Джефф (24 сентября 2012 г.). «Компиляция Scala в LLVM» . Сент-Луис, Миссури, США . Проверено 19 февраля 2013 г.
- ^ «Скала Натив» . Проверено 26 ноября 2023 г.
- ^ Адам Трит (19 февраля 2005 г.), mkspecs и исправления для LLVM-компиляции Qt4 , заархивировано из оригинала 4 октября 2011 г. , получено 27 января 2012 г.
- ^ «Обзор инструментов разработчика» . Разработчик Apple . Яблоко. Архивировано из оригинала 23 апреля 2011 года.
- ^ Латтнер, Крис (21 декабря 2011 г.). «Имя LLVM» . llvm-dev (список рассылки) . Проверено 2 марта 2016 г.
«LLVM» официально больше не является аббревиатурой. Аббревиатура, которую он когда-то расширил, тоже сбивала с толку и была неуместна почти с самого первого дня. :) По мере того, как LLVM разросся и включил в себя другие подпроекты, он стал еще менее полезным и бессмысленным.
- ^ Латтнер, Крис (1 июня 2011 г.). «ЛЛВМ» . В Брауне, Эми; Уилсон, Грег (ред.). Архитектура приложений с открытым исходным кодом . Лулу.com. ISBN 978-1257638017 .
Название «LLVM» когда-то было аббревиатурой, но сейчас это просто бренд зонтичного проекта.
- ^ " "libc++" Стандартная библиотека C++" .
- ^ Латтнер, Крис (3 апреля 2014 г.). «Фонд LLVM» . Блог проекта LLVM .
- ^ "Совет директоров" . Фонд ЛЛВМ . Проверено 19 марта 2024 г.
- ^ «Премия ACM Software System» . АКМ.
- ^ Веннборг, Ганс (19 сентября 2019 г.). «[llvm-announce] Релиз LLVM 9.0.0» .
- ^ «Перелицензирование длинного хвоста» . Foundation.llvm.org . 11 ноября 2022 г.
- ^ «Перелицензирование LLVM — длинный хвост» . Проект ЛЛВМ . Получено 27 ноября 2022 г. - через Документы Google.
- ^ «⚙ D156286 [документы] Увеличьте минимальную версию GCC до 7,5» . Reviews.llvm.org . Проверено 28 июля 2023 г.
- ^ Латтнер, Крис (15 августа 2006 г.). «Крутое использование LLVM в Apple: стек OpenGL» . llvm-dev (список рассылки) . Проверено 1 марта 2016 г.
- ^ Майкл Ларабель, «Оболочка GNOME работает без поддержки драйвера графического процессора» , phoronix , 6 ноября 2011 г.
- ^ Макаров В. «SPEC2000: Сравнение LLVM-2.9 и GCC4.6.1 на x86» . Проверено 3 октября 2011 г.
- ^ Макаров В. «SPEC2000: Сравнение LLVM-2.9 и GCC4.6.1 на x86_64» . Проверено 3 октября 2011 г.
- ^ Ларабель, Майкл (27 декабря 2012 г.). «Компилятор LLVM/Clang 3.2, конкурирующий с GCC» . Проверено 31 марта 2013 г.
- ^ Латтнер, Крис ; Адве, Викрам (май 2003 г.). Архитектура GCC следующего поколения . Первый ежегодный саммит разработчиков GCC . Проверено 6 сентября 2009 г.
- ^ «Обзор компилятора LLVM» . разработчик.apple.com .
- ^ «Примечания к выпуску Xcode 5» . Apple Inc.
- ^ «Примечания к выпуску Clang 3.8» . Проверено 24 августа 2016 г.
- ^ «Компиляция Haskell в LLVM» . Проверено 22 февраля 2009 г.
- ^ «Блог проекта LLVM: компилятор Glasgow Haskell и LLVM» . 17 мая 2010 года . Проверено 13 августа 2010 г.
- ^ «Справочное руководство по языку LLVM» . LLVM.org . 10 января 2023 г.
- ^ Кан, Джин-Гу. «Wordcode: более целевой битовый код LLVM» (PDF) . Проверено 1 декабря 2019 г.
- ^ «PNaCl: переносимые исполняемые файлы собственного клиента» (PDF) . Архивировано из оригинала (PDF) 2 мая 2012 года . Проверено 25 апреля 2012 г.
- ^ «МЛИР» . mlir.llvm.org . Проверено 7 июня 2022 г.
- ^ «Диалекты – МЛИР» . mlir.llvm.org . Проверено 7 июня 2022 г.
- ^ Стеллард, Том (26 марта 2012 г.). «[LLVMdev] RFC: R600, новый серверный компонент для графических процессоров AMD» . llvm-dev (список рассылки).
- ^ «Руководство пользователя для серверной части AMDGPU — документация LLVM 15.0.0git» .
- ^ Замечания по реализации для конкретной цели: матрица целевых функций // Генератор кода, независимый от цели, LLVM, сайт LLVM.
- ^ «Удалить серверную часть mblaze из llvm» . Гитхаб . 25 июля 2013 года . Проверено 26 января 2020 г.
- ^ «Удалить альфа-сервер» . Гитхаб . 27 октября 2011 года . Проверено 26 января 2020 г.
- ^ «[Nios2] Удалить серверную часть Nios2» . Гитхаб . 15 января 2019 года . Проверено 26 января 2020 г.
- ^ «lld — компоновщик LLVM» . Проект ЛЛВМ . Проверено 10 мая 2017 г.
- ^ «Порт WebAssembly lld» .
- ^ «42446 — lld не может обрабатывать файлы GCC LTO» . bugs.llvm.org .
- ^ " "libc++" Стандартная библиотека C++" .
- ^ «Полли — Полиэдральная оптимизация для LLVM» .
- ^ «llvm-libc: стандартная библиотека, совместимая с ISO C — документация libc 15.0.0git» . libc.llvm.org . Проверено 18 июля 2022 г.
- ^ «Расширения языка Clang» . Документация Clang 12 .
Обратите внимание, что номера маркетинговых версий не следует использовать для проверки языковых функций, поскольку разные поставщики используют разные схемы нумерации. Вместо этого используйте макросы проверки функций.
- ^ «apple/llvm-проект» . Яблоко. 5 сентября 2020 г.
- ^ «Компиляторы IBM C/C++ и Fortran перенесут инфраструктуру с открытым исходным кодом LLVM» .
- ^ «Компиляторы Intel C/C++ завершают внедрение LLVM» . Интел . Проверено 17 августа 2021 г.
- ^ "ланл/кицунэ" . Лос-Аламосская национальная лаборатория. 27 февраля 2020 г.
- ^ «Спецификация NVVM IR 1.5» .
Текущий NVVM IR основан на LLVM 5.0.
- ^ Инструментарий разработчика для PS4 (PDF) , получено 24 февраля 2015 г.
- ^ Латтнер, Крис (15 марта 2012 г.). «Глава 11» . Архитектура приложений с открытым исходным кодом . Эми Браун, Грег Уилсон. ISBN 978-1257638017 .
Внешние ссылки
[ редактировать ]