[LLVMdev] BasicBlock back()

Alexandru Ionut Diaconescu alexandruionutdiaconescu at gmail.com
Mon Dec 17 08:34:41 PST 2012


Hello,

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:



1. I have the following sequence of code:

bool patternDC::runOnBasicBlock(BasicBlock &BB) {
...
if (BB.getTerminator())
  {
            Instruction* current = BB.getTerminator();
            errs() << "\n LAST: "<<*current<<"\n";

            Instruction* prev = &BB.back();
            errs() << "\n PENULTIMATE: "<<*prev<<"\n";
...

The terminal prints the SAME instruction. I don't know how back() works.
(Definition at line
199<http://llvm.org/doxygen/BasicBlock_8h_source.html#l00199>of file
BasicBlock.h <http://llvm.org/doxygen/BasicBlock_8h_source.html>.)



2. I also tried :

bool patternDC::runOnBasicBlock(BasicBlock &BB) {
...
BasicBlock::const_iterator I = BB.begin();
BasicBlock::const_iterator E = BB.end();
BasicBlock::const_iterator prev_iter,last_iter;
prev_iter = NULL; last_iter = NULL;
for(;I!=E;I++){
    prev_iter = last_iter;
    last_iter = I;
}
if(prev_iter){
    errs() << "prev_iter: " << *(dyn_cast<Instruction>(prev_iter)) << "\n";
}
if(last_iter){
    errs() << "last_iter: " << *(dyn_cast<Instruction>(last_iter)) << "\n";
}
// 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
// errs() << "lastlast: " << *(dyn_cast<Instruction>(I)) << "\n";
...
Instruction* prev = *(dyn_cast<Instruction*>(prev_iter));
errs() << "\n prev: "<<*prev<<"\n";

The terminal prints well prev and last, but I have compilation errors when
trying to assign to Instruction* prev
The Clang error is:
".....
/home/alex/llvm/include/llvm/Support/Casting.h:51:28: error: ‘classof’ is
not a member of ‘llvm::Instruction*’"


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 :)

Thank you,
Alex

-- 
Best regards,
Alexandru Ionut Diaconescu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20121217/2a169148/attachment.html>


More information about the llvm-dev mailing list