std::unique_ptr<FunctionAST> ParseTopLevelExpr() { auto expr = ParseExpression(); auto proto = std::make_unique<PrototypeAST>("__anon_expr", std::vector<std::string>()); return std::make_unique<FunctionAST>(std::move(proto), std::move(expr)); } 然后我们从 llvm-project 中拷贝一...
// toplevelexpr ::= expression std::unique_ptr<FunctionAST> ParseTopLevelExpr() { auto expr = ParseExpression(); auto proto = std::make_unique<PrototypeAST>("", std::vector<std::string>()); return std::make_unique<FunctionAST>(std::move(proto), std::move(expr)); } 顶层代码的意...
static std::unique_ptr<legacy::FunctionPassManager> g_fpm; void InitializeModuleAndPassManager(void) { // Open a new module. g_llvm_module = std::make_unique<Module>("my cool jit", g_llvm_context); // Create a new pass manager attached to it. g_fpm = std::make_unique<legacy::F...
假设我们将新后端代码存放在llvm/lib/Target/MyArch目录下。 llvm/|-- lib/||-- Target/||-- MyArch/||-- CMakeLists.txt||-- MyArch.td||-- MyArch.h||-- MyArch.cpp||-- MyArchTargetMachine.h||-- MyArchTargetMachine.cpp||-- MyArchInstrInfo.cpp||-- MyArchRegisterInfo.cpp||-- M...
RISCVNDAGToDAGISelLegacy: 接受目标机器和优化级别作为参数,并使用std::make_unique 创建一个 RISCVNDAGToDAGISel 对象。 从以上代码可以看出,指令选择过程是一个Pass。 5.8 创建RISCVNISelDAGToDAG.cpp 这文件提供了 RISCVNDAGToDAGISel 类的实现,包括初始化静态成员变量、Select 函数的实现以及创建 RISCVNDAGTo...
return std::make_unique<CallExprAST>(IdName, std::move(Args)); } 解析器会在当前 token 类型为tok_identifier时调用ParseIdentifierExpr解析函数。其内部同样实现了递归分析和错处处理,并且通过预测分析的方式来判断当前的标识符是变量引用表达式还是函数调用表达式,从而分别进行处理。这里的预测分析是通过判断当前to...
auto Result = llvm::make_unique<NumberExprAST>(NumVal); getNextToken(); return std::move(Result); } /* * 最底层函数 --- 识别括号体 * 1.eat '(' * 2.识别主体 * 3.找 ')' */ static std::unique_ptr<ExprAST> ParseParenExpr() { ...
autoResult=llvm::make_unique<NumberExprAST>(NumVal); getNextToken();// consume the number returnstd::move(Result); } 1. 2. 3. 4. 5. 6. 再看看函数声明的: AI检测代码解析 /// prototype /// ::= id '(' id* ')' staticstd::unique_ptr<PrototypeAST>ParsePrototype() { ...
starts_with("preamble-") && FileName.ends_with(".pch")) return File; return std::unique_ptr<VolatileFile>(new VolatileFile(std::move(*File))); return std::make_unique<VolatileFile>(std::move(*File)); } private: 0 comments on commit f767295 Please sign in to comment. ...
TheModule = llvm::make_unique<llvm::Module>("hello,llvm",TheContext); TheModule ->dump();return0; } 输出结果如下: ; ModuleID = 'hello,llvm'source_filename="hello,llvm" 如何链接LLVM的库 使用LLVM库的话,需要一大堆参数. 下面是在我的电脑上的参数: ...