Skip to content

Instantly share code, notes, and snippets.

@tvorogme
Created July 14, 2017 18:08
Show Gist options
  • Save tvorogme/b99c4e6d1970df8aed2ed45c64281ea5 to your computer and use it in GitHub Desktop.
Save tvorogme/b99c4e6d1970df8aed2ed45c64281ea5 to your computer and use it in GitHub Desktop.

LLVM

Low Level Virtual Machine

^ но виртуалки там нет

Язык LLVM IR

LLVM - фреймворк для создания компилятора.

Компиляторы:

  1. GCC
  2. Clang
  3. Visual Studio

% Воткнуть в то, как работают компиляторы.

Токены

(for, while) единица управляющая конструкция не оч верно и понятно, переменная - тоже токен. Токен может состоять из токенов.

a = 5

^ лексема языка


Как работает компилятор?

  1. Лексический анализатор (LEX) - он разбивает на токены.
  2. Синтаксический анализ, представляется ввиде дерева mainstream компиляторы

После синтаксического дерева - работает компилятор или интерпретатором.

JIT компиляция - новый вид компиляции just in time

GCC Frontend?

^ говорят не интересно

Frontend -> Optimizer -> Code Generator

Gnu Compalier Collection - GCC это сборка компиляторов и у каждого есть ^

А LLVM это единая штука, поэтому это хорошо

Clang

Clang -> LLVM Optimizer -> Code Generator

LLVM-based compiler

C/C++ \ / x86/x64

Haskell \ -> LLVM Optimizer -> / PowerPC

Fortrun / \ Javascript

LLVM IR: Особенности

  1. SSA - Static Single Assigment - одна переменная может быть присвоена только 1 раз

  2. Phi - инструкций Если GoTo инструкция - куда пришли, то phi - откуда

  3. Целочисленные типы данных любой размерности (i64, i32, i17, i5,...) n битное целое число Если вы написали i1, а платформа не поддерживает - то оно само перейдёт в i8

  4. Только указатели

  5. Поддержка структур данных, векторов и т.д.

  6. Система типов данных рекурсивна

  7. Богатый набор инструкций

LLVM IR - это как Assembler для всех платформ

LLVM JIT

Just In Time for c++/c/etc.

by [email protected]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment