2017-01-31 8 views
0
for (BasicBlock::iterator i = bb->begin(), e = bb->end(); i != e; ++i) { 
    i.print(errs()); ??? 

Я пишу LLVM PASS, и я хочу, чтобы получить список инструкций внутри основного блока, но как распечатать их на консоли, так что я могу видеть их? В приведенном выше коде показан код, который я пробовал, он выполняет итерацию через каждую команду в базовом блоке, но я получаю ошибку ниже для функции печати.Как распечатать инструкцию в LLVM?

error: ‘llvm::BasicBlock::iterator’ has no member named ‘print’ i.print(errs());

Есть ли лучший способ распечатать инструкции?

+0

При публикации вопросов, касающихся ошибок сборки, пожалуйста, укажите фактические ошибки, которые вы получаете. –

+0

ОК спасибо за отзыв, я добавил сообщение об ошибке, я получаю – JavaLearner

+0

Вы, кажется, забыли, что итераторы эмулируют указатели, поэтому вам нужно использовать один из операторов разыменования для доступа к «значению» в итераторе. Как, например, 'I-> печать (...)'. –

ответ

1

Проблема в том, что вы пытаетесь напечатать итератор, а не инструкцию. Вы можете попробовать один из следующих способов. Вы можете распечатать инструкцию в базовом блоке либо печатая базовый блок или печать каждой команды:

BasicBlock* bb = ...; // 
errs() << *bb; 
for (BasicBlock::iterator i = bb->begin(), e = bb->end(); i != e; ++i) { 
    Instruction* ii = &*i; 
    errs() << *ii << "\n"; 

Оба печатает Выведет те же результаты.