지금 llvm을 배우고 있습니다. 나는 Instruction :: user_back()과 혼동을 느낀다.명령어 사용 * llvm :: Instruction :: user_back()
docs는 "user_back - 다른 명령에 의해서만 명령을 사용할 수 있다는 것을 알고 있으므로 Value에 정의 된 메서드를 특수화합니다."라고 말했지만 여전히 반환 할 내용을 알지 못합니다.
더 자세한 정보를 찾을 수 없습니다. 나는 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가 Instruction I-> users()에 있으면 사용자 U를 얻는 방법이 있습니까? 이 경우, 제가 제발 내가 얻을 수있는 방법이 있습니까? U-> user_back() 반환할까요?
미리 감사드립니다.