我正在编写一些使用 LLVM C API 的代码。如何使用内在函数,例如llvm.cos.f64
or llvm.sadd.with.overflow.i32
?每当我尝试通过生成一个全局来做到这一点LLVMAddGlobal
(具有正确的类型签名),我只是在 JIT 链接阶段收到此错误消息:
LLVM ERROR: Could not resolve external global address: llvm.cos.f64
我没有使用 LLVM C++ 接口,所以建议LLVM插入内在函数Cos https://stackoverflow.com/questions/11985247/llvm-insert-intrinsic-function-cos似乎不适用。
我想我需要类似的东西Intrinsic::getDeclaration
,但我似乎找不到它。我错过了一些明显的东西吗?
无需离开 C API。将内部名称传递给LLVMAddFunction
:
LLVMTypeRef param_types[] = {LLVMDoubleType()};
LLVMTypeRef fn_type = LLVMFunctionType(LLVMDoubleType(), param_types, 1, false);
LLVMValueRef fn = LLVMAddFunction(module, "llvm.cos.f64", fn_type);
然后你可以生成一个调用fn
with LLVMBuildCall
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)