Основной класс LLVMIRGenerator для дерева операций

В программной реализации генератор промежуточного представления LLVM IR представлен в виде класса LLVMIRGenerator. Содержательная часть объявления класса выглядит следующим образом:

class LLVMIRGenerator {
    void visit(const optree::Operation::Ptr &op);
    void visitBody(const optree::Operation::Ptr &op);

    void visit(const optree::ModuleOp &op);
    void visit(const optree::FunctionOp &op);
    void visit(const optree::ArithBinaryOp &op);
    // ...

  public:
    explicit LLVMIRGenerator(const std::string &moduleName);
    void process(const optree::Program &program);
    void dumpToFile(const std::string &filename) const;
};

Основным методом, выполняющим непосредственно генерацию кода, является process. Этот метод принимает дерево операций, полученное в процессе компиляции. Построенный код может быть в дальнейшем сохранен в файл с помощью метода dumpToFile.

Принцип построения кода состоит в обходе синтаксического дерева и добавления инструкций с помощью соответствующего модуля из состава фреймворка LLVM. Обход дерева производится рекурсивно от корня и начинается внутри метода process. Методы, отвечающие за обработку узлов дерева различных типов, называются visit.

Назад