[polly] r309454 - [Simplify] Do not remove dependencies of phis within region stmts.
Michael Kruse via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 28 16:22:32 PDT 2017
Author: meinersbur
Date: Fri Jul 28 16:22:32 2017
New Revision: 309454
URL: http://llvm.org/viewvc/llvm-project?rev=309454&view=rev
Log:
[Simplify] Do not remove dependencies of phis within region stmts.
These were wrongly assumed to be phi nodes that require
MemoryKind::PHI accesses.
Added:
polly/trunk/test/Simplify/notdead_region_innerphi.ll
Modified:
polly/trunk/lib/Support/VirtualInstruction.cpp
Modified: polly/trunk/lib/Support/VirtualInstruction.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Support/VirtualInstruction.cpp?rev=309454&r1=309453&r2=309454&view=diff
==============================================================================
--- polly/trunk/lib/Support/VirtualInstruction.cpp (original)
+++ polly/trunk/lib/Support/VirtualInstruction.cpp Fri Jul 28 16:22:32 2017
@@ -355,7 +355,8 @@ static void walkReachable(Scop *S, LoopI
continue;
// Add all operands to the worklists.
- if (PHINode *PHI = dyn_cast<PHINode>(Inst)) {
+ PHINode *PHI = dyn_cast<PHINode>(Inst);
+ if (PHI && PHI->getParent() == Stmt->getEntryBlock()) {
if (MemoryAccess *PHIRead = Stmt->lookupPHIReadOf(PHI))
WorklistAccs.push_back(PHIRead);
} else {
Added: polly/trunk/test/Simplify/notdead_region_innerphi.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Simplify/notdead_region_innerphi.ll?rev=309454&view=auto
==============================================================================
--- polly/trunk/test/Simplify/notdead_region_innerphi.ll (added)
+++ polly/trunk/test/Simplify/notdead_region_innerphi.ll Fri Jul 28 16:22:32 2017
@@ -0,0 +1,50 @@
+; RUN: opt %loadPolly -polly-simplify -analyze < %s | FileCheck %s -match-full-lines
+;
+; Do not remove dependencies of a phi node within a region statement (%phi).
+;
+define void @func(i32 %n, double* noalias nonnull %A, double %alpha) {
+entry:
+ br label %for
+
+for:
+ %j = phi i32 [0, %entry], [%j.inc, %inc]
+ %j.cmp = icmp slt i32 %j, %n
+ br i1 %j.cmp, label %body, label %exit
+
+ body:
+ %val = fadd double 21.0, 21.0
+ br label %region_entry
+
+
+ region_entry:
+ %region.cmp = fcmp ueq double %alpha, 0.0
+ br i1 %region.cmp, label %region_true, label %region_exit
+
+ region_true:
+ br i1 true, label %region_verytrue, label %region_mostlytrue
+
+ region_verytrue:
+ br label %region_mostlytrue
+
+ region_mostlytrue:
+ %phi = phi double [%val, %region_true], [0.0, %region_verytrue]
+ store double %phi, double* %A
+ br label %region_exit
+
+ region_exit:
+ br label %inc
+
+
+inc:
+ %j.inc = add nuw nsw i32 %j, 1
+ br label %for
+
+exit:
+ br label %return
+
+return:
+ ret void
+}
+
+
+; CHECK: SCoP could not be simplified
More information about the llvm-commits
mailing list