【发布时间】:2015-12-15 18:17:04
【问题描述】:
我想用 Undef 值替换对指令的所有使用,这是我要删除的函数调用。
首先,我这样声明我的 undef 值
UndefValue *undefval;
然后我尝试替换我的指令的所有用途
currentInst->replaceAllUsesWith(undefval);
currentInst 是一个
Instruction* currentInst;
value 指的是我当前的指令。这会导致 LLVM 产生以下错误和断言:
opt: /home/troulakis/Documents/LLVM_Project/llvm/llvm/lib/IR/Value.cpp:332: void llvm::Value::replaceAllUsesWith(llvm::Value *): 断言`New->getType () == getType() && "replaceAllUses of value with new value of different type!"' 失败。
0 0x160e678 llvm::sys::PrintStackTrace(_IO_FILE*) (/usr/local/bin/opt+0x160e678) 1 0x160fbdb (/usr/local/bin/opt+0x160fbdb) 2 0x7f7752596340 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x10340) 3 0x7f77515aacc9 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x36cc9) 4 0x7f77515ae0d8 中止 (/lib/x86_64-linux-gnu/libc.so.6+0x3a0d8) 5 0x7f77515a3b86 (/lib/x86_64-linux-gnu/libc.so.6+0x2fb86) 6 0x7f77515a3c32 (/lib/x86_64-linux-gnu/libc.so.6+0x2fc32) 7 0x15be04f (/usr/local/bin/opt+0x15be04f) 8 0x7f775136fda7 (匿名 命名空间)::MyPass::runOnFunction(llvm::Function&) (../../../Release+Asserts/lib/PassRAF.so+0x6da7) 9 0x15a1ab4 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/local/bin/opt+0x15a1ab4) 10 0x15a1d3b llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/local/bin/opt+0x15a1d3b) 11 0x15a22d7 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/local/bin/opt+0x15a22d7) 12 0x5af6db 主 (/usr/local/bin/opt+0x5af6db) 13 0x7f7751595ec5 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21ec5) 14 0x59f559 _start (/usr/local/bin/opt+0x59f559)
堆栈转储:
程序参数:opt -load ../../../Release+Asserts/lib/PassRAF.so -time-passes -instnamer -PassRAF
在模块“”上运行传递“功能传递管理器”。
- 在函数“@main”上运行传递“R A F”
./PassRAF: line 15: 7227 Aborted (core dumped)
任何想法有什么问题吗?我有错误的 undef 值声明?
【问题讨论】: