Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 24.08.24 20:03
Оценка: :)))
Вот есть LLVM, который умеет генерить IR. И по сути этот IR мало чем отличается от языка C, только менее удобен для чтения человеком, но чуть более удобен для парсинга. В нем даже указатели и структуры есть.

Вопрос такой — не разумнее бы было генерить голый C (пусть даже сокращенную его версию) вместо IR?
Re: Про LLVM и IR
От: пффф  
Дата: 24.08.24 20:15
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот есть LLVM, который умеет генерить IR. И по сути этот IR мало чем отличается от языка C, только менее удобен для чтения человеком, но чуть более удобен для парсинга. В нем даже указатели и структуры есть.


S>Вопрос такой — не разумнее бы было генерить голый C (пусть даже сокращенную его версию) вместо IR?


Чтобы что?
Re[2]: Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 24.08.24 20:25
Оценка: :)
Здравствуйте, пффф, Вы писали:

П>Чтобы что?


Чтобы и человеку было удобно читать. А так разница между IR и C — не так уж значительна для парсера.

Ну ОК, могли бы адаптированный C сделать, чтобы вместо int было i32 и т.д., в спец. дефайнах.
Отредактировано 24.08.2024 20:26 Shmj . Предыдущая версия .
Re[3]: Про LLVM и IR
От: пффф  
Дата: 24.08.24 20:32
Оценка: +3
Здравствуйте, Shmj, Вы писали:

S>Чтобы и человеку было удобно читать.


а) Зачем человеку это читать? б) ты пробовал читать выхлоп cfront? Поверь, ассемблер или этот IR читать на порядок проще


S>А так разница между IR и C — не так уж значительна для парсера.


Значительна


S>Ну ОК, могли бы адаптированный C сделать, чтобы вместо int было i32 и т.д., в спец. дефайнах.


Нет смысла заниматься хренью
Re[3]: Про LLVM и IR
От: Muxa  
Дата: 25.08.24 04:40
Оценка: 1 (1) +1
П>>Чтобы что?

S>Чтобы и человеку было удобно читать. А так разница между IR и C — не так уж значительна для парсера.


Разница большая
LLVM IR в SSA форме, а C — нет.

А зачем его парсить?
Re[4]: Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 25.08.24 05:00
Оценка: :)
Здравствуйте, Muxa, Вы писали:

M>LLVM IR в SSA форме, а C — нет.


Во, это уже ответ не мальчика но мужа

А не проще ли сделать типа C, но в SSA-форме?

M>А зачем его парсить?


Ну как зачем ? Оно же модет из IR сделать ассемблер или сразу машинный код, типа так:

llc -x86-asm-syntax=intel example.ll -o example.s


, где ll — файл на IR. Оно ж его предварительно парсит/разбирает.
Re[5]: Про LLVM и IR
От: Muxa  
Дата: 25.08.24 05:15
Оценка:
M>>А зачем его парсить?
S>Ну как зачем ? Оно же модет из IR сделать ассемблер или сразу машинный код, типа так:

Кто оно?
Re[6]: Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 25.08.24 05:19
Оценка:
Здравствуйте, Muxa, Вы писали:

M>Кто оно?


Ну там же пример есть — llc — одна из тулуз LLVM.
Re[7]: Про LLVM и IR
От: Muxa  
Дата: 25.08.24 05:27
Оценка:
M>>Кто оно?

S>Ну там же пример есть — llc — одна из тулуз LLVM.


Для компиляции С используй clang/gcc
Re[8]: Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 25.08.24 05:41
Оценка:
Здравствуйте, Muxa, Вы писали:

S>>Ну там же пример есть — llc — одна из тулуз LLVM.

M>Для компиляции С используй clang/gcc

Ваш вопрос был — зачем парсить IR. И мой ответ — хотя бы для того, чтобы из IR сделать ассемблерный код.
Re[9]: Про LLVM и IR
От: Muxa  
Дата: 25.08.24 05:49
Оценка:
S>>>Ну там же пример есть — llc — одна из тулуз LLVM.
M>>Для компиляции С используй clang/gcc

S>Ваш вопрос был — зачем парсить IR. И мой ответ — хотя бы для того, чтобы из IR сделать ассемблерный код.


Ну,
чтобы тоже самое получить из С используй clang/gcc.

Чего не хватает?
Re[10]: Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 25.08.24 05:53
Оценка:
Здравствуйте, Muxa, Вы писали:

S>>Ваш вопрос был — зачем парсить IR. И мой ответ — хотя бы для того, чтобы из IR сделать ассемблерный код.


M>Ну,

M>чтобы тоже самое получить из С используй clang/gcc.

M>Чего не хватает?


А как из C++ получить C? Вот IR получить легко.
Re: Про LLVM и IR
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.08.24 05:55
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой — не разумнее бы было генерить голый C (пусть даже сокращенную его версию) вместо IR?

Не вполне понимаю смысл вашего вопроса.
Весь смысл LLVM — именно в IR. IR позволяет реализовывать широкий класс оптимизаций независимым от исходного языка образом.
Можете считать его "сокращённой версией голого C".
Вы же читали, собственно, вводную статью инициаторов проекта?
Цитирую:

The code representation is one of the key factors that differentiates LLVM from other systems. The representation is designed to provide high-level information about programs that is needed to support sophisticated analyses and transformations, while being low-level enough to represent arbitrary programs and to permit extensive optimization in static compilers.

Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 25.08.24 05:58
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Можете считать его "сокращённой версией голого C".


Но он ведь таковым не является. Если бы это была сокращенная версия C, что было бы разумно — то его можно было бы компилировать как C.
Re[3]: Про LLVM и IR
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.08.24 06:16
Оценка:
Здравствуйте, Shmj, Вы писали:
S>Но он ведь таковым не является. Если бы это была сокращенная версия C, что было бы разумно — то его можно было бы компилировать как C.
Эмм, по-прежнему непонятно, чего же вы хотите. IR можно компилировать точно так же, как С — получая на выходе бинарь для целевой платформы.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Про LLVM и IR
От: cserg  
Дата: 25.08.24 06:20
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Но он ведь таковым не является. Если бы это была сокращенная версия C, что было бы разумно — то его можно было бы компилировать как C.

Чтобы скомпилировать как C тоже нужен какой-нибудь IR. Зачем тода нужен дополнительный промежуточный этап преобразования C++ в C если можно сразу преобразовать C++ в IR?
Re[4]: Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 25.08.24 06:25
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>Но он ведь таковым не является. Если бы это была сокращенная версия C, что было бы разумно — то его можно было бы компилировать как C.

S>Эмм, по-прежнему непонятно, чего же вы хотите. IR можно компилировать точно так же, как С — получая на выходе бинарь для целевой платформы.

Было бы удобнее вместо нового IR использовать упрощеный C. Его и человеку читать привычнее и для парсера от IR не слишком будет отличаться, имхо.
Re[4]: Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 25.08.24 06:25
Оценка:
Здравствуйте, cserg, Вы писали:

S>>Но он ведь таковым не является. Если бы это была сокращенная версия C, что было бы разумно — то его можно было бы компилировать как C.

C>Чтобы скомпилировать как C тоже нужен какой-нибудь IR.

Имхо, можно вместо IR использовать упрощенный C. Что мешает?
Re[5]: Про LLVM и IR
От: cserg  
Дата: 25.08.24 06:44
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Имхо, можно вместо IR использовать упрощенный C. Что мешает?

Нет в C, тем более упрощенном, явной информации, которая нужна для оптимизации и генерации кода. Например, для каждой переменной нужно знать в каких местах программы она определяется и где используется, а для этого нужно сделать анализ потока управления и поиск псевдонимов и нужно сохранить их результаты в чем-то, из чего в конце концов получится IR.
Re[6]: Про LLVM и IR
От: Shmj Ниоткуда  
Дата: 25.08.24 06:56
Оценка:
Здравствуйте, cserg, Вы писали:

S>>Имхо, можно вместо IR использовать упрощенный C. Что мешает?

C>Нет в C, тем более упрощенном, явной информации, которая нужна для оптимизации и генерации кода. Например, для каждой переменной нужно знать в каких местах программы она определяется и где используется, а для этого нужно сделать анализ потока управления и поиск псевдонимов и нужно сохранить их результаты в чем-то, из чего в конце концов получится IR.

Ну может можно какое-то подмножество C сделать, чтобы там переменные определялись только 1 раз. Оно бы было валидным с т.з. С-компилятора, удобным для прочтения человеком — и выполняло бы те же самые функции, которые выполняет IR.

Или кроме требования определять переменные единожды — еще что-то важное есть?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.