summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2017-04-14 02:53:37 +0000
committerDaniel Berlin <dberlin@dberlin.org>2017-04-14 02:53:37 +0000
commit2f72b19b05e86321b40c048ed7fdd0a9637d93d8 (patch)
treeaf035e94fac79c0434029d91d1ebcb5422a1a8cb /llvm/test/Transforms
parentaa68ca3d5f828202336837e9b1fbec6233b84849 (diff)
downloadbcm5719-llvm-2f72b19b05e86321b40c048ed7fdd0a9637d93d8.tar.gz
bcm5719-llvm-2f72b19b05e86321b40c048ed7fdd0a9637d93d8.zip
NewGVN: Don't propagate over phi backedges where undef causes us to
have >1 value, unless we can prove the phi node is cycle free. Fixes PR 32607. llvm-svn: 300299
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/NewGVN/pr32607.ll33
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/test/Transforms/NewGVN/pr32607.ll b/llvm/test/Transforms/NewGVN/pr32607.ll
new file mode 100644
index 00000000000..203ac75e2d0
--- /dev/null
+++ b/llvm/test/Transforms/NewGVN/pr32607.ll
@@ -0,0 +1,33 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -newgvn %s -S -o - | FileCheck %s
+define hidden void @foo() {
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: top:
+; CHECK-NEXT: br label [[IF:%.*]]
+; CHECK: if:
+; CHECK-NEXT: [[TMP0:%.*]] = phi double [ [[TMP1:%.*]], [[IF]] ], [ undef, [[TOP:%.*]] ]
+; CHECK-NEXT: [[TMP1]] = fadd double [[TMP0]], undef
+; CHECK-NEXT: br i1 false, label [[L50:%.*]], label [[IF]]
+; CHECK: L50:
+; CHECK-NEXT: store i8 undef, i8* null
+; CHECK-NEXT: ret void
+;
+top:
+ %.promoted = load double, double* undef, align 8
+ br label %if
+
+;; This is really a multi-valued phi, because the phi is defined by an expression of the phi.
+;; This means that we can't propagate the value over the backedge, because we'll just cycle
+;; through every value.
+
+if: ; preds = %if, %top
+ %0 = phi double [ %1, %if ], [ %.promoted, %top ]
+ %1 = fadd double %0, undef
+ br i1 false, label %L50, label %if
+
+L50: ; preds = %if
+ %.lcssa = phi double [ %1, %if ]
+ store double %.lcssa, double* undef, align 8
+ ret void
+}
+
OpenPOWER on IntegriCloud