llvm-project/llvm/test/Transforms
Philip Reames 0adbb19409 [EarlyCSE] Exploit open ended invariant.start scopes
If we have an invariant.start with no corresponding invariant.end, then the memory location becomes invariant indefinitely after the invariant.start. As a result, anything dominated by the start is guaranteed to see the value the memory location had when the invariant.start executed.

This patch adds an AvailableInvariants table which tracks the generation a particular memory location became invariant and then uses that information to allow value forwarding that would otherwise be disallowed by potentially aliasing stores. (Reminder: In EarlyCSE everything clobbers everything by default.)

This should be compatible with the MemorySSA variant, but design is generational. We can and should add first class support for invariant.start within MemorySSA at a later time.  I took a quick look at doing so, but probably need some input from a MemorySSA expert.

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

llvm-svn: 327577
2018-03-14 21:35:06 +00:00
..
ADCE
AddDiscriminators Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
AggressiveInstCombine [AggressiveInstCombine] Fixed TruncCombine class to handle TruncInst leaf node correctly. 2018-01-31 22:39:05 +00:00
AlignmentFromAssumptions [AlignmentFromAssumptions] Set source and dest alignments of memory intrinsiscs separately 2018-02-22 18:55:59 +00:00
ArgumentPromotion [ArgumentPromotion] don't break musttail invariant PR36543 2018-03-02 00:59:27 +00:00
AtomicExpand
BDCE [BDCE] Salvage debug info from dying insts 2018-02-21 01:55:33 +00:00
BlockExtractor BlockExtractor: Don’t delete functions directly 2018-03-12 22:28:18 +00:00
BranchFolding
CallSiteSplitting [CallSiteSplitting] Do not crash when BB's terminator changes. 2018-03-06 14:00:58 +00:00
CalledValuePropagation Add CalledValuePropagation pass 2017-10-25 13:40:08 +00:00
CodeExtractor [PartialInlining] Use isInlineViable to detect constructs preventing inlining. 2018-03-10 14:53:44 +00:00
CodeGenPrepare [CGP] Fix the remove of matched phis in complex addressing mode 2018-03-12 03:50:07 +00:00
ConstProp [TargetLibraryInfo] fix finite mathlib function availability 2018-01-08 17:38:09 +00:00
ConstantHoisting Fix out-of-order stepping behavior in programs with hoisted constants. 2017-11-09 20:01:31 +00:00
ConstantMerge
Coroutines [Coroutines] Don't move stores for allocator args 2018-02-15 19:31:45 +00:00
CorrelatedValuePropagation Back out "Re-land: Teach CorrelatedValuePropagation to reduce the width of udiv/urem instructions." 2018-03-12 09:26:09 +00:00
CrossDSOCFI
DCE [DCE] Salvage debug info from dead insts 2018-02-15 22:26:18 +00:00
DeadArgElim [DAE] don't remove args of musttail target/caller 2018-03-01 00:09:35 +00:00
DeadStoreElimination [DSE] Don't DSE stores that subsequent memmove calls read from 2018-02-20 23:19:34 +00:00
DivRemPairs [DivRemPairs] split tests per target to account for bots that don't build for all targets 2017-09-09 14:10:59 +00:00
EarlyCSE [EarlyCSE] Exploit open ended invariant.start scopes 2018-03-14 21:35:06 +00:00
EliminateAvailableExternally
EntryExitInstrumenter EntryExitInstrumenter: set DebugLocs on the inserted call instructions (PR35412) 2017-11-28 18:44:26 +00:00
ExpandMemCmp/X86 [x86, MemCmpExpansion] allow 2 pairs of loads per block (PR33325) 2018-01-06 16:16:04 +00:00
Float2Int
ForcedFunctionAttrs
FunctionAttrs [FunctionAttrs][ArgumentPromotion][GlobalOpt] Disable some optimisations passes for naked functions 2018-02-22 14:42:08 +00:00
FunctionImport Reland r327041: [ThinLTO] Keep available_externally symbols live 2018-03-13 05:08:48 +00:00
GCOVProfiling
GVN Mark MergedLoadStoreMotion as not preserving MemDep results 2018-02-23 10:41:57 +00:00
GVNHoist [GVNHoist] Fix: PR35222 gvn-hoist incorrectly erases load in case of a loop 2018-01-04 07:47:24 +00:00
GVNSink Add an @llvm.sideeffect intrinsic 2017-11-08 21:59:51 +00:00
GlobalDCE
GlobalMerge
GlobalOpt [Evaluator] Evaluate load/store with bitcast 2018-03-13 10:19:50 +00:00
GlobalSplit
GuardWidening
IPConstantProp [IPSCCP] do not break musttail invariant (PR36485) 2018-03-01 01:19:18 +00:00
IRCE [SCEV] Smart range calculation for SCEVUnknown Phis 2018-03-01 06:56:48 +00:00
IndVarSimplify Revert [SCEV] Fix isKnownPredicate 2018-03-13 06:36:00 +00:00
IndirectBrExpand Introduce the "retpoline" x86 mitigation technique for variant #2 of the speculative execution vulnerabilities disclosed today, specifically identified by CVE-2017-5715, "Branch Target Injection", and is one of the two halves to Spectre.. 2018-01-22 22:05:25 +00:00
InferAddressSpaces [AMDGPU] Switch to the new addr space mapping by default 2018-02-02 16:07:16 +00:00
InferFunctionAttrs
Inline [NFC] fix trivial typos in comments and documents 2018-01-29 05:17:03 +00:00
InstCombine [InstCombine] [NFC] Add tests for peeking through unsigned FP casts for zero-equality compares (PR36682) 2018-03-14 17:31:03 +00:00
InstMerge
InstNamer
InstSimplify [InstSimplify] fix folds for (0.0 - X) + X --> 0 (PR27151) 2018-03-14 21:23:27 +00:00
InterleavedAccess [X86][LLVM]Expanding Supports lowerInterleaved{store|load}() in X86InterleavedAccess (VF64 stride 3-4) 2017-10-02 07:35:25 +00:00
Internalize
JumpThreading [LazyValueInfo] PR33357 prevent infinite recursion on BinaryOperator 2018-03-13 18:14:10 +00:00
LCSSA [Test] Fix the test to output to /dev/null instead of redirecting. 2018-02-23 19:03:04 +00:00
LICM [LICM] update BlockColors after splitting predecessors 2018-02-12 17:56:55 +00:00
LoadStoreVectorizer [AMDGPU] Supported ds_read_b128 generation; Widened vector length for local address-space. 2018-03-09 17:41:39 +00:00
LoopDataPrefetch
LoopDeletion [LoopDeletion] Handle users in unreachable block 2018-01-12 07:24:43 +00:00
LoopDistribute
LoopIdiom Adding a width of the GEP index to the Data Layout. 2018-02-14 06:58:08 +00:00
LoopInterchange DA: remove uses of GEP, only ask SCEV 2018-03-06 21:55:59 +00:00
LoopLoadElim
LoopPredication [Loop Predication] Teach LP about reverse loops with uge and sge latch conditions 2018-02-08 10:34:08 +00:00
LoopReroll
LoopRotate [LoopRotate] Detect loops with indirect branches better (we're giving up on them). 2018-01-09 23:54:35 +00:00
LoopSimplify [BasicBlockUtils] Check for unreachable preds before updating LI in UpdateAnalysisInformation 2018-01-02 16:25:50 +00:00
LoopSimplifyCFG
LoopStrengthReduce Revert "[PowerPC] LSR tunings for PowerPC" 2018-03-09 16:08:55 +00:00
LoopUnroll LoopUnroll: respect pragma unroll when AllowRemainder is disabled 2018-03-02 16:22:32 +00:00
LoopUnswitch [SimplifyCFG] Re-apply Relax restriction for folding unconditional branches 2018-02-08 07:16:29 +00:00
LoopVectorize [LV] Adding test for r327109 2018-03-09 18:02:36 +00:00
LoopVersioning
LoopVersioningLICM
LowerAtomic
LowerExpectIntrinsic
LowerGuardIntrinsic
LowerInvoke
LowerSwitch
LowerTypeTests Use branch funnels for virtual calls when retpoline mitigation is enabled. 2018-03-09 19:11:44 +00:00
Mem2Reg [Debugify] Add a pass to test debug info preservation 2017-12-08 21:57:28 +00:00
MemCpyOpt Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
MergeFunc Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
MergeICmps [MergeICmps] Make sure that the comparison only has one use. 2018-03-13 07:05:55 +00:00
MetaRenamer Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
NameAnonGlobals
NaryReassociate Add early exit on reassociation of 0 expression. 2018-03-07 02:17:08 +00:00
NewGVN [InstCombine, NewGVN] remove FP undef from tests 2018-03-08 14:57:08 +00:00
ObjCARC ObjCARC: teach the cloner about funclets 2018-03-12 21:46:09 +00:00
PGOProfile [ThinLTO] Recommit of import global variables 2018-03-12 10:30:50 +00:00
PartiallyInlineLibCalls [PartiallyInlineLibCalls][x86] add TTI hook to allow sqrt inlining to depend on arg rather than result 2017-11-27 21:15:43 +00:00
PhaseOrdering Adding a width of the GEP index to the Data Layout. 2018-02-14 06:58:08 +00:00
PlaceSafepoints Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
PreISelIntrinsicLowering
PruneEH
Reassociate [Reassociate] fix test to be independent of FP undef 2018-03-08 22:05:27 +00:00
Reg2Mem
RewriteStatepointsForGC [RewriteStatepoints] Fix stale parse points 2018-03-05 22:27:30 +00:00
SCCP [IPSCCP] Add getCompare which returns either true, false, undef or null. 2018-03-05 17:33:50 +00:00
SLPVectorizer [SLP] Additional tests for stores vectorization, NFC. 2018-03-05 20:20:12 +00:00
SROA [SROA] Take advantage of separate alignments for memcpy source and destination 2018-03-13 14:25:33 +00:00
SafeStack [SafeStack] Use updated CreateMemCpy API to set more accurate source and destination alignments. 2018-02-12 22:39:47 +00:00
SampleProfile Profiling tests: Endianess XFAIL for powerpc- (32-bit) 2018-01-09 20:09:23 +00:00
Scalarizer
SeparateConstOffsetFromGEP [AMDGPU] Change constant addr space to 4 2018-02-13 18:00:25 +00:00
SimpleLoopUnswitch [PM/Unswitch] Teach SimpleLoopUnswitch to do non-trivial unswitching, 2017-11-17 19:58:36 +00:00
SimplifyCFG Revert "[Debug] Retain both sets of debug intrinsics in HoistThenElseCodeToIf" 2018-03-09 22:00:10 +00:00
Sink [Sink] Really really fix predicate in legality check 2018-01-11 21:28:57 +00:00
SpeculateAroundPHIs Add a new pass to speculate around PHI nodes with constant (integer) operands when profitable. 2017-11-28 11:32:31 +00:00
SpeculativeExecution
StraightLineStrengthReduce
StripDeadPrototypes
StripSymbols
StructurizeCFG [StructurizeCFG] fix test to be independent of FP undef 2018-03-08 17:13:57 +00:00
SyntheticCountsPropagation Add a pass to generate synthetic function entry counts. 2018-01-09 19:39:35 +00:00
TailCallElim Remove this test 2017-11-28 22:39:38 +00:00
ThinLTOBitcodeWriter [ThinLTO] fix test failure without x86 backend 2018-02-06 07:03:09 +00:00
Util LowerDbgDeclare: ignore dbg.declares for allocas with volatile access 2018-03-09 00:45:04 +00:00
WholeProgramDevirt Use branch funnels for virtual calls when retpoline mitigation is enabled. 2018-03-09 19:11:44 +00:00