From fa632340938cc02e03262e1318cb06b34c32f5fe Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 13 Jan 2020 23:49:03 +0100 Subject: [PATCH] [InstCombine] Add test for iterator invalidation bug; NFC --- .../InstCombine/bitcast-phi-uselistorder.ll | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 llvm/test/Transforms/InstCombine/bitcast-phi-uselistorder.ll diff --git a/llvm/test/Transforms/InstCombine/bitcast-phi-uselistorder.ll b/llvm/test/Transforms/InstCombine/bitcast-phi-uselistorder.ll new file mode 100644 index 000000000000..d1af21f6c4d5 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/bitcast-phi-uselistorder.ll @@ -0,0 +1,36 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -S -instcombine < %s | FileCheck %s + +@Q = internal unnamed_addr global double 1.000000e+00, align 8 + +define double @test(i1 %c, i64* %p) { +; CHECK-LABEL: @test( +; CHECK-NEXT: entry: +; CHECK-NEXT: br i1 [[C:%.*]], label [[IF:%.*]], label [[END:%.*]] +; CHECK: if: +; CHECK-NEXT: [[LOAD:%.*]] = load i64, i64* bitcast (double* @Q to i64*), align 8 +; CHECK-NEXT: [[TMP0:%.*]] = bitcast i64 [[LOAD]] to double +; CHECK-NEXT: [[PHITMP:%.*]] = bitcast i64 [[LOAD]] to double +; CHECK-NEXT: br label [[END]] +; CHECK: end: +; CHECK-NEXT: [[TMP1:%.*]] = phi double [ 0.000000e+00, [[ENTRY:%.*]] ], [ [[TMP0]], [[IF]] ] +; CHECK-NEXT: [[PHI:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[PHITMP]], [[IF]] ] +; CHECK-NEXT: [[TMP2:%.*]] = bitcast i64* [[P:%.*]] to double* +; CHECK-NEXT: store double [[TMP1]], double* [[TMP2]], align 8 +; CHECK-NEXT: ret double [[PHI]] +; +entry: + br i1 %c, label %if, label %end + +if: + %load = load i64, i64* bitcast (double* @Q to i64*), align 8 + br label %end + +end: + %phi = phi i64 [ 0, %entry ], [ %load, %if ] + store i64 %phi, i64* %p, align 8 + %cast = bitcast i64 %phi to double + ret double %cast + + uselistorder i64 %phi, { 1, 0 } +}