CloneFunctioninto()中的错误LLVM
问题描述:
我试图将函数中的CFG复制到一个新函数中,以便对旧函数执行一些操作。 我用CloneFunctionInto通过下面的代码CloneFunctioninto()中的错误LLVM
std::vector<Type*> ArgTypes;
ValueToValueMapTy VMap;
FunctionType *FTy = FunctionType::get(F.getFunctionType()->getReturnType(), ArgTypes, F.getFunctionType()->isVarArg());
Function *NewF = Function::Create(FTy, F.getLinkage(), F.getName());
SmallVector<ReturnInst*, 8> Returns;
CloneFunctionInto(NewF, (Function*) &F, VMap, false, Returns, "_", 0, 0);
我在新老功能打印每个基本块后得到的错误:虽然删除
:123-132%
使用后仍然四处卡住DEF被破坏:%cmp1_ = ICMP SGT I32%4,20
选择:Value.cpp:75:虚拟LLVM ::值::〜值():断言`use_empty()& &“使用时保持一价值被破坏!“'失败。
0 opt 0x0000000000fc7fe2
1 opt 0x0000000000fc8473
2 libpthread.so.0 0x00007f2b28876cb0
3 libc.so.6 0x00007f2b27ac8425 gsignal + 53
4 libc.so.6 0x00007f2b27acbb8b abort + 379
5 libc.so.6 0x00007f2b27ac10ee
6 libc.so.6 0x00007f2b27ac1192
7 opt 0x0000000000f7cd7d
8 opt 0x0000000000ee3c52
9 opt 0x0000000000f5bddf llvm::LLVMContextImpl::~LLVMContextImpl() + 1999
10 opt 0x0000000000f5ad1c
11 opt 0x0000000000fb9d69 llvm::llvm_shutdown() + 41
12 opt 0x00000000005285b3 main + 7251
13 libc.so.6 0x00007f2b27ab376d __libc_start_main + 237
14 opt 0x0000000000521f91
堆栈转储:
0. Program arguments: opt -load ../../../Release+Asserts/lib/Blocks.so -blocks
中止(核心转储)
为了澄清:它让我与它的正确接班人正确的基本块,但它也不能很好地工作由于这个错误
答
它看起来不像你正在适当地复制参数。看看llvm::CloneModule
函数(lib/Transforms/Utils/CloneModule.cpp
),看看如何正确使用CloneFunction
。