[LLVMdev] Problems with eraseFromParent()

Alysson aishofpf at gmail.com
Mon Jun 21 16:47:02 PDT 2010


Thank you guys for the tips, now it's working!
The problem was really concerned on the BasicBlock::iterator invalidation.

Best regards,
Alysson

On Mon, Jun 21, 2010 at 12:40 AM, Nick Lewycky <nicholas at mxc.ca> wrote:

> Alysson wrote:
>
>> Hi LLVMers,
>>
>>     I am working on my llvm school project optimization pass. It's
>> relatively simple, and it tries to remove redundant bitcast instructions
>> followed by load instructions. At first, I'm using as input a bytecode
>> generated by a simple Java test program.
>>     I've already found the reduntant instructions by looking at it's
>> CFG, and I also could implement the code to substitute their references,
>> in order to eliminate all dependencies on these instructions (the number
>> of their uses are changed to zero).
>>    The point is that when I finally attempt to remove the redundant
>> unused instructions from the generated code, there is a seg fault error.
>>    To remove them, I'm using this function:
>>
>> void EraseInst(Instruction &I) {
>>             assert(I.use_empty() && "Cannot erase used instructions!");
>>             I.eraseFromParent();
>> }
>>
>
> The problem is in how you use it:
>
>  for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; I++) {
>
>    if (I->use_empty() && dyn_cast<LoadInst>(I)) {
>      errs() << "*****Instruction unused*****" << "\n";
>      errs() << *I << "\n";
>      EraseInst(*I);
>    }
>  }
>
> Once you call EraseInst, you can't use it again in the I++ part of your for
> loop. You'll have to restructure your loop so that you increment before
> erasing your instruction, and erase the one you haven't incremented yet.
>
> Nick
>
>
>> So please, if anyone could help me on this, i would be very grateful!
>>
>> PS: It's also following my pass and the bytecode used for tests.
>>
>> Thanks for the attention,
>> Alysson
>>
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100621/9c3d6bbf/attachment.html>


More information about the llvm-dev mailing list