[polly] r222103 - Independent blocks: SE->forget() scalars translated to arrays

Tobias Grosser tobias at grosser.es
Sun Nov 16 12:33:58 PST 2014


Author: grosser
Date: Sun Nov 16 14:33:58 2014
New Revision: 222103

URL: http://llvm.org/viewvc/llvm-project?rev=222103&view=rev
Log:
Independent blocks: SE->forget() scalars translated to arrays

This prevents SCEVs to reference values not valid any more and as a consequence
solves a bug where such values reintroduced during ast generation caused the
independent blocks pass to fail validation.

http://llvm.org/PR21204

Added:
    polly/trunk/test/Isl/CodeGen/two-scops-in-row.ll
Modified:
    polly/trunk/lib/Transform/IndependentBlocks.cpp

Modified: polly/trunk/lib/Transform/IndependentBlocks.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Transform/IndependentBlocks.cpp?rev=222103&r1=222102&r2=222103&view=diff
==============================================================================
--- polly/trunk/lib/Transform/IndependentBlocks.cpp (original)
+++ polly/trunk/lib/Transform/IndependentBlocks.cpp Sun Nov 16 14:33:58 2014
@@ -425,6 +425,7 @@ bool IndependentBlocks::translateScalarT
     U->replaceUsesOfWith(Inst, L);
   }
 
+  SE->forgetValue(Inst);
   return true;
 }
 

Added: polly/trunk/test/Isl/CodeGen/two-scops-in-row.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/CodeGen/two-scops-in-row.ll?rev=222103&view=auto
==============================================================================
--- polly/trunk/test/Isl/CodeGen/two-scops-in-row.ll (added)
+++ polly/trunk/test/Isl/CodeGen/two-scops-in-row.ll Sun Nov 16 14:33:58 2014
@@ -0,0 +1,41 @@
+; RUN: opt %loadPolly -polly-ast -analyze -polly-codegen-scev -polly-ignore-aliasing < %s | FileCheck %s 
+; RUN: opt %loadPolly -polly-codegen-isl -polly-codegen-scev -polly-ignore-aliasing < %s
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+; CHECK: if (1)
+; CHECK:     {
+; CHECK:       for (int c1 = 0; c1 <= -Scalar0.val.loadoutside + 99; c1 += 1)
+; CHECK:         Stmt_for_1(c1);
+; CHECK:       if (Scalar0.val.loadoutside >= 100)
+; CHECK:         Stmt_for_1(0);
+; CHECK:     }
+
+; CHECK: if (1)
+; CHECK:     Stmt_for_0(0);
+
+
+define void @foo(i32* %A) {
+entry:
+  %Scalar0 = alloca i32
+  br label %for.0
+
+for.0:
+  %Scalar0.val = load i32* %Scalar0
+  br i1 false, label %for.0, label %for.1.preheader
+
+for.1.preheader:
+  fence seq_cst
+  br label %for.1
+
+for.1:
+  %indvar.1 = phi i32 [ %Scalar0.val, %for.1.preheader ], [ %indvar.1.next, %for.1]
+  %arrayidx.1 = getelementptr inbounds i32* %A, i32 %indvar.1
+  store i32 1, i32* %arrayidx.1
+  %indvar.1.next = add nsw i32 %indvar.1, 1
+  %cmp.1 = icmp slt i32 %indvar.1.next, 100
+  br i1 %cmp.1, label %for.1, label %end
+
+end:
+  ret void
+}





More information about the llvm-commits mailing list