[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