[llvm-commits] patch: preserve branch to unreachable until codegenprep time

Nick Lewycky nicholas at mxc.ca
Sun Oct 18 10:27:19 PDT 2009


Dan Gohman wrote:
> 
> 
> On Oct 18, 2009, at 12:16 AM, Nick Lewycky <nicholas at mxc.ca> wrote:
> 
>> This patch moves the code that optimizes "branch to unreachable" from 
>> SimplifyCFG to CodeGenPrep. Most of this patch is just updating the 
>> unit tests that use unreachable everywhere. I've done my best to 
>> preserve the intent of the tests.
> 
> I haven't read the patch, but I'm concerned about this interfering with 
> other optimizations.  Deleting the condition can expose further dce and 
> related optimizations.

Yes, having extra instructions could interfere with optimizations. 
Simple DCE isn't the problem though; when CodeGenPrep eliminates the 
unreachables, it also DCEs the chain of computations.

One case that could cause trouble is if an instruction had two uses, one 
which fed into the "dead" branch and one which didn't, and instcombine 
couldn't fold the instruction away only because it had more than one use.

   Also if the branch is a loop exit, deleting it
> makes it easier to compute a trip count.

They're easy to detect, just look for a BB whose first instruction is 
"unreachable". I'll try making SCEV filter such blocks out of its 
ExitingBlocks list.

Nick



More information about the llvm-commits mailing list