forked from OSchip/llvm-project
0c8dd052b8
Sinking of unordered atomic load into loop must be disallowed because it turns a single load into multiple loads. The relevant section of the documentation is: http://llvm.org/docs/Atomics.html#unordered, specifically the Notes for Optimizers section. Here is the full text of this section: > Notes for optimizers > In terms of the optimizer, this **prohibits any transformation that > transforms a single load into multiple loads**, transforms a store into > multiple stores, narrows a store, or stores a value which would not be > stored otherwise. Some examples of unsafe optimizations are narrowing > an assignment into a bitfield, rematerializing a load, and turning loads > and stores into a memcpy call. Reordering unordered operations is safe, > though, and optimizers should take advantage of that because unordered > operations are common in languages that need them. Patch by Daniil Suchkov! Reviewed By: reames Differential Revision: https://reviews.llvm.org/D38392 llvm-svn: 315438 |
||
---|---|---|
.. | ||
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 | ||
assume.ll | ||
atomics.ll | ||
basictest.ll | ||
bisect-state.ll | ||
constexpr.ll | ||
crash.ll | ||
debug-value.ll | ||
dropped-tbaa.ll | ||
extra-copies.ll | ||
funclet.ll | ||
hoist-bitcast-load.ll | ||
hoist-deref-load.ll | ||
hoist-fast-fdiv.ll | ||
hoist-invariant-load.ll | ||
hoist-nounwind.ll | ||
hoist-round.ll | ||
hoisting.ll | ||
lcssa-ssa-promoter.ll | ||
loopsink.ll | ||
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 | ||
preheader-safe.ll | ||
promote-order.ll | ||
promote-tls.ll | ||
scalar-promote-memmodel.ll | ||
scalar-promote-unwind.ll | ||
scalar-promote.ll | ||
sink.ll | ||
sinking.ll | ||
speculate.ll | ||
strlen.ll | ||
unrolled-deeply-nested.ll | ||
update-scev.ll | ||
volatile-alias.ll |