diff options
| author | Daniel Berlin <dberlin@dberlin.org> | 2017-04-14 02:53:37 +0000 |
|---|---|---|
| committer | Daniel Berlin <dberlin@dberlin.org> | 2017-04-14 02:53:37 +0000 |
| commit | 2f72b19b05e86321b40c048ed7fdd0a9637d93d8 (patch) | |
| tree | af035e94fac79c0434029d91d1ebcb5422a1a8cb /llvm/test/Transforms | |
| parent | aa68ca3d5f828202336837e9b1fbec6233b84849 (diff) | |
| download | bcm5719-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.ll | 33 |
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 +} + |

