[llvm-dev] DCE in the presence of control flow.

David Callahan via llvm-dev llvm-dev at lists.llvm.org
Wed Jan 27 13:56:33 PST 2016


I have been looking at some internal codes looking for differences between Clang (specifically 3.7.1) and gcc (typically 4.8.1 but sometimes later).

One area where I bumped into was dead code elimination in the presence of complex control flow. I note that the “aggressive dead code elimination” (ADCE.cpp) treats all branch operations as live (isa<TerminatorInst>(I)).  Doing more requires some approximation to control dependence.

I note SimplifyCFG indirectly handles some simple cases. It will speculate the contents of a basic block into a predecessor but this is insufficient for more complex structures. This probably cherry-picks the most common cases by frequency.

Have their been prior attempts strengthen dead code elimination w.r.t. control flow? If so, any guidance on what went wrong?

Thanks
David

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160127/d4dee7cb/attachment.html>


More information about the llvm-dev mailing list