【发布时间】:2016-08-05 21:14:01
【问题描述】:
我现在正在学习 llvm。我对指令::user_back() 感到困惑。
文档说“user_back - 专门化Value中定义的方法,因为我们知道一条指令只能被其他指令使用。”但我仍然不知道它返回什么。
我找不到有关它的更多信息。我猜对于指令 u,如果 u 在 i->users() 中,u->user_back() 将返回 i。当我试图检查我的猜测时,我遇到了以下运行时错误:
opt: /usr/local/include/llvm/IR/Value.h:144: UseT& llvm::Value::use_iterator_impl<UseT>::operator*() const [with UseT = llvm::Use]: Assertion `U && "Cannot dereference end iterator!"' failed.
我的通行证是这样的:
for (auto &B : F) {
for (auto &I : B) {
if (auto *target = dyn_cast<AllocaInst>(&I)) {
for(auto it : target->users()){
if (Instruction *I = dyn_cast<Instruction>(it)){
Instruction *temp = I->user_back();
errs() << "user_back"<< *temp <<"\n";
//Aborted (core dumped)
}
}
}
}
}
我的第一个问题是我是否误解了Instruction* llvm::Instruction::user_back()的用法,它的正确含义是什么?
我的第二个问题是一个指令U,如果U在指令I->users()中,有没有办法获取U是谁的用户?在这种情况下,请问有什么方法可以让我从 U 获得 I 吗? U->user_back() 可以返回吗?
提前非常感谢:)
【问题讨论】:
标签: llvm