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

История

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

Особенности

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

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

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

Платформы

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

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

Архитектура

Компилятор

FreeBSD

x86

GCC, Clang

FreeBSD

AMD64

GCC, Clang

Linux

AMD64

GCC, Clang

Linux

x86

GCC, Clang

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

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

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

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

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

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

void