PS: <br><br>I works when I use  Instruction* prev = current->getPrevNode();<br><br>But then I have runtime error Stack dump that is very frequent...<br><br><div class="gmail_quote">On Mon, Dec 17, 2012 at 6:20 PM, John Criswell <span dir="ltr"><<a href="mailto:criswell@illinois.edu" target="_blank">criswell@illinois.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><div class="im">
    <div>On 12/17/12 10:34 AM, Alexandru Ionut
      Diaconescu wrote:<br>
    </div>
    <blockquote type="cite">
      
      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 lang="en"><span>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 href="http://llvm.org/doxygen/BasicBlock_8h_source.html#l00199" target="_blank">199</a>
      of file <a href="http://llvm.org/doxygen/BasicBlock_8h_source.html" target="_blank">BasicBlock.h</a>.)<br>
    </blockquote>
    <br></div>
    I believe BasicBlock::back() returns an iterator to the last
    instruction in the BasicBlock which should be its terminator
    instruction (basic blocks are required to have a TerminatorInst as
    their last instruction).<div class="im"><br>
    <br>
    <br>
    <blockquote type="cite">
      <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>
    </blockquote>
    <br></div>
    Sometimes you have to dereference an iterator to get the thing that
    it's pointing at.  Try using:<br>
    <br>
    Instruction* prev = (dyn_cast<Instruction>(*prev_iter));<br>
    <br>
    That might work.<br>
    <br>
    -- John T.<br>
    <br>
    <blockquote type="cite"><div class="im"><br>
      Thank you,<br>
      Alex<br>
      <br>
      -- <br>
      <font style="color:rgb(153,153,153)">Best
        regards,</font><br style="color:rgb(153,153,153)">
      <font style="color:rgb(153,153,153)">Alexandru
        Ionut Diaconescu</font><br>
      <br>
      <br>
      <fieldset></fieldset>
      <br>
      </div><pre>_______________________________________________
LLVM Developers mailing list
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
    </blockquote>
    <br>
  </div>

</blockquote></div><br><br clear="all"><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>