diff options
Diffstat (limited to 'llvm/test/Transforms/NewGVN/pr32607.ll')
-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 +} + |