Как преобразовать файл clang .ast в ir или файл bitcode?

#clang #abstract-syntax-tree #llvm-clang

#clang #абстрактное синтаксическое дерево #llvm-clang

Вопрос:

Прошу прощения за мой плохой английский.

 [root@xxxx] ~
❯ clang -emit-ast aa.c

[root@xxxx] ~
❯ xxd aa.ast | head
00000000: 4350 4348 0108 0000 ce0a 0000 07c1 b3d0  CPCH............
00000010: 8cc2 2bb8 022d c8c2 2bb0 c22f 8802 2bbc  .. ..-.. ../.. .
00000020: c228 acc2 4312 b442 29d0 4228 9042 28d0  .(..C..B).B(.B(.
00000030: 4228 3c30 472b bc02 29d4 022b 94c2 2fb8  B(<0G ..).. ../.

 
  • Я могу получить файл clang ast с помощью опции -emit-ast
  • и я хочу преобразовать его в llvm ir.
  • Но я не могу найти какой-либо интерфейс для его решения.

У кого-нибудь есть предложения??

Ответ №1:

Файлы Clang AST можно использовать вместо исходных файлов, поэтому работает следующий код:

 // main.cpp
#include <iostream>

int main() {
  std::cout << "Hello, world!" << std::endl;
  return 0;
}
 
 > clang   -emit-ast main.cpp -o a.ast
> clang   a.ast -o a.out
> ./a.out
Hello, world!
 

Отвечаю на ваш вопрос:

 > clang -emit-llvm -c aa.ast