[llvm] r234387 - Revert "[LoopAccesses] Allow analysis to complete in the presence of uniform stores"
Adam Nemet
anemet at apple.com
Tue Apr 7 21:16:56 PDT 2015
Author: anemet
Date: Tue Apr 7 23:16:55 2015
New Revision: 234387
URL: http://llvm.org/viewvc/llvm-project?rev=234387&view=rev
Log:
Revert "[LoopAccesses] Allow analysis to complete in the presence of uniform stores"
This reverts commit r234361.
It caused PR23157.
Removed:
llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check1.ll
llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check2.ll
Modified:
llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h
llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp
llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
Modified: llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h?rev=234387&r1=234386&r2=234387&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h (original)
+++ llvm/trunk/include/llvm/Analysis/LoopAccessAnalysis.h Tue Apr 7 23:16:55 2015
@@ -432,13 +432,6 @@ public:
/// Only used in DEBUG build but we don't want NDEBUG-dependent ABI.
unsigned NumSymbolicStrides;
- /// \brief Checks existence of store to invariant address inside loop.
- /// If the loop has any store to invariant address, then it returns true,
- /// else returns false.
- bool hasStoreToLoopInvariantAddress() const {
- return StoreToLoopInvariantAddress;
- }
-
private:
/// \brief Analyze the loop. Substitute symbolic strides using Strides.
void analyzeLoop(const ValueToValueMap &Strides);
@@ -476,10 +469,6 @@ private:
/// \brief Cache the result of analyzeLoop.
bool CanVecMem;
- /// \brief Indicator for storing to uniform addresses.
- /// If a loop has write to a loop invariant address then it should be true.
- bool StoreToLoopInvariantAddress;
-
/// \brief The diagnostics report generated for the analysis. E.g. why we
/// couldn't analyze the loop.
Optional<LoopAccessReport> Report;
Modified: llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp?rev=234387&r1=234386&r2=234387&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp Tue Apr 7 23:16:55 2015
@@ -1044,8 +1044,16 @@ void LoopAccessInfo::analyzeLoop(const V
for (I = Stores.begin(), IE = Stores.end(); I != IE; ++I) {
StoreInst *ST = cast<StoreInst>(*I);
Value* Ptr = ST->getPointerOperand();
- // Check for store to loop invariant address.
- StoreToLoopInvariantAddress = isUniform(Ptr);
+
+ if (isUniform(Ptr)) {
+ emitAnalysis(
+ LoopAccessReport(ST)
+ << "write to a loop invariant address could not be vectorized");
+ DEBUG(dbgs() << "LAA: We don't allow storing to uniform addresses\n");
+ CanVecMem = false;
+ return;
+ }
+
// If we did *not* see this pointer before, insert it to the read-write
// list. At this phase it is only a 'write' list.
if (Seen.insert(Ptr).second) {
@@ -1306,8 +1314,7 @@ LoopAccessInfo::LoopAccessInfo(Loop *L,
const ValueToValueMap &Strides)
: DepChecker(SE, L), NumComparisons(0), TheLoop(L), SE(SE), DL(DL),
TLI(TLI), AA(AA), DT(DT), NumLoads(0), NumStores(0),
- MaxSafeDepDistBytes(-1U), CanVecMem(false),
- StoreToLoopInvariantAddress(false) {
+ MaxSafeDepDistBytes(-1U), CanVecMem(false) {
if (canAnalyzeLoop())
analyzeLoop(Strides);
}
@@ -1320,10 +1327,6 @@ void LoopAccessInfo::print(raw_ostream &
OS.indent(Depth) << "Memory dependences are safe with run-time checks\n";
}
- OS.indent(Depth) << "Store to invariant address was "
- << (StoreToLoopInvariantAddress ? "" : "not ")
- << "found in loop.\n";
-
if (Report)
OS.indent(Depth) << "Report: " << Report->str() << "\n";
Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=234387&r1=234386&r2=234387&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
+++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Tue Apr 7 23:16:55 2015
@@ -4009,14 +4009,6 @@ bool LoopVectorizationLegality::canVecto
if (!LAI->canVectorizeMemory())
return false;
- if (LAI->hasStoreToLoopInvariantAddress()) {
- emitAnalysis(
- VectorizationReport()
- << "write to a loop invariant address could not be vectorized");
- DEBUG(dbgs() << "LV: We don't allow storing to uniform addresses\n");
- return false;
- }
-
if (LAI->getNumRuntimePointerChecks() >
VectorizerParams::RuntimeMemoryCheckThreshold) {
emitAnalysis(VectorizationReport()
Removed: llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check1.ll?rev=234386&view=auto
==============================================================================
--- llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check1.ll (original)
+++ llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check1.ll (removed)
@@ -1,53 +0,0 @@
-; RUN: opt < %s -loop-accesses -analyze | FileCheck %s
-
-; Test to confirm LAA will find store to invariant address.
-; Inner loop has a store to invariant address.
-;
-; for(; i < itr; i++) {
-; for(; j < itr; j++) {
-; var1[i] = var2[j] + var1[i];
-; }
-; }
-
-; CHECK: Store to invariant address was found in loop.
-; CHECK-NOT: Store to invariant address was not found in loop.
-
-define i32 @foo(i32* nocapture %var1, i32* nocapture readonly %var2, i32 %itr) #0 {
-entry:
- %cmp20 = icmp eq i32 %itr, 0
- br i1 %cmp20, label %for.end10, label %for.cond1.preheader
-
-for.cond1.preheader: ; preds = %entry, %for.inc8
- %indvars.iv23 = phi i64 [ %indvars.iv.next24, %for.inc8 ], [ 0, %entry ]
- %j.022 = phi i32 [ %j.1.lcssa, %for.inc8 ], [ 0, %entry ]
- %cmp218 = icmp ult i32 %j.022, %itr
- br i1 %cmp218, label %for.body3.lr.ph, label %for.inc8
-
-for.body3.lr.ph: ; preds = %for.cond1.preheader
- %arrayidx5 = getelementptr inbounds i32, i32* %var1, i64 %indvars.iv23
- %0 = zext i32 %j.022 to i64
- br label %for.body3
-
-for.body3: ; preds = %for.body3, %for.body3.lr.ph
- %indvars.iv = phi i64 [ %0, %for.body3.lr.ph ], [ %indvars.iv.next, %for.body3 ]
- %arrayidx = getelementptr inbounds i32, i32* %var2, i64 %indvars.iv
- %1 = load i32, i32* %arrayidx, align 4
- %2 = load i32, i32* %arrayidx5, align 4
- %add = add nsw i32 %2, %1
- store i32 %add, i32* %arrayidx5, align 4
- %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
- %lftr.wideiv = trunc i64 %indvars.iv.next to i32
- %exitcond = icmp eq i32 %lftr.wideiv, %itr
- br i1 %exitcond, label %for.inc8, label %for.body3
-
-for.inc8: ; preds = %for.body3, %for.cond1.preheader
- %j.1.lcssa = phi i32 [ %j.022, %for.cond1.preheader ], [ %itr, %for.body3 ]
- %indvars.iv.next24 = add nuw nsw i64 %indvars.iv23, 1
- %lftr.wideiv25 = trunc i64 %indvars.iv.next24 to i32
- %exitcond26 = icmp eq i32 %lftr.wideiv25, %itr
- br i1 %exitcond26, label %for.end10, label %for.cond1.preheader
-
-for.end10: ; preds = %for.inc8, %entry
- ret i32 undef
-}
-
Removed: llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check2.ll?rev=234386&view=auto
==============================================================================
--- llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check2.ll (original)
+++ llvm/trunk/test/Analysis/LoopAccessAnalysis/store-to-invariant-check2.ll (removed)
@@ -1,54 +0,0 @@
-; RUN: opt < %s -loop-accesses -analyze | FileCheck %s
-
-; Test to confirm LAA will not find store to invariant address.
-; Inner loop has no store to invariant address.
-;
-; for(; i < itr; i++) {
-; for(; j < itr; j++) {
-; var2[j] = var2[j] + var1[i];
-; }
-; }
-
-; CHECK: Store to invariant address was not found in loop.
-; CHECK-NOT: Store to invariant address was found in loop.
-
-
-define i32 @foo(i32* nocapture readonly %var1, i32* nocapture %var2, i32 %itr) #0 {
-entry:
- %cmp20 = icmp eq i32 %itr, 0
- br i1 %cmp20, label %for.end10, label %for.cond1.preheader
-
-for.cond1.preheader: ; preds = %entry, %for.inc8
- %indvars.iv23 = phi i64 [ %indvars.iv.next24, %for.inc8 ], [ 0, %entry ]
- %j.022 = phi i32 [ %j.1.lcssa, %for.inc8 ], [ 0, %entry ]
- %cmp218 = icmp ult i32 %j.022, %itr
- br i1 %cmp218, label %for.body3.lr.ph, label %for.inc8
-
-for.body3.lr.ph: ; preds = %for.cond1.preheader
- %arrayidx5 = getelementptr inbounds i32, i32* %var1, i64 %indvars.iv23
- %0 = zext i32 %j.022 to i64
- br label %for.body3
-
-for.body3: ; preds = %for.body3, %for.body3.lr.ph
- %indvars.iv = phi i64 [ %0, %for.body3.lr.ph ], [ %indvars.iv.next, %for.body3 ]
- %arrayidx = getelementptr inbounds i32, i32* %var2, i64 %indvars.iv
- %1 = load i32, i32* %arrayidx, align 4
- %2 = load i32, i32* %arrayidx5, align 4
- %add = add nsw i32 %2, %1
- store i32 %add, i32* %arrayidx, align 4
- %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
- %lftr.wideiv = trunc i64 %indvars.iv.next to i32
- %exitcond = icmp eq i32 %lftr.wideiv, %itr
- br i1 %exitcond, label %for.inc8, label %for.body3
-
-for.inc8: ; preds = %for.body3, %for.cond1.preheader
- %j.1.lcssa = phi i32 [ %j.022, %for.cond1.preheader ], [ %itr, %for.body3 ]
- %indvars.iv.next24 = add nuw nsw i64 %indvars.iv23, 1
- %lftr.wideiv25 = trunc i64 %indvars.iv.next24 to i32
- %exitcond26 = icmp eq i32 %lftr.wideiv25, %itr
- br i1 %exitcond26, label %for.end10, label %for.cond1.preheader
-
-for.end10: ; preds = %for.inc8, %entry
- ret i32 undef
-}
-
More information about the llvm-commits
mailing list