llvm-project/llvm/lib/Transforms/Scalar
Philip Reames 5937368d4f [LICM] Remove unneccessary safety check to increase sinking effectiveness
This one requires a bit of explaination.  It's not every day you simply delete code to implement an optimization.  :)

The transform in question is sinking an instruction from a loop to the uses in loop exiting blocks.  We know (from LCSSA) that all of the uses outside the loop must be phi nodes, and after predecessor splitting, we know all phi users must have a single operand.  Since the use must be strictly dominated by the def, we know from the definition of dominance/ssa that the exit block must execute along a (non-strict) subset of paths which reach the def.  As a result, duplicating a potentially faulting instruction can not *introduce* a fault that didn't previously exist in the program.  

The full story is that this patch builds on "rL338671: [LICM] Factor out fault legality from canHoistOrSinkInst [NFC]" which pulled this logic out of a common helper routine.  As best I can tell, this check was originally added to the helper function for hoisting legality, later an incorrect fastpath for loads/calls was added, and then the bug was fixed by duplicating the fault safety check in the hoist path.  This left the redundant check in the common code to pessimize sinking for no reason.  I split it out in an NFC, and am not removing the unneccessary check.  I wanted there to be something easy to revert in case I missed something.

Reviewed by: Anna Thomas (in person)

llvm-svn: 338794
2018-08-03 00:21:56 +00:00
..
ADCE.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
AlignmentFromAssumptions.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
BDCE.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
CMakeLists.txt [UnrollAndJam] New Unroll and Jam pass 2018-07-01 12:47:30 +00:00
CallSiteSplitting.cpp Early exit with cheaper checks 2018-07-21 14:13:44 +00:00
ConstantHoisting.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
ConstantProp.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
CorrelatedValuePropagation.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
DCE.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
DeadStoreElimination.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
DivRemPairs.cpp Reland r338431: "Add DebugCounters to DivRemPairs" 2018-08-01 23:14:14 +00:00
EarlyCSE.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
FlattenCFGPass.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
Float2Int.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
GVN.cpp [GVN] Don't use the eliminated load as an available value in phi construction 2018-07-23 12:14:45 +00:00
GVNHoist.cpp [GVNHoist] safeToHoistLdSt allows illegal hoisting 2018-07-23 09:42:35 +00:00
GVNSink.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
GuardWidening.cpp [NFC] Collect statistics in GuardWidening 2018-07-31 04:37:11 +00:00
IVUsersPrinter.cpp
IndVarSimplify.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
InductiveRangeCheckElimination.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
InferAddressSpaces.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
InstSimplifyPass.cpp [instsimplify] Move the instsimplify pass to use more obvious file names 2018-06-29 23:36:03 +00:00
JumpThreading.cpp Revert r332168: "Reapply "[PR16756] Use SSAUpdaterBulk in JumpThreading."" 2018-07-05 22:10:31 +00:00
LICM.cpp [LICM] Remove unneccessary safety check to increase sinking effectiveness 2018-08-03 00:21:56 +00:00
LLVMBuild.txt Another try to commit 323321 (aggressive instruction combine). 2018-01-25 12:06:32 +00:00
LoopAccessAnalysisPrinter.cpp
LoopDataPrefetch.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LoopDeletion.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LoopDistribute.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LoopIdiomRecognize.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
LoopInstSimplify.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
LoopInterchange.cpp [LoopInterchange] Move PHI handling to adjustLoopBranches. 2018-06-19 08:03:24 +00:00
LoopLoadElimination.cpp Use SmallPtrSet explicitly for SmallSets with pointer types (NFC). 2018-06-12 11:16:56 +00:00
LoopPassManager.cpp
LoopPredication.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
LoopRerollPass.cpp [LoopReroll] Rewrite induction variable rewriting. 2018-06-22 22:58:55 +00:00
LoopRotation.cpp Refine the loop rotation's API 2018-04-19 20:29:43 +00:00
LoopSimplifyCFG.cpp Generalize MergeBlockIntoPredecessor. Replace uses of MergeBasicBlockIntoOnlyPred. 2018-06-20 22:01:04 +00:00
LoopSink.cpp [LICM] Factor out fault legality from canHoistOrSinkInst [NFC] 2018-08-02 04:08:04 +00:00
LoopStrengthReduce.cpp [LSR] If no Use is interesting, early return. 2018-07-13 23:40:00 +00:00
LoopUnrollAndJamPass.cpp [UnrollAndJam] New Unroll and Jam pass 2018-07-01 12:47:30 +00:00
LoopUnrollPass.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
LoopUnswitch.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
LoopVersioningLICM.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
LowerAtomic.cpp Remove redundant includes from lib/Transforms. 2017-12-13 21:31:01 +00:00
LowerExpectIntrinsic.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
LowerGuardIntrinsic.cpp
MemCpyOptimizer.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
MergeICmps.cpp [MergeICmps] Don't crash when memcmp is not available 2018-05-19 12:51:59 +00:00
MergedLoadStoreMotion.cpp [STLExtras] Add size() for ranges, and remove distance() 2018-05-16 23:20:42 +00:00
NaryReassociate.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
NewGVN.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
PartiallyInlineLibCalls.cpp [PartiallyInlineLibCalls][x86] add TTI hook to allow sqrt inlining to depend on arg rather than result 2017-11-27 21:15:43 +00:00
PlaceSafepoints.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
Reassociate.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
Reg2Mem.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
RewriteStatepointsForGC.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
SCCP.cpp Revert r337904: [IPSCCP] Use PredicateInfo to propagate facts from cmp instructions. 2018-07-25 19:44:19 +00:00
SROA.cpp Remove trailing space 2018-07-30 19:41:25 +00:00
Scalar.cpp [UnrollAndJam] New Unroll and Jam pass 2018-07-01 12:47:30 +00:00
Scalarizer.cpp [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-20 21:47:29 +00:00
SeparateConstOffsetFromGEP.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
SimpleLoopUnswitch.cpp [SimpleLoopUnswitch] Fix DT updates for trivial branch unswitching. 2018-07-28 00:01:05 +00:00
SimplifyCFGPass.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
Sink.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
SpeculateAroundPHIs.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
SpeculativeExecution.cpp Use SmallPtrSet explicitly for SmallSets with pointer types (NFC). 2018-06-12 11:16:56 +00:00
StraightLineStrengthReduce.cpp Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
StructurizeCFG.cpp [NFC] fix trivial typos in comments 2018-06-14 05:41:49 +00:00
TailRecursionElimination.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00