[LLVMdev] how to eliminate dead infinite loops?

Owen Anderson resistor at mac.com
Wed Nov 24 15:55:40 PST 2010


On Nov 23, 2010, at 9:22 AM, 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?

No.  Removing an infinite loop changes the semantics of the source program.

The question you should be asking is: why can't ScalarEvolution determine that your loops are finite?

--Owen



More information about the llvm-dev mailing list