[MustExecute/LICM] Special case first instruction in throwing header
authorPhilip Reames <listmail@philipreames.com>
Fri, 27 Apr 2018 20:44:01 +0000 (20:44 +0000)
committerPhilip Reames <listmail@philipreames.com>
Fri, 27 Apr 2018 20:44:01 +0000 (20:44 +0000)
commite4ec473b3ff94ecec6fe2c828770a124b139e1a5
tree2b42b09ac5f8bb08114ac91382d391b236454916
parent201a1086cf3ca3dfa949b26087a5b05610e66f8e
[MustExecute/LICM] Special case first instruction in throwing header

We currently have a hard to solve analysis problem around the order of instructions within a potentially throwing block.  We can't cheaply determine whether a given instruction is before the first potential throw in the block.  While we're working on that in the background, special case the first instruction within the header.

why this particular special case?  Well, headers are guaranteed to execute if the loop does, and it turns out we tend to produce this form in practice.

In a follow on patch, I tend to extend LICM with an alternate approach which works for any instruction in the header before the first throw, but this is the best I can come up with other users of the analysis (such as store promotion.)

Note: I can't show the difference in the analysis result since we're ORing in the expensive instruction walk used by SCEV.  Using the full walk is not suitable for a general solution.
llvm-svn: 331079
llvm/lib/Analysis/MustExecute.cpp
llvm/test/Transforms/LICM/preheader-safe.ll