[LLVMdev] Adding a halting function attribute?

Owen Anderson resistor at mac.com
Sat May 1 11:07:16 PDT 2010


Hey folks,

In a recent blog post, John Regehr pointed out that LLVM is currently optimizing away read-only functions containing infinite loops whose return values are never used.  The culprit for the moment is the inliner, but the more insidious problem is that isTriviallyDeletable currently returns true for any read-only function whose value is not used.

In order to prevent this from happening while avoiding pessimizing the common case, I'm proposing adding a "halting" function attribute which is a hint to the optimizers that a function is guaranteed to halt.  A pretty simple conservative implementation would be as a "contains no loops" analysis.  Obviously fancier implementations are possible, but we'd like to avoid having the FunctionAttrs depend on LoopInfo or SCEV which would be needed for loop finiteness analysis.  Additionally, we already have the LoopDeletion pass interleaved, which should handle exactly those cases anyways.

Thoughts?

--Owen



More information about the llvm-dev mailing list