llvm/test/Analysis/BasicAA
Arnold Schwaighofer 3d5f96ee1b BasicAA: Recognize cyclic NoAlias phis
Enhances basic alias analysis to recognize phis whose first incoming values are
NoAlias and whose other incoming values are just the phi node itself through
some amount of recursion.

Example: With this change basicaa reports that ptr_phi and ptr_phi2 do not alias
each other.

bb:
 ptr = ptr2 + 1

loop:
  ptr_phi = phi [bb, ptr], [loop, ptr_plus_one]
  ptr2_phi = phi [bb, ptr2], [loop, ptr2_plus_one]
  ...
  ptr_plus_one = gep ptr_phi, 1
  ptr2_plus_one = gep ptr2_phi, 1

This enables the elimination of one load in code like the following:

extern int foo;

int test_noalias(int *ptr, int num, int* coeff) {
  int *ptr2 = ptr;
  int result = (*ptr++) * (*coeff--);
  while (num--) {
    *ptr2++ = *ptr;
    result +=  (*coeff--) * (*ptr++);
  }
  *ptr = foo;
  return result;
}

Part 2/2 of fix for PR13564.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163319 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06 14:41:53 +00:00
..
2003-02-26-AccessSizeTest.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
2003-03-04-GEPCrash.ll Change tests from "opt %s" to "opt < %s" so that opt doesn't see the 2009-09-11 18:01:28 +00:00
2003-04-22-GEPProblem.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
2003-04-25-GEPCrash.ll Change tests from "opt %s" to "opt < %s" so that opt doesn't see the 2009-09-11 18:01:28 +00:00
2003-05-21-GEP-Problem.ll Make BasicAliasAnalysis a normal AliasAnalysis implementation which 2010-10-18 18:04:47 +00:00
2003-06-01-AliasCrash.ll Change tests from "opt %s" to "opt < %s" so that opt doesn't see the 2009-09-11 18:01:28 +00:00
2003-07-03-BasicAACrash.ll Change tests from "opt %s" to "opt < %s" so that opt doesn't see the 2009-09-11 18:01:28 +00:00
2003-09-19-LocalArgument.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
2003-11-04-SimpleCases.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
2003-12-11-ConstExprGEP.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
2004-07-28-MustAliasbug.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
2006-03-03-BadArraySubscript.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
2006-11-03-BasicAAVectorCrash.ll Make BasicAliasAnalysis a normal AliasAnalysis implementation which 2010-10-18 18:04:47 +00:00
2007-01-13-BasePointerBadNoAlias.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
2007-08-01-NoAliasAndCalls.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
2007-08-01-NoAliasAndGEP.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
2007-08-05-GetOverloadedModRef.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
2007-10-24-ArgumentsGlobals.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
2007-11-05-SizeCrash.ll Make BasicAliasAnalysis a normal AliasAnalysis implementation which 2010-10-18 18:04:47 +00:00
2007-12-08-OutOfBoundsCrash.ll Make BasicAliasAnalysis a normal AliasAnalysis implementation which 2010-10-18 18:04:47 +00:00
2008-04-15-Byval.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
2008-06-02-GEPTailCrash.ll Make BasicAliasAnalysis a normal AliasAnalysis implementation which 2010-10-18 18:04:47 +00:00
2008-11-23-NoaliasRet.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
2009-03-04-GEPNoalias.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
2009-10-13-AtomicModRef.ll Enhance alias analysis for atomic instructions a bit. Upgrade a couple alias-analysis tests to the new atomic instructions. 2011-09-26 20:15:28 +00:00
2009-10-13-GEP-BaseNoAlias.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
2010-09-15-GEP-SignedArithmetic.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
aligned-overread.ll Teach BasicAA about the LLVM IR rules that allow reading past the end of an object given sufficient alignment. Fixes PR12098. 2012-02-27 20:46:07 +00:00
args-rets-allocas-loads.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
byval.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
cas.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
constant-over-index.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
dag.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
empty.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
featuretest.ll fix PR7589: In brief: 2010-08-18 04:28:19 +00:00
full-store-partial-alias.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
gcsetest.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
gep-alias.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
getmodrefinfo-cs-cs.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
global-size.ll Duncan pointed out that if the alignment isn't explicitly specified, it defaults to the ABI alignment. Given that, make this code a bit more aggressive in such cases. 2012-02-27 23:16:46 +00:00
intrinsics.ll Teach BasicAA about arm.neon.vld1 and vst1. 2011-04-27 20:44:28 +00:00
lit.local.cfg Replace all instances of dg.exp file with lit.local.cfg, since all tests are run with LIT now and now Dejagnu. dg.exp is no longer needed. 2012-02-16 06:28:33 +00:00
memset_pattern.ll Teach BasicAA about the aliasing properties of memset_pattern16. 2011-09-06 23:33:25 +00:00
modref.ll PR10628: Fix getModRefInfo so it queries the underlying alias() implementation correctly while checking nocapture calls. 2011-09-28 00:34:27 +00:00
must-and-partial.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
no-escape-call.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
noalias-geps.ll BasicAA: GEPs of NoAlias'ing base ptr with equivalent indices are NoAlias 2012-09-06 14:31:51 +00:00
nocapture.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
phi-aa.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
phi-and-select.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
phi-speculation.ll BasicAA: Recognize cyclic NoAlias phis 2012-09-06 14:41:53 +00:00
pure-const-dce.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
store-promote.ll PR9634: Don't unconditionally tell the AliasSetTracker that the PreheaderLoad 2011-04-07 01:35:06 +00:00
tailcall-modref.ll FileCheck-ize these tests. Harden some of them. 2012-04-24 09:15:38 +00:00
underlying-value.ll Make DecomposeGEPExpression check SimplifyInstruction only 2011-05-24 18:24:08 +00:00
unreachable-block.ll Make BasicAliasAnalysis a normal AliasAnalysis implementation which 2010-10-18 18:04:47 +00:00