【发布时间】:2016-02-20 16:45:21
【问题描述】:
我正在关注 llvm 的教程,了解他们自己的简单编程语言“Kaleidoscope”,我的语言中有一个明显的功能,本教程似乎没有涵盖。我只是想像 C++ 那样将任何双精度输出打印到标准输出:
std::cout << 5.0;
我的语言会做类似的事情
print(5.0);
Third chapter of llvm's tutorial 涵盖函数调用。他们使用的代码是:
Value *CallExprAST::codegen() {
// Look up the name in the global module table.
Function *CalleeF = TheModule->getFunction(Callee);
if (!CalleeF)
return ErrorV("Unknown function referenced");
// If argument mismatch error.
if (CalleeF->arg_size() != Args.size())
return ErrorV("Incorrect # arguments passed");
std::vector<Value *> ArgsV;
for (unsigned i = 0, e = Args.size(); i != e; ++i) {
ArgsV.push_back(Args[i]->codegen());
if (!ArgsV.back())
return nullptr;
}
return Builder.CreateCall(CalleeF, ArgsV, "calltmp");
}
如何实现codegen() 方法来调用特定函数print(any fp number)?
【问题讨论】:
-
如果你用你的语言解释你希望从调用中降低什么 LLVM IR 会有所帮助