From 291924a6f9b921040c73ea10ff0c1da59f884e82 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 17 Oct 2022 15:36:28 +0200 Subject: [PATCH] [InstCombine] Add test for PR58401 (NFC) --- llvm/test/Transforms/InstCombine/phi.ll | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/llvm/test/Transforms/InstCombine/phi.ll b/llvm/test/Transforms/InstCombine/phi.ll index eae609f..f8c834e 100644 --- a/llvm/test/Transforms/InstCombine/phi.ll +++ b/llvm/test/Transforms/InstCombine/phi.ll @@ -1317,6 +1317,7 @@ exit: } declare void @use(i32) +declare i1 @get.i1() define i32 @phi_op_self_simplify() { ; CHECK-LABEL: @phi_op_self_simplify( @@ -1340,6 +1341,38 @@ loop: br label %loop } +define i32 @phi_op_self_simplify_2(i32 %x) { +; CHECK-LABEL: @phi_op_self_simplify_2( +; CHECK-NEXT: entry: +; CHECK-NEXT: br label [[LOOP:%.*]] +; CHECK: loop: +; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ [[X:%.*]], [[ENTRY:%.*]] ], [ [[OR:%.*]], [[LOOP]] ], [ 10, [[LOOP_LATCH:%.*]] ] +; CHECK-NEXT: [[OR]] = or i32 [[PHI]], 1 +; CHECK-NEXT: [[C1:%.*]] = call i1 @get.i1() +; CHECK-NEXT: br i1 [[C1]], label [[LOOP_LATCH]], label [[LOOP]] +; CHECK: loop.latch: +; CHECK-NEXT: [[C2:%.*]] = call i1 @get.i1() +; CHECK-NEXT: br i1 [[C2]], label [[EXIT:%.*]], label [[LOOP]] +; CHECK: exit: +; CHECK-NEXT: ret i32 [[OR]] +; +entry: + br label %loop + +loop: + %phi = phi i32 [ %x, %entry ], [ %or, %loop ], [ 10, %loop.latch ] + %or = or i32 %phi, 1 + %c1 = call i1 @get.i1() + br i1 %c1, label %loop.latch, label %loop + +loop.latch: + %c2 = call i1 @get.i1() + br i1 %c2, label %exit, label %loop + +exit: + ret i32 %or +} + ; Caused an infinite loop with D134954. define i64 @inttoptr_of_phi(i1 %c, ptr %arg.ptr, ptr %arg.ptr2) { ; CHECK-LABEL: @inttoptr_of_phi( -- 2.7.4