私は今、LLVMを学んでいます。私はInstruction :: user_back()と混同しています。 「 - 私たちは、命令が他の命令によってのみを使用することができることを知っているように、値で定義されたメソッドを特殊user_backを」しかし、私はまだそれが返すかわからない使い方* LLVM ::命令:: user_back()
ドキュメントは述べています。
私はそれについての詳細な情報を見つけることができませんでした。私は命令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)
}
}
}
}
}
私の最初の質問は、私は命令*のLLVMの使用を誤解するかどうかです。 :命令:: user_back()、それの正しい意味は何ですか? Uが命令にI->ユーザー()である場合
私の2番目の質問は、命令Uのために、そのユーザUが取得する方法がありますか?この場合、私からUを取得する方法がありますか? U-> user_back()で返されますか?
多くのありがとうございます。:)