Я слежу за учебником llvm за собственный простой язык программирования «Kaleidoscope», и на моем языке очевидна функциональность, на которую этот учебник не охватывает. Я просто хочу, чтобы напечатать любой двойной стандартный вывод в значительной степени, как C++ будет делать:llvm - Как реализовать функцию печати на моем языке?
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 вы бы хотели понизить от звонка на вашем языке –