gpt4 book ai didi

c++ - LLVM:使用空指针操作数创建 CallInst

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:11:30 25 4
gpt4 key购买 nike

我正在尝试使用 LLVM C++ 绑定(bind)来编写生成以下 IR 的传递

%1 = call i64 @time(i64* null) #3

@time 这里是 C 标准库的 time() 函数。

这是我写的代码

void Pass::Insert(BasicBlock *bb, Type *timety, Module *m) {
Type *timetype[1];
timetype[0] = timety;
ArrayRef<Type *> timeTypeAref(timetype, 1);
Value *args[1];
args[0] = ConstantInt::get(timety, 0, false);
ArrayRef<Value *> argsRef(args, 1);
FunctionType *signature = FunctionType::get(timety, false);
Function *timeFunc =
Function::Create(signature, Function::ExternalLinkage, "time", m);
IRBuilder<> Builder(&*(bb->getFirstInsertionPt()));
AllocaInst *a1 = Builder.CreateAlloca(timety, nullptr, Twine("a1"));
CallInst *c1 = Builder.CreateCall(timeFunc, args, Twine("time"));
}

编译成功,但运行时出现以下错误

Incorrect number of arguments passed to called function!
%time = call i64 @time(i64 0)

据我所知,我需要传递一个引用 nullptr 的 int64 指针,但我不知道该怎么做。

最佳答案

LLVM 提供了一个 ConstantPointerNull 类,它完全符合我的要求 - 它返回所需类型的空指针。

所有需要更改的是以 args[0] = ... 开头的行args[0] = ConstantPointerNull::get(PointerType::get(timety, 0));

关于c++ - LLVM:使用空指针操作数创建 CallInst,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40657965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com