[llvm] r234833 - [LoopAccesses] Properly print whether memchecks are needed

Adam Nemet anemet at apple.com
Mon Apr 13 18:12:55 PDT 2015


Author: anemet
Date: Mon Apr 13 20:12:55 2015
New Revision: 234833

URL: http://llvm.org/viewvc/llvm-project?rev=234833&view=rev
Log:
[LoopAccesses] Properly print whether memchecks are needed

Fix oversight in -analyze output.  PtrRtCheck contains the pointers that
need to be checked against each other and not whether memchecks are
necessary.

For instance in the testcase PtrRtCheck has four elements but all
no-alias so no checking is necessary.

Added:
    llvm/trunk/test/Analysis/LoopAccessAnalysis/safe-no-checks.ll
Modified:
    llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp

Modified: llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp?rev=234833&r1=234832&r2=234833&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/LoopAccessAnalysis.cpp Mon Apr 13 20:12:55 2015
@@ -1314,10 +1314,10 @@ LoopAccessInfo::LoopAccessInfo(Loop *L,
 
 void LoopAccessInfo::print(raw_ostream &OS, unsigned Depth) const {
   if (CanVecMem) {
-    if (PtrRtCheck.empty())
-      OS.indent(Depth) << "Memory dependences are safe\n";
-    else
+    if (PtrRtCheck.Need)
       OS.indent(Depth) << "Memory dependences are safe with run-time checks\n";
+    else
+      OS.indent(Depth) << "Memory dependences are safe\n";
   }
 
   OS.indent(Depth) << "Store to invariant address was "

Added: llvm/trunk/test/Analysis/LoopAccessAnalysis/safe-no-checks.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/LoopAccessAnalysis/safe-no-checks.ll?rev=234833&view=auto
==============================================================================
--- llvm/trunk/test/Analysis/LoopAccessAnalysis/safe-no-checks.ll (added)
+++ llvm/trunk/test/Analysis/LoopAccessAnalysis/safe-no-checks.ll Mon Apr 13 20:12:55 2015
@@ -0,0 +1,43 @@
+; RUN: opt -basicaa -loop-accesses -analyze < %s | FileCheck %s
+
+; If the arrays don't alias this loop is safe with no memchecks:
+;   for (i = 0; i < n; i++)
+;    A[i] = A[i+1] * B[i] * C[i];
+
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.10.0"
+
+; CHECK: Memory dependences are safe{{$}}
+
+define void @f(i16* noalias %a,
+               i16* noalias %b,
+               i16* noalias %c) {
+entry:
+  br label %for.body
+
+for.body:                                         ; preds = %for.body, %entry
+  %ind = phi i64 [ 0, %entry ], [ %add, %for.body ]
+
+  %add = add nuw nsw i64 %ind, 1
+
+  %arrayidxA_plus_2 = getelementptr inbounds i16, i16* %a, i64 %add
+  %loadA_plus_2 = load i16, i16* %arrayidxA_plus_2, align 2
+
+  %arrayidxB = getelementptr inbounds i16, i16* %b, i64 %ind
+  %loadB = load i16, i16* %arrayidxB, align 2
+
+  %arrayidxC = getelementptr inbounds i16, i16* %c, i64 %ind
+  %loadC = load i16, i16* %arrayidxC, align 2
+
+  %mul = mul i16 %loadB, %loadA_plus_2
+  %mul1 = mul i16 %mul, %loadC
+
+  %arrayidxA = getelementptr inbounds i16, i16* %a, i64 %ind
+  store i16 %mul1, i16* %arrayidxA, align 2
+
+  %exitcond = icmp eq i64 %add, 20
+  br i1 %exitcond, label %for.end, label %for.body
+
+for.end:                                          ; preds = %for.body
+  ret void
+}





More information about the llvm-commits mailing list