llvm-project/llvm/test/Transforms/LICM
Philip Reames e4ec473b3f [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
2018-04-27 20:44:01 +00:00
..
2003-02-26-LoopExitNotDominated.ll
2003-02-27-NestedLoopExitBlocks.ll
2003-02-27-PreheaderExitNodeUpdate.ll
2003-02-27-PreheaderProblem.ll
2003-02-27-StoreSinkPHIs.ll
2003-02-28-PromoteDifferentType.ll
2003-05-02-LoadHoist.ll
2003-12-11-SinkingToPHI.ll
2004-09-14-AliasAnalysisInvalidate.ll
2004-11-17-UndefIndexCrash.ll
2006-09-12-DeadUserOfSunkInstr.ll
2007-05-22-VolatileSink.ll
2007-07-30-AliasSet.ll
2007-09-17-PromoteValue.ll
2007-09-24-PromoteNullValue.ll
2007-10-01-PromoteSafeValue.ll
2008-05-20-AliasSetVAArg.ll
2008-07-22-LoadGlobalConstant.ll
2009-12-10-LICM-Indbr-Crash.ll
2011-04-06-HoistMissedASTUpdate.ll
2011-04-06-PromoteResultOfPromotion.ll [Verifier] Add verification for TBAA metadata 2016-12-11 20:07:15 +00:00
2011-04-09-RAUW-AST.ll
2011-07-06-Alignment.ll
2014-09-10-doFinalizationAssert.ll
AliasSetMemSet.ll
PR19798.ll
PR21582.ll
PR24013.ll
Preserve-LCSSA.ll
alias-set-tracker-loss.ll
argmemonly-call.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
assume.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
atomics.ll [LICM] Make store promotion work in the face of unordered atomics 2017-02-14 01:38:31 +00:00
basictest.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
bisect-state.ll [LICM] Work around LICM needs to maintain state across loops. 2016-12-23 13:12:50 +00:00
constexpr.ll [PM] Teach the LoopPassManager to automatically canonicalize loops by 2017-01-17 19:18:12 +00:00
crash.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
debug-value.ll Remove the obsolete offset parameter from @llvm.dbg.value 2017-07-28 20:21:02 +00:00
dropped-tbaa.ll [AliasSetTracker] Don't drop AA MD so eagerly 2017-06-29 19:13:11 +00:00
extra-copies.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
funclet.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
hoist-bitcast-load.ll [PM] Teach the loop PM to run LoopSimplify prior to the loop pipeline. 2017-01-21 03:48:51 +00:00
hoist-deref-load.ll [PM] Teach the loop PM to run LoopSimplify prior to the loop pipeline. 2017-01-21 03:48:51 +00:00
hoist-fast-fdiv.ll [LICM] Hoist fp division from the loops and replace by a reciprocal 2017-04-11 02:22:54 +00:00
hoist-invariant-load.ll
hoist-mustexec.ll [LICM/mustexec] Extend first iteration must execute logic to fcmps 2018-03-16 16:33:49 +00:00
hoist-nounwind.ll [PM] Teach the LoopPassManager to automatically canonicalize loops by 2017-01-17 19:18:12 +00:00
hoist-round.ll Mark @llvm.powi.* as safe to speculatively execute. 2017-01-25 09:32:30 +00:00
hoisting.ll [LICM] Hoist loads that are dominated by invariant.start intrinsic, and are invariant in the loop. 2017-02-02 13:22:03 +00:00
int_sideeffect.ll Add an @llvm.sideeffect intrinsic 2017-11-08 21:59:51 +00:00
lcssa-ssa-promoter.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
loopsink.ll Xfail the test added in r324445 until the underlying issue in LoopSink is fixed. 2018-02-07 06:11:50 +00:00
no-preheader-test.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
opt-remarks-conditional-load.ll [LICM] Report failing to hoist conditionally-executed loads 2017-01-11 04:39:49 +00:00
opt-remarks-intervening-store.ll [LICM] Report failing to hoist a load with an invariant address 2017-01-11 04:39:45 +00:00
opt-remarks.ll Correct a typo, s/hosting/hoisting/ 2017-02-14 16:41:10 +00:00
pr23608.ll
pr26843.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
pr27262.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
pr32129.ll Use a WeakVH for UnknownInstructions in AliasSetTracker 2017-03-11 01:15:48 +00:00
pr35342.ll [LICM] Fix PR35342 2017-11-17 20:38:25 +00:00
preheader-safe.ll [MustExecute/LICM] Special case first instruction in throwing header 2018-04-27 20:44:01 +00:00
promote-order.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
promote-tls.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
scalar-promote-memmodel.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
scalar-promote-unwind.ll Improve what can be promoted in LICM. 2017-01-19 19:31:40 +00:00
scalar-promote.ll [LICM] Ignore exits provably not taken on first iteration when computing must execute 2018-03-15 21:04:28 +00:00
sink-foldable.ll Re-commit : [LICM] Allow sinking when foldable in loop 2017-12-15 20:33:24 +00:00
sink.ll [PM] Port LoopSink to the new pass manager. 2017-01-20 08:42:19 +00:00
sinking.ll [LICM] Salvage DI from dying Instructions 2018-03-18 15:59:19 +00:00
speculate.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00
strlen.ll Add argmononly attribute to strlen and wcslen, i.e. they only read memory (string) passed to them. 2017-06-18 03:10:26 +00:00
unrolled-deeply-nested.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
update-scev.ll
volatile-alias.ll [LICM] Report successful hoist/sink/promotion 2017-01-11 04:39:35 +00:00