[LLVMdev] how to eliminate dead infinite loops?

Nick Lewycky nicholas at mxc.ca
Wed Nov 24 12:36:07 PST 2010


Andrew Clinton wrote:
> Most of my programs contain loops that the LoopDeletion pass is unable
> to remove.  It appears that the following code in LoopDeletion.cpp:152
> is the culprit:
>
>     ScalarEvolution&  SE = getAnalysis<ScalarEvolution>();
>     const SCEV *S = SE.getMaxBackedgeTakenCount(L);
>     if (isa<SCEVCouldNotCompute>(S))
>       return Changed;
>
> So, LoopDeletion thinks my loops might be infinite so it does not delete
> them - even if they do not write to any of the function return values.
> Is there a way to flag a loop as non-infinite?  Or will I need to create
> my own modified loop deletion pass that can eliminate potentially
> infinite loops.  Is it correct just to remove the above code to allow
> deletion of infinite loops?

I think what you actually want is the ADCE pass (opt -adce). The reason 
we turned ADCE off by default is that it kept deleting infinite loops, 
and the LoopDeletion pass was written as a safe replacement.

Nick



More information about the llvm-dev mailing list