1
패스 중이 아닌 IR 파일에서 모든 선행 기본 블록을 가져 오려고합니다. 내가 this link에서 for (BasicBlock *Pred : pred_iterator(bb)) {}
를 추가 할 때 나는, 그러나'llvm :: BasicBlock'을 'pred_iterator'로 어떻게 변환합니까?
for (auto iter1 = m->getFunctionList().begin();
iter1 != m->getFunctionList().end();
iter1++)
{
for (auto iter2 = f.getBasicBlockList().begin();
iter2 != f.getBasicBlockList().end();
iter2++)
{
BasicBlock &bb = *iter2;
std::cout << " BasicBlock: " << bb.getName().str() << std::endl;
}
}
사용하여 모든 기본 블록을 반복 할 수 있습니다, 나는
for (auto iter1 = m->getFunctionList().begin();
iter1 != m->getFunctionList().end();
iter1++)
{
for (auto iter2 = f.getBasicBlockList().begin();
iter2 != f.getBasicBlockList().end();
iter2++)
{
BasicBlock &bb = *iter2;
std::cout << " BasicBlock: " << bb.getName().str() << std::endl;
for (BasicBlock *Pred : pred_iterator(bb)) {}
}
}
오류가 여기에있다
test2.cpp:63:37: error: no matching conversion for functional-style cast from 'llvm::BasicBlock' to 'pred_iterator' (aka 'PredIterator<llvm::BasicBlock, user_iterator_impl<llvm::User> >')
for (BasicBlock *Pred : pred_iterator(bb)) {
^~~~~~~~~~~~~~~~
아래에 표시되는 오류를 얻을 몇 가지 추가 정보 :
/usr/local/include/llvm/IR/CFG.h:48:19: note: candidate constructor not viable: no known conversion from 'llvm::BasicBlock' to 'llvm::BasicBlock *' for 1st argument; take the address of the
argument with &
explicit inline PredIterator(Ptr *bb) : It(bb->user_begin()) {
^
Additional Informatino is below.
/usr/local/include/llvm/IR/CFG.h:30:7: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'llvm::BasicBlock' to 'const
llvm::PredIterator<llvm::BasicBlock, llvm::Value::user_iterator_impl<llvm::User> >' for 1st argument
class PredIterator : public std::iterator<std::forward_iterator_tag,
^
/usr/local/include/llvm/IR/CFG.h:30:7: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'llvm::BasicBlock' to
'llvm::PredIterator<llvm::BasicBlock, llvm::Value::user_iterator_impl<llvm::User> >' for 1st argument
/usr/local/include/llvm/IR/CFG.h:47:3: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
PredIterator() {}
^
/usr/local/include/llvm/IR/CFG.h:51:10: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
inline PredIterator(Ptr *bb, bool) : It(bb->user_end()) {}
'llvm :: BasicBlock'에서 'pred_iterator'로 변환하는 방법은 무엇입니까?