llvm-project/llvm/test/Analysis
Michael Kruse 978ba61536 Introduce llvm.loop.parallel_accesses and llvm.access.group metadata.
The current llvm.mem.parallel_loop_access metadata has a problem in that
it uses LoopIDs. LoopID unfortunately is not loop identifier. It is
neither unique (there's even a regression test assigning the some LoopID
to multiple loops; can otherwise happen if passes such as LoopVersioning
make copies of entire loops) nor persistent (every time a property is
removed/added from a LoopID's MDNode, it will also receive a new LoopID;
this happens e.g. when calling Loop::setLoopAlreadyUnrolled()).
Since most loop transformation passes change the loop attributes (even
if it just to mark that a loop should not be processed again as
llvm.loop.isvectorized does, for the versioned and unversioned loop),
the parallel access information is lost for any subsequent pass.

This patch unlinks LoopIDs and parallel accesses.
llvm.mem.parallel_loop_access metadata on instruction is replaced by
llvm.access.group metadata. llvm.access.group points to a distinct
MDNode with no operands (avoiding the problem to ever need to add/remove
operands), called "access group". Alternatively, it can point to a list
of access groups. The LoopID then has an attribute
llvm.loop.parallel_accesses with all the access groups that are parallel
(no dependencies carries by this loop).

This intentionally avoid any kind of "ID". Loops that are clones/have
their attributes modifies retain the llvm.loop.parallel_accesses
attribute. Access instructions that a cloned point to the same access
group. It is not necessary for each access to have it's own "ID" MDNode,
but those memory access instructions with the same behavior can be
grouped together.

The behavior of llvm.mem.parallel_loop_access is not changed by this
patch, but should be considered deprecated.

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

llvm-svn: 349725
2018-12-20 04:58:07 +00:00
..
AliasSet [Analysis] Make LocationSize pretty-printing more descriptive 2018-10-10 01:35:22 +00:00
AssumptionCache
BasicAA [PPC] Remove Darwin support from POWER backend. 2018-08-28 01:18:29 +00:00
BlockFrequencyInfo [BFI] Use rounding while computing profile counts. 2018-08-16 00:26:59 +00:00
BranchProbabilityInfo [BPI] Apply invoke heuristic before loop branch heuristic 2018-06-08 13:03:21 +00:00
CFLAliasAnalysis Revert r332657: "[AA] cfl-anders-aa with field sensitivity" 2018-05-17 21:56:39 +00:00
CallGraph Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
ConstantFolding Cleanup test case by removing unused attribute dso_local 2018-12-11 09:32:49 +00:00
CostModel [CostModel][X86] Don't count 2 shuffles on the last level of a pairwise arithmetic or min/max reduction 2018-12-13 19:08:10 +00:00
Delinearization Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
DemandedBits Reapply "[DemandedBits][BDCE] Support vectors of integers" 2018-12-07 15:38:13 +00:00
DependenceAnalysis [DA] Delinearise AddRecs if we can prove they don't wrap 2018-06-25 15:13:26 +00:00
DivergenceAnalysis [DA] GPUDivergenceAnalysis for unstructured GPU kernels 2018-11-30 22:55:20 +00:00
DominanceFrontier
Dominators
GlobalsModRef [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
IVUsers Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
LazyCallGraph
LazyValueAnalysis [LVI] run transfer function for binary operator even when the RHS isn't a constant 2018-11-21 05:24:12 +00:00
LegacyDivergenceAnalysis AMDGPU: Fix tests using old number for constant address space 2018-09-10 02:54:25 +00:00
Lint [Lint] Upgrade uses of MemoryIntrinic::getAlignment() to new API. (NFCI) 2018-01-31 16:42:15 +00:00
LoopAccessAnalysis [LV] Avoid vectorizing unsafe dependencies in uniform address 2018-11-19 15:39:59 +00:00
LoopInfo Introduce llvm.loop.parallel_accesses and llvm.access.group metadata. 2018-12-20 04:58:07 +00:00
MemoryDependenceAnalysis [MemDep] Fixed handling of invariant.group 2018-05-18 22:40:34 +00:00
MemorySSA llvm: Add support for "-fno-delete-null-pointer-checks" 2018-07-09 22:27:23 +00:00
MustExecute [MustExecute] Fix algorithmic bug in isGuaranteedToExecute. PR38514 2018-08-17 06:19:17 +00:00
PhiValues Add a PhiValuesAnalysis pass to calculate the underlying values of phis 2018-06-28 14:13:06 +00:00
PostDominators [Dominators] Include infinite loops in PostDominatorTree 2017-08-15 18:14:57 +00:00
ProfileSummary [ProfileSummary] Add options to override hot and cold count thresholds. 2018-11-02 17:39:31 +00:00
RegionInfo [Dominators] Include infinite loops in PostDominatorTree 2017-08-15 18:14:57 +00:00
ScalarEvolution [test] Fix ScalarEvolution test to allow __func__ with prototype 2018-12-02 16:49:28 +00:00
ScopedNoAliasAA
StackSafetyAnalysis [stack-safety] Inter-Procedural Analysis implementation 2018-11-26 23:05:58 +00:00
TypeBasedAliasAnalysis [FunctionAttrs] Infer WriteOnly Function Attribute 2018-08-23 15:05:22 +00:00
ValueTracking InstCombine: move hasOneUse check to the top of foldICmpAddConstant 2018-09-10 14:26:44 +00:00
alias-analysis-uses.ll