llvm/test/Analysis
Ahmed Bougacha 9c252165a7 [BasicAA] Try to disambiguate GEPs through arrays of structs into
different fields.

We can show that two GEPs off of the same (possibly multidimensional)
array of structs, into different fields, can't alias.  Quoting:

For two GEPOperators GEP1 and GEP2, if we find that:
- both GEPs begin indexing from the exact same pointer;
- the last indices in both GEPs are constants, indexing into a struct;
- said indices are different, hence,the pointed-to fields are different;
- and both GEPs only index through arrays prior to that;

this lets us determine that the struct that GEP1 indexes into and the
struct that GEP2 indexes into must either precisely overlap or be
completely disjoint.  Because they cannot partially overlap, indexing
into different non-overlapping fields of the struct will never alias.

The other BasicAA::aliasGEP rules worked in some cases, but not all
(for example, the i32x3 struct in the testcase).
We can add this simple ad-hoc rule to complement them.

rdar://19717375
Differential Revision: http://reviews.llvm.org/D7453


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228498 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-07 17:04:29 +00:00
..
AssumptionCache [PM] Actually add the new pass manager support for the assumption cache. 2015-01-22 21:53:09 +00:00
BasicAA [BasicAA] Try to disambiguate GEPs through arrays of structs into 2015-02-07 17:04:29 +00:00
BlockFrequencyInfo IR: Make metadata typeless in assembly 2014-12-15 19:07:53 +00:00
BranchProbabilityInfo IR: Make metadata typeless in assembly 2014-12-15 19:07:53 +00:00
CallGraph [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
CFLAliasAnalysis Fix incorrect partial aliasing 2015-01-26 17:31:17 +00:00
CostModel [PM] Change the core design of the TTI analysis to use a polymorphic 2015-01-31 03:43:40 +00:00
Delinearization ScalarEvolution: Derive element size from the type of the loaded element 2014-06-08 19:21:20 +00:00
DependenceAnalysis [DependenceAnalysis] Allow subscripts of different types 2014-11-16 16:52:44 +00:00
Dominators [PM] Port domtree to the new pass manager (at last). 2015-01-14 10:19:28 +00:00
GlobalsModRef Move the complex address expression out of DIVariable and into an extra 2014-10-01 18:55:02 +00:00
LazyCallGraph [LCG] Add support for building persistent and connected SCCs to the 2014-04-18 10:50:32 +00:00
Lint Teach lint about address spaces 2014-03-06 17:33:55 +00:00
LoopInfo [PM] Port LoopInfo to the new pass manager, adding both a LoopAnalysis 2015-01-20 10:58:50 +00:00
MemoryDependenceAnalysis [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
PostDominators FileCheck-ize tests. 2013-08-22 00:51:19 +00:00
RegionInfo [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
ScalarEvolution Make ScalarEvolution less aggressive with respect to no-wrap flags. 2015-01-22 00:48:47 +00:00
ScopedNoAliasAA IR: Make metadata typeless in assembly 2014-12-15 19:07:53 +00:00
TypeBasedAliasAnalysis Re-reapply r221924: "[GVN] Perform Scalar PRE on gep indices that feed loads before 2015-01-09 19:19:56 +00:00
ValueTracking Introduce print-memderefs to test isDereferenceablePointer 2015-02-06 01:46:42 +00:00