【发布时间】:2011-03-20 16:34:07
【问题描述】:
我正在尝试实现以下功能;
- 默认情况下,没有显式返回的函数将返回最后执行的块中的最后一次评估
所以,目前我正在做的过程是
1) 创建函数
llvm::Function* result = llvm::Function::Create(Compiler::Detail::getAnonymousFunctionSignature(llvmContext),
llvm::GlobalValue::ExternalLinkage,
name,
module());
result->setCallingConv( llvm::CallingConv::C );
2)向块中添加块和评估
builder.createFoo.....
但是,只有在第二阶段,我才拥有我想默认用作返回值的 llvm::Value*(和编译时类型)。问题是我需要使用这种类型来确定创建函数的签名
问题:
我该如何解决这个问题?
- 创建函数后可以更改签名吗?合法吗?
- 我需要用更新的签名创建一个新函数并将第一个函数的入口块复制/分配给它吗?还是我需要重新评估所有表达式?
- 可以在代码生成之前不创建函数吗?如果是这样,我应该在什么时候创建函数?
如何实现这一点的代码示例会很棒。谢谢!
【问题讨论】: