[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