]> granicus.if.org Git - llvm/commitdiff
[PM] Avoid getResult on a higher level in LoopAccessAnalysis
authorSean Silva <chisophugis@gmail.com>
Thu, 7 Jul 2016 01:01:53 +0000 (01:01 +0000)
committerSean Silva <chisophugis@gmail.com>
Thu, 7 Jul 2016 01:01:53 +0000 (01:01 +0000)
Note that require<domtree> and require<loops> aren't needed because they
come in implicitly via the loop pass manager.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274712 91177308-0d34-0410-b5e6-96231b3b80d8

22 files changed:
lib/Analysis/LoopAccessAnalysis.cpp
test/Analysis/LoopAccessAnalysis/backward-dep-different-types.ll
test/Analysis/LoopAccessAnalysis/forward-loop-carried.ll
test/Analysis/LoopAccessAnalysis/forward-loop-independent.ll
test/Analysis/LoopAccessAnalysis/independent-interleaved.ll
test/Analysis/LoopAccessAnalysis/memcheck-for-loop-invariant.ll
test/Analysis/LoopAccessAnalysis/multiple-strides-rt-memory-checks.ll
test/Analysis/LoopAccessAnalysis/non-wrapping-pointer.ll
test/Analysis/LoopAccessAnalysis/nullptr.ll
test/Analysis/LoopAccessAnalysis/number-of-memchecks.ll
test/Analysis/LoopAccessAnalysis/pointer-with-unknown-bounds.ll
test/Analysis/LoopAccessAnalysis/resort-to-memchecks-only.ll
test/Analysis/LoopAccessAnalysis/reverse-memcheck-bounds.ll
test/Analysis/LoopAccessAnalysis/safe-no-checks.ll
test/Analysis/LoopAccessAnalysis/safe-with-dep-distance.ll
test/Analysis/LoopAccessAnalysis/store-to-invariant-check2.ll
test/Analysis/LoopAccessAnalysis/store-to-invariant-check3.ll
test/Analysis/LoopAccessAnalysis/stride-access-dependence.ll
test/Analysis/LoopAccessAnalysis/underlying-objects-1.ll
test/Analysis/LoopAccessAnalysis/underlying-objects-2.ll
test/Analysis/LoopAccessAnalysis/unsafe-and-rt-checks.ll
test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll

index 92d642fd11dda7155040689bdbd216f09e850730..ead137b94355c187e00dd01b78663738ef465370 100644 (file)
@@ -2027,15 +2027,23 @@ INITIALIZE_PASS_END(LoopAccessAnalysis, LAA_NAME, laa_name, false, true)
 char LoopAccessInfoAnalysis::PassID;
 
 LoopAccessInfo LoopAccessInfoAnalysis::run(Loop &L, AnalysisManager<Loop> &AM) {
-  // FIXME: ugly const cast
-  AnalysisManager<Function> &FAM = const_cast<FunctionAnalysisManager &>(
-      AM.getResult<FunctionAnalysisManagerLoopProxy>(L).getManager());
+  const AnalysisManager<Function> &FAM =
+      AM.getResult<FunctionAnalysisManagerLoopProxy>(L).getManager();
   Function &F = *L.getHeader()->getParent();
-  auto *SE = &FAM.getResult<ScalarEvolutionAnalysis>(F);
+  auto *SE = FAM.getCachedResult<ScalarEvolutionAnalysis>(F);
   auto *TLI = FAM.getCachedResult<TargetLibraryAnalysis>(F);
-  auto *AA = &FAM.getResult<AAManager>(F);
-  auto *DT = &FAM.getResult<DominatorTreeAnalysis>(F);
-  auto *LI = &FAM.getResult<LoopAnalysis>(F);
+  auto *AA = FAM.getCachedResult<AAManager>(F);
+  auto *DT = FAM.getCachedResult<DominatorTreeAnalysis>(F);
+  auto *LI = FAM.getCachedResult<LoopAnalysis>(F);
+  if (!SE)
+    report_fatal_error(
+        "ScalarEvolution must have been cached at a higher level");
+  if (!AA)
+    report_fatal_error("AliasAnalysis must have been cached at a higher level");
+  if (!DT)
+    report_fatal_error("DominatorTree must have been cached at a higher level");
+  if (!LI)
+    report_fatal_error("LoopInfo must have been cached at a higher level");
   const DataLayout &DL = F.getParent()->getDataLayout();
   return LoopAccessInfo(&L, SE, DL, TLI, AA, DT, LI);
 }
index 96335caa6373a3b5dd998f16259530fa60a1cc10..d8040a31a8dc303dba72b735fc53b9659ffbf48b 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output < %s  2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output < %s  2>&1 | FileCheck %s
 
 ; In this loop just because we access A through different types (int, float)
 ; we still have a dependence cycle:
index 6e3110091f2ee8e04281d0d000380a0517156d59..7d3ac09dbb9c4990f4e2388a8ffac9a4f3260796 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ;   for (unsigned i = 0; i < 100; i++) {
 ;     A[i+8] = B[i] + 2;
index a74627e795134c6956d8891edf30ad1206415972..41e2a2904fb2f1a257f1388be6ac911163e1ea7d 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; Check that loop-indepedent forward dependences are discovered properly.
 ;
index e09429afe5d59796b070680099f62be13c5b58a5..fe56ea9ab593993564c4d13a08b34a63352f05b4 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt < %s -store-to-load-forwarding-conflict-detection=false -loop-accesses -analyze | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -store-to-load-forwarding-conflict-detection=false  -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -store-to-load-forwarding-conflict-detection=false  -disable-output  < %s 2>&1 | FileCheck %s
 
 ; This test checks that we prove the strided accesses to be independent before
 ; concluding that there is a forward dependence.
index a74b23a4167147ecf71d2a722841a263003c85d1..f06bb00ec64aa6f2d6f462601c074d6baaf3d278 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; Handle memchecks involving loop-invariant addresses:
 ;
index c7bdf169019aa5e4414eb76cdf095baba20fcb54..87a6c18ab3034773cbd1584c132c84946ffbae8f 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze -S < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; This is the test case from PR26314.
 ; When we were retrying dependence checking with memchecks only, 
index e995cb63fc0f16b7a259ad625eab10a863a0ac10..94080f05bde261c3d41c5c31acf34ef16769c59e 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -basicaa -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='require<aa>,loop(print-access-info)' -aa-pipeline='basic-aa' -disable-output < %s  2>&1 | FileCheck %s
+; RUN: opt -passes='require<aa>,require<scalar-evolution>,require<aa>,loop(print-access-info)' -aa-pipeline='basic-aa' -disable-output < %s  2>&1 | FileCheck %s
 
 ; For this loop:
 ;   for (int i = 0; i < n; i++)
index 83466ce889bd88b5101d66479c76252106f2e17b..476cf3208c84c2b1a1ac28850b2dc2bcd12f0f80 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze %s  | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; Test that the loop accesses are proven safe in this case.
 ; The analyzer uses to be confused by the "diamond" because GetUnderlyingObjects
index cbd8a3e5844c0b7fe71a98901dbd31d41759be23..a9626f4dc710358e2127123d4f76cf001d871ea3 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
 target triple = "aarch64--linux-gnueabi"
index ae52a55ffadc1f56bf7e7f548364cb33a487d527..a10b851bcd1a24e6baf09caf944b2c97560e885b 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 
index de8b50e90f56a44959a79bd52aba98545ade90b3..921fd4d06314d4163c34cf0abe233d78296d31e0 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; We give up analyzing the dependences in this loop due to non-constant
 ; distance between A[i+offset] and A[i] and add memchecks to prove
index 556eaddd3eae485d4a553dd57644b7d8397219cd..607e007f7a2d194c26663f5a7d422db2a7caef58 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; The runtime memory check code and the access grouping
 ; algorithm both assume that the start and end values
index 8ef5b05fb501dc308c59e3e0c728c2155457c5e6..8018994009957c7e2778c121c4a8ea814dcddf05 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -basicaa -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='require<aa>,loop(print-access-info)' -aa-pipeline='basic-aa' -disable-output < %s  2>&1 | FileCheck %s
+; RUN: opt -passes='require<aa>,require<scalar-evolution>,require<aa>,loop(print-access-info)' -aa-pipeline='basic-aa' -disable-output < %s  2>&1 | FileCheck %s
 
 ; If the arrays don't alias this loop is safe with no memchecks:
 ;   for (i = 0; i < n; i++)
index 2025fad00a99d20eab869154918130ea86b7e711..910d49edbb181f971b946e04f101a0f596c9a73a 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; Analyze this loop:
 ;   for (i = 0; i < n; i++)
index 29fcea3903d11afef700548081d288309badd83d..711c14ef7728dec6cb40039110669cb0a3c44c91 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt < %s -loop-accesses -analyze  | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; Test to confirm LAA will not find store to invariant address.
 ; Inner loop has no store to invariant address.
index f289218965908c949bd0f080a54ddf03b761b06d..85fea798071f07f68a32136a5b1788e758df91c9 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt < %s -loop-accesses -analyze | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; Test to confirm LAA will find store to invariant address.
 ; Inner loop has a store to invariant address.
index 8e6a9e27d7e761a33dfefaffb5ee4f1d2352cfab..4fe6f9f704f7153509bc039ed70e6b7384b27942 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
 
index cf4418061a982673c403c39d4f748c2a28f34b06..705453b65cc50f20a7739123ed2db7b54c041e49 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -basicaa -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; In:
 ;
index e140b254a321aa68c5366f79d236711ed9d87841..f9d88e891be9b7a69ee8e0dcd25467ecf34f8e38 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -basicaa -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; This loop:
 ;
index 49e2ed43c8c80affb0d03d0d5ab41d61b0ddc471..7fbed6fcc15cf6a1fef150f1cad15c74f33d3ef6 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
-; RUN: opt -passes='loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
+; RUN: opt -passes='require<scalar-evolution>,require<aa>,loop(print-access-info)' -disable-output  < %s 2>&1 | FileCheck %s
 
 ; Analyze this loop:
 ;   for (i = 0; i < n; i++)
index beb94cfe9eab29dea3269ff326fc8749407e832f..75a71b444283f80ac4c0655af20c2351c04119f5 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: opt -basicaa -loop-accesses -analyze < %s | FileCheck %s -check-prefix=LAA
-; RUN: opt -passes='require<aa>,loop(print-access-info)' -aa-pipeline='basic-aa' -disable-output < %s  2>&1 | FileCheck %s --check-prefix=LAA
+; RUN: opt -passes='require<aa>,require<scalar-evolution>,require<aa>,loop(print-access-info)' -aa-pipeline='basic-aa' -disable-output < %s  2>&1 | FileCheck %s --check-prefix=LAA
 ; RUN: opt -loop-versioning -S < %s | FileCheck %s -check-prefix=LV
 
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"