Понадобился мне clang и его IR "ассемблер" в качестве эксперемента.
Хочу попробовать сделать на этом компилятор языка С (без стадартной библиотеки), для некой виртуальной машины со своей архитектурой, набором команд.
На самом деле я уже начал писать такой компилятор, но времени очень мало на него, а работы много.
И тут я вспомнил что есть llvm и что вроде можно даже прикрутить свой кодогенератор.
Во общем первым делом перед тем как браться писать свой back-end для кодогенерации надо бы я так понимаю разобраться с самим IR,
что бы понимать как его транслировать.
Получить IR я так понимаю можно так: clang -S -emit-llvm test.c -o test.ir
Правильно ли я рассуждаю? С clang в таком контексте дела никогда не имел.
Может есть где подобный примеры бекенда, буду признателен за линки.
Спасибо.
Здравствуйте, nen777w, Вы писали:
N>буду признателен за линки.
http://www.google.com
N>>буду признателен за линки.
U>http://www.google.com
Так можно отвечать на все вопросы задаваемые на форуме.
Естественно что я не рассчитываю увидеть линку на какой то мега-гига back-end разбираться в котором нужно будет несколько недель.
Вопрос был о чём то более простом, обучающем как это делать правильно, что бы потом не получить граблями, опыт граблей тоже тоже интересен.
Здравствуйте, nen777w, Вы писали:
N>Получить IR я так понимаю можно так: clang -S -emit-llvm test.c -o test.ir
Да.
N>Во общем первым делом перед тем как браться писать свой back-end для кодогенерации надо бы я так понимаю разобраться с самим IR,
N>что бы понимать как его транслировать.
Хочешь вручную его читать и транслировать? Если нет, то это может делать сам llvm. В этом случае предполагается, что начать нужно сразу с
написания backend'a.
Здравствуйте, nen777w, Вы писали:
N>>>буду признателен за линки.
U>>http://www.google.com
N>Так можно отвечать на все вопросы задаваемые на форуме.
N>Естественно что я не рассчитываю увидеть линку на какой то мега-гига back-end разбираться в котором нужно будет несколько недель.
N>Вопрос был о чём то более простом, обучающем как это делать правильно, что бы потом не получить граблями, опыт граблей тоже тоже интересен.
во-первых есть llvm.org/docs/ там есть статья про бекэнд, на которую тебе указали в соседнем посте,
и нам непонятно почему ты не начал свой вопрос с фразы "Я уже прочитал llvm.org/docs/*, и просмотрел исходники существующих бекэндов в сорцах ллвм"
во-вторых, простых бекэндов нету, они все сложные.
если тебе надо совсем-совсем просто — читай биткод, разбирай инструкции и транслируй их руками.