clang IR
От: nen777w  
Дата: 04.03.15 14:20
Оценка:
Понадобился мне clang и его IR "ассемблер" в качестве эксперемента.
Хочу попробовать сделать на этом компилятор языка С (без стадартной библиотеки), для некой виртуальной машины со своей архитектурой, набором команд.
На самом деле я уже начал писать такой компилятор, но времени очень мало на него, а работы много.
И тут я вспомнил что есть llvm и что вроде можно даже прикрутить свой кодогенератор.

Во общем первым делом перед тем как браться писать свой back-end для кодогенерации надо бы я так понимаю разобраться с самим IR,
что бы понимать как его транслировать.
Получить IR я так понимаю можно так: clang -S -emit-llvm test.c -o test.ir

Правильно ли я рассуждаю? С clang в таком контексте дела никогда не имел.
Может есть где подобный примеры бекенда, буду признателен за линки.

Спасибо.
Re: clang IR
От: uzhas Ниоткуда  
Дата: 04.03.15 14:39
Оценка: +1 -1
Здравствуйте, nen777w, Вы писали:

N>буду признателен за линки.


http://www.google.com
Re[2]: clang IR
От: nen777w  
Дата: 04.03.15 15:53
Оценка: +1 -1
N>>буду признателен за линки.
U>http://www.google.com

Так можно отвечать на все вопросы задаваемые на форуме.
Естественно что я не рассчитываю увидеть линку на какой то мега-гига back-end разбираться в котором нужно будет несколько недель.
Вопрос был о чём то более простом, обучающем как это делать правильно, что бы потом не получить граблями, опыт граблей тоже тоже интересен.
Re: clang IR
От: watchmaker  
Дата: 04.03.15 16:04
Оценка:
Здравствуйте, nen777w, Вы писали:


N>Получить IR я так понимаю можно так: clang -S -emit-llvm test.c -o test.ir

Да.

N>Во общем первым делом перед тем как браться писать свой back-end для кодогенерации надо бы я так понимаю разобраться с самим IR,

N>что бы понимать как его транслировать.
Хочешь вручную его читать и транслировать? Если нет, то это может делать сам llvm. В этом случае предполагается, что начать нужно сразу с написания backend'a.
Re[3]: clang IR
От: Abyx Россия  
Дата: 04.03.15 18:16
Оценка:
Здравствуйте, nen777w, Вы писали:

N>>>буду признателен за линки.

U>>http://www.google.com

N>Так можно отвечать на все вопросы задаваемые на форуме.

N>Естественно что я не рассчитываю увидеть линку на какой то мега-гига back-end разбираться в котором нужно будет несколько недель.
N>Вопрос был о чём то более простом, обучающем как это делать правильно, что бы потом не получить граблями, опыт граблей тоже тоже интересен.

во-первых есть llvm.org/docs/ там есть статья про бекэнд, на которую тебе указали в соседнем посте,
и нам непонятно почему ты не начал свой вопрос с фразы "Я уже прочитал llvm.org/docs/*, и просмотрел исходники существующих бекэндов в сорцах ллвм"

во-вторых, простых бекэндов нету, они все сложные.
если тебе надо совсем-совсем просто — читай биткод, разбирай инструкции и транслируй их руками.
In Zen We Trust
Re[4]: clang IR
От: watchmaker  
Дата: 04.03.15 18:47
Оценка: 5 (2)
Здравствуйте, Abyx, Вы писали:


A>во-вторых, простых бекэндов нету, они все сложные.

Из относительно простых там всё же есть c-backend. Их в разное время было этак штуки три написано.
Соответственно, такой backend переводит промежуточный код обратно в программу на C. Конечно, они просты не просто так, а из-за того, что, например, в них нет очень важной для любой машины работы с регистрами. Но зато на их примере можно посмотреть на схему работы со внутренностями llvm, не отвлекаясь на низкоуровневые подробности конкретной архитектуры.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.