llvm-project/llvm/test/Transforms/LICM
Alina Sbirlea 5baa72ea74 [LICM & MemorySSA] Don't sink/hoist stores in the presence of ordered loads.
Summary:
Before this patch, if any Use existed in the loop, with a defining
access in the loop, we conservatively decide to not move the store.
What this approach was missing, is that ordered loads are not Uses, they're Defs
in MemorySSA. So, even when the clobbering walker does not find that
volatile load to interfere, we still cannot hoist a store past a
volatile load.
Resolves PR41140.

Reviewers: george.burgess.iv

Subscribers: sanjoy, jlebar, Prazek, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D59564

llvm-svn: 356588
2019-03-20 18:33:37 +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
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 Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
assume.ll [LICM] Hoist assumes out of loops 2018-08-10 22:21:56 +00:00
atomics.ll [LICM] Hoist stores of invariant values to invariant addresses out of loops 2018-08-29 21:49:30 +00:00
basictest.ll
bisect-state.ll
call-hoisting.ll [LICM] Fix a test so it actualy checks what was meant [NFC] 2018-08-21 21:27:26 +00:00
constexpr.ll
crash.ll
debug-value.ll
dropped-tbaa.ll
explicit_guards.ll Introduce llvm.experimental.widenable_condition intrinsic 2018-12-07 14:39:46 +00:00
extra-copies.ll
fence.ll [LICM] hoist fences out of loops w/o memory operations 2018-08-09 20:18:42 +00:00
funclet.ll [LICM] Hoist stores of invariant values to invariant addresses out of loops 2018-08-29 21:49:30 +00:00
guards.ll [TEST] Update test comments, refactor checks with update_test_checks.py 2019-02-15 07:06:52 +00:00
hoist-bitcast-load.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
hoist-debuginvariant.ll [LICM & MemorySSA] Don't sink/hoist stores in the presence of ordered loads. 2019-03-20 18:33:37 +00:00
hoist-deref-load.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
hoist-fast-fdiv.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
hoist-invariant-load.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
hoist-mustexec.ll [LICM] Use ICFLoopSafetyInfo in LICM 2018-11-06 02:44:49 +00:00
hoist-nounwind.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
hoist-phi.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
hoist-round.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
hoisting.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
infinite_loops.ll [MustExecute] Fix algorithmic bug in isGuaranteedToExecute. PR38514 2018-08-17 06:19:17 +00:00
int_sideeffect.ll
invariant.start.ll [LICM] Hoist an invariant_start out of loops if there are no stores executed before it 2018-08-24 16:24:48 +00:00
lcssa-ssa-promoter.ll
loopsink-pr38462.ll LoopSink: Don't sink into blocks without an insertion point (PR38462) 2018-08-29 06:55:27 +00:00
loopsink-pr39570.ll [LoopSink] Do not sink instructions into non-cold blocks 2018-11-07 18:26:24 +00:00
loopsink-pr39695.ll [LoopSink] Add preheader to alias set 2018-11-20 16:49:07 +00:00
loopsink.ll NFC - Various typo fixes in tests 2018-07-04 13:28:39 +00:00
no-preheader-test.ll
opt-remarks-conditional-load.ll
opt-remarks-intervening-store.ll
opt-remarks.ll
pr23608.ll
pr26843.ll
pr27262.ll
pr32129.ll
pr35342.ll
pr36228.ll [Analysis] Make LocationSizes carry an 'imprecise' bit 2018-10-10 06:39:40 +00:00
pr37323.ll [LICM] Preserve DT and LoopInfo specifically 2018-05-24 15:58:34 +00:00
pr40317.ll [MemorySSA +LICM CFHoist] Solve PR40317. 2019-01-24 19:48:35 +00:00
preheader-safe.ll [LICM] Use ICFLoopSafetyInfo in LICM 2018-11-06 02:44:49 +00:00
promote-order.ll [LICM] Hoist stores of invariant values to invariant addresses out of loops 2018-08-29 21:49:30 +00:00
promote-tls.ll [LICM] Infer proper alignment from loads during scalar promotion 2019-03-01 18:45:05 +00:00
read-only-calls.ll [LICM] Add a diagnostic analysis for identifying alias information 2018-08-17 13:44:00 +00:00
scalar-promote-memmodel.ll
scalar-promote-unwind.ll [LICM] Infer proper alignment from loads during scalar promotion 2019-03-01 18:45:05 +00:00
scalar-promote.ll [LICM] Add tests from D50786 [NFC] 2018-08-21 00:42:07 +00:00
sink-foldable.ll
sink-promote.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
sink.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
sinking.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00
speculate.ll
store-hoisting.ll [LICM&MSSA] Limit store hoisting. 2019-02-11 19:07:15 +00:00
strlen.ll
unrolled-deeply-nested.ll
update-scev.ll
volatile-alias.ll Use MemorySSA in LICM to do sinking and hoisting. 2019-01-10 19:29:04 +00:00