Hello,<br><br>I am a beginner of LLVM. I am trying to move among the instructions of a BasicBlock and I cannot. In this particular example, I try to get the previous instruction of the end instruction. I am trying 2 methods: <br>
<br><br><br>1. I have the following sequence of code:<br><br>bool patternDC::runOnBasicBlock(BasicBlock &BB) {<br>...<br>if (BB.getTerminator())<br>  {<br>            Instruction* current = BB.getTerminator();<br>            errs() << "\n LAST: "<<*current<<"\n";<br clear="all">
<br>            Instruction* prev = &BB.back();<br>            errs() << "\n <span id="result_box" class="short_text" lang="en"><span class="hps">PENULTIMATE</span></span>: "<<*prev<<"\n";<br>
...<br><br>The terminal prints the SAME instruction. I don't know how back() works. (Definition at line <a class="el" href="http://llvm.org/doxygen/BasicBlock_8h_source.html#l00199">199</a> of file <a class="el" href="http://llvm.org/doxygen/BasicBlock_8h_source.html">BasicBlock.h</a>.)<br>
<br><br><br>2. I also tried :<br><br>bool patternDC::runOnBasicBlock(BasicBlock &BB) {<br>...<br>BasicBlock::const_iterator I = BB.begin();<br>BasicBlock::const_iterator E = BB.end();<br>BasicBlock::const_iterator prev_iter,last_iter;<br>
prev_iter = NULL; last_iter = NULL;<br>for(;I!=E;I++){<br>    prev_iter = last_iter;<br>    last_iter = I;<br>}<br>if(prev_iter){<br>    errs() << "prev_iter: " << *(dyn_cast<Instruction>(prev_iter)) << "\n";<br>
}<br>if(last_iter){<br>    errs() << "last_iter: " << *(dyn_cast<Instruction>(last_iter)) << "\n";<br>}<br>// not related to the main question: uncomment the next line for an unusual behavior: lastlast is DIFFERENT from last. lastlast is kind of parts of the BasicBlock<br>
// errs() << "lastlast: " << *(dyn_cast<Instruction>(I)) << "\n";<br>...<br>Instruction* prev = *(dyn_cast<Instruction*>(prev_iter));<br>errs() << "\n prev: "<<*prev<<"\n";<br>
<br>The terminal prints well prev and last, but I have compilation errors when trying to assign to Instruction* prev<br>The Clang error is: <br>".....<br>/home/alex/llvm/include/llvm/Support/Casting.h:51:28: error: ‘classof’ is not a member of ‘llvm::Instruction*’"<br>
<br><br>If someone knows a better way to use any element from the basic block or knows why these are not working, please let me know :)<br><br>Thank you,<br>Alex<br><br>-- <br><font style="background-color:rgb(255,255,255);color:rgb(153,153,153)">Best regards,</font><br style="background-color:rgb(255,255,255);color:rgb(153,153,153)">
<font style="background-color:rgb(255,255,255);color:rgb(153,153,153)">Alexandru Ionut Diaconescu</font><br><br>