[llvm-branch-commits] [polly] r183377 - independent blocks: when moving Values, invalidate SCEV cached info
Tobias Grosser
grosser at fim.uni-passau.de
Wed Jun 5 19:49:24 PDT 2013
Author: grosser
Date: Wed Jun 5 21:48:21 2013
New Revision: 183377
URL: http://llvm.org/viewvc/llvm-project?rev=183377&view=rev
Log:
independent blocks: when moving Values, invalidate SCEV cached info
Merged from: https://llvm.org/svn/llvm-project/polly/trunk@182310
Added:
polly/branches/release_33/test/IndependentBlocks/scev-invalidated.ll
Modified:
polly/branches/release_33/lib/IndependentBlocks.cpp
Modified: polly/branches/release_33/lib/IndependentBlocks.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/branches/release_33/lib/IndependentBlocks.cpp?rev=183377&r1=183376&r2=183377&view=diff
==============================================================================
--- polly/branches/release_33/lib/IndependentBlocks.cpp (original)
+++ polly/branches/release_33/lib/IndependentBlocks.cpp Wed Jun 5 21:48:21 2013
@@ -160,8 +160,10 @@ void IndependentBlocks::moveOperandTree(
DEBUG(dbgs() << "Checking Operand of Node:\n" << *CurInst << "\n------>\n");
if (It == CurInst->op_end()) {
// Insert the new instructions in topological order.
- if (!CurInst->getParent())
+ if (!CurInst->getParent()) {
CurInst->insertBefore(InsertPos);
+ SE->forgetValue(CurInst);
+ }
WorkStack.pop_back();
} else {
@@ -213,8 +215,7 @@ void IndependentBlocks::moveOperandTree(
DEBUG(dbgs() << "Moved.\n");
Instruction *MovedOp = At->second;
It->set(MovedOp);
- // Skip all its children as we already processed them.
- continue;
+ SE->forgetValue(MovedOp);
} else {
// Note that NewOp is not inserted in any BB now, we will insert it when
// it popped form the work stack, so it will be inserted in topological
@@ -224,6 +225,8 @@ void IndependentBlocks::moveOperandTree(
DEBUG(dbgs() << "Move to " << *NewOp << "\n");
It->set(NewOp);
ReplacedMap.insert(std::make_pair(Operand, NewOp));
+ SE->forgetValue(Operand);
+
// Process its operands, but do not visit an instuction twice.
if (VisitedSet.insert(NewOp).second)
WorkStack.push_back(std::make_pair(NewOp, NewOp->op_begin()));
Added: polly/branches/release_33/test/IndependentBlocks/scev-invalidated.ll
URL: http://llvm.org/viewvc/llvm-project/polly/branches/release_33/test/IndependentBlocks/scev-invalidated.ll?rev=183377&view=auto
==============================================================================
--- polly/branches/release_33/test/IndependentBlocks/scev-invalidated.ll (added)
+++ polly/branches/release_33/test/IndependentBlocks/scev-invalidated.ll Wed Jun 5 21:48:21 2013
@@ -0,0 +1,22 @@
+; RUN: opt %loadPolly -polly-codegen-scev -polly-independent < %s
+target datalayout ="e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @arc_either() {
+entry:
+ %ang2.2.reg2mem = alloca i64
+ br i1 undef, label %return, label %if.then6
+
+if.then6:
+ %rem7 = srem i64 undef, 1474560
+ br i1 false, label %if.else, label %return
+
+if.else:
+ %add16 = add nsw i64 %rem7, 1474560
+ %rem7.add16 = select i1 undef, i64 %rem7, i64 %add16
+ store i64 %rem7.add16, i64* %ang2.2.reg2mem
+ br label %return
+
+return:
+ ret void
+}
More information about the llvm-branch-commits
mailing list