Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АСНИ.doc
Скачиваний:
47
Добавлен:
26.11.2019
Размер:
6.35 Mб
Скачать

История

История LLVM началась в 2000 году в Университете Иллинойса, а теперь LLVM используют такие гиганты индустрии как AdobeApple и Google. В частности, на LLVM основана подсистема OpenGL в Mac OS X 10.5, аiPhone SDK использует фронтенд GCC с бэкэндом на LLVM. Apple и Google являются одними из основных спонсоров проекта, а вдохновитель LLVM — Крис Латтнер — теперь работает в Apple.

Особенности

В основе LLVM лежит промежуточное представление кода (Intermediate Representation, IR), над которым можно производить трансформации во время компиляции, компоновки и выполнения. Из этого представления генерируется оптимизированный машинный код для целого ряда платформ, как статически, так и динамически (JIT-компиляция). LLVM 3.1 поддерживает статическую генерацию кода для x86x86-64ARMPowerPCSPARCMIPSQualcomm Hexagon. JIT (генерация машинного кода во время исполнения) поддержан для архитектур x86, x86_64, PowerPC, MIPS и частично ARM (только целочисленные, без NEON и Thumb) [1]

LLVM написана на C++ и портирована на большинство nix-систем и Windows. Система имеет модульную структуру, отдельные ее модули могут быть встроены в различные программные комплексы, она может расширяться дополнительными алгоритмами трансформации и кодогенераторами для новых аппаратных платформ.

В LLVM включена обертка API для OCaml.

Платформы

LLVM поддерживает работу на следующих платформах:

Операционная система

Архитектура

Компилятор

FreeBSD

x86

GCCClang

FreeBSD

AMD64

GCCClang

Linux

AMD64

GCCClang

Linux

x86

GCCClang

Mac OS X

PowerPC

GCC

Mac OS X

x86

GCC

Solaris

UltraSPARC

GCC

Cygwin/Win32

x86

GCC 3.4.X, Binutils 2.15

MinGW/Win32

x86

GCC 3.4.X, Binutils 2.15

LLVM имеет частичную поддержку следующих платформ:

Операционная система

Архитектура

Компилятор

Windows

x86

MSVC

AIX

PowerPC

GCC

Linux

PowerPC

GCC

Типы данных Простые типы

Целые числа произвольной разрядности

iразрядность

  • i1 — булево значение — 0 или 1

  • i32 — 32-разрядное целое

  • i17

  • i256

  • Генерация машинного кода для типов очень большой разрядности не поддерживается. Но для промежуточного представления никаких ограничений нет.

  • Числа считаются представленными в дополнительном коде. Различий между знаковыми и беззнаковыми целыми на уровне типов не делается: в тех случаях, когда это имеет значение, с ними работают разные инструкции.

Числа с плавающей точкой

floatdouble, типы, специфичные для конкретной платформы (например, x86_fp80)

Пустое значение

void