gpt4 book ai didi

function - LLVM 插入内在函数 Cos

转载 作者:行者123 更新时间:2023-12-05 01:23:16 25 4
gpt4 key购买 nike

我正在尝试将内部 cos() 函数调用插入 LLVM 传递。我在 FunctionPass 中的代码:

std::vector<Type *> arg_type;
arg_type.push_back(Type::getFloatTy(getGlobalContext()));
Function *fun = Intrinsic::getDeclaration(F.getParent(), Intrinsic::cos, arg_type);
CallInst* callInst = CallInst::Create(fun, args, Twine("cos"), (Instruction *)&I);

当我遗漏最后一行时,生成的 IR 是:
define i32 @main() nounwind uwtable {
entry:
...
}

declare float @llvm.cos.f32(float) nounwind readonly

,但包含 CallInst 后,我​​得到的只是:
0  opt                0x000000000094f4bf
1 opt 0x000000000094f9c9
2 libpthread.so.0 0x00007fb92b652cb0
3 opt 0x00000000008be244 llvm::Instruction::Instruction(llvm::Type*, unsigned int, llvm::Use*, unsigned int, llvm::Instruction*) + 148
4 LLVMObfuscation.so 0x00007fb92a66c52f
5 LLVMObfuscation.so 0x00007fb92a66c9a5
6 LLVMObfuscation.so 0x00007fb92a66df21
7 opt 0x00000000008e921f llvm::FPPassManager::runOnFunction(llvm::Function&) + 591
8 opt 0x00000000008e9293 llvm::FPPassManager::runOnModule(llvm::Module&) + 51
9 opt 0x00000000008e8f34 llvm::MPPassManager::runOnModule(llvm::Module&) + 532
10 opt 0x00000000008ea4fb llvm::PassManagerImpl::run(llvm::Module&) + 171
11 opt 0x0000000000496208 main + 4104
12 libc.so.6 0x00007fb92a89376d __libc_start_main + 237
13 opt 0x000000000049cfe5

我还需要做什么?我想我不需要在模块中定义这个函数。

发送到函数的 args 是这样定义的:
std::vector<Value *> args;
args.push_back(fp);

其中 fp 是先前插入的指令:
Instruction *fp = BinaryOperator::Create(Instruction::FSub, ...

变量 I 是 inst_iterator,但我在外面这样做是为了循环。

谢谢你。

最佳答案

我建议你使用 IRBuilder .它简化了 LLVM pass 中的 IR 生成。在您的情况下,您可以像这样使用它:

std::vector<Type *> arg_type;
arg_type.push_back(Type::getFloatTy(getGlobalContext()));
Function *fun = Intrinsic::getDeclaration(F.getParent(), Intrinsic::cos, arg_type);
IRBuilder<> Builder(&I);
Builder.CreateCall(fun, args);

关于function - LLVM 插入内在函数 Cos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11985247/

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