From 8184b563a42dafad2dc589914456028bd228429a Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 25 Jan 2023 10:46:43 +0100 Subject: [PATCH] [InstCombine] Add additional tests for dead phi cycles (NFC) --- llvm/test/Transforms/InstCombine/phi.ll | 63 +++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 7 deletions(-) diff --git a/llvm/test/Transforms/InstCombine/phi.ll b/llvm/test/Transforms/InstCombine/phi.ll index 521bb4a..bd0e649 100644 --- a/llvm/test/Transforms/InstCombine/phi.ll +++ b/llvm/test/Transforms/InstCombine/phi.ll @@ -133,12 +133,12 @@ BB2: ret i32 %B } -define i32 @test7(i32 %A, i1 %b) { -; CHECK-LABEL: @test7( +define i32 @test_dead_cycle(i32 %A, i1 %cond) { +; CHECK-LABEL: @test_dead_cycle( ; CHECK-NEXT: BB0: ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: Loop: -; CHECK-NEXT: br i1 [[B:%.*]], label [[LOOP]], label [[EXIT:%.*]] +; CHECK-NEXT: br i1 [[COND:%.*]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: Exit: ; CHECK-NEXT: ret i32 0 ; @@ -146,10 +146,59 @@ BB0: br label %Loop Loop: ; preds = %Loop, %BB0 - ; PHI is dead. %B = phi i32 [ %A, %BB0 ], [ %C, %Loop ] %C = add i32 %B, 123 - br i1 %b, label %Loop, label %Exit + br i1 %cond, label %Loop, label %Exit + +Exit: ; preds = %Loop + ret i32 0 +} + +define i32 @test_dead_cycle_two_insts(i32 %A, i1 %cond) { +; CHECK-LABEL: @test_dead_cycle_two_insts( +; CHECK-NEXT: BB0: +; CHECK-NEXT: br label [[LOOP:%.*]] +; CHECK: Loop: +; CHECK-NEXT: [[B:%.*]] = phi i32 [ [[A:%.*]], [[BB0:%.*]] ], [ [[D:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[C:%.*]] = add i32 [[B]], 123 +; CHECK-NEXT: [[D]] = lshr i32 [[C]], 1 +; CHECK-NEXT: br i1 [[COND:%.*]], label [[LOOP]], label [[EXIT:%.*]] +; CHECK: Exit: +; CHECK-NEXT: ret i32 0 +; +BB0: + br label %Loop + +Loop: ; preds = %Loop, %BB0 + %B = phi i32 [ %A, %BB0 ], [ %D, %Loop ] + %C = add i32 %B, 123 + %D = lshr i32 %C, 1 + br i1 %cond, label %Loop, label %Exit + +Exit: ; preds = %Loop + ret i32 0 +} + +declare i32 @llvm.uadd.sat.i32(i32, i32) + +define i32 @test_dead_cycle_intrin(i32 %A, i1 %cond) { +; CHECK-LABEL: @test_dead_cycle_intrin( +; CHECK-NEXT: BB0: +; CHECK-NEXT: br label [[LOOP:%.*]] +; CHECK: Loop: +; CHECK-NEXT: [[B:%.*]] = phi i32 [ [[A:%.*]], [[BB0:%.*]] ], [ [[C:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[C]] = call i32 @llvm.uadd.sat.i32(i32 [[B]], i32 123) +; CHECK-NEXT: br i1 [[COND:%.*]], label [[LOOP]], label [[EXIT:%.*]] +; CHECK: Exit: +; CHECK-NEXT: ret i32 0 +; +BB0: + br label %Loop + +Loop: ; preds = %Loop, %BB0 + %B = phi i32 [ %A, %BB0 ], [ %C, %Loop ] + %C = call i32 @llvm.uadd.sat.i32(i32 %B, i32 123) + br i1 %cond, label %Loop, label %Exit Exit: ; preds = %Loop ret i32 0 @@ -330,8 +379,8 @@ define void @test13(i1 %cond, i32 %V1, double %Vald) { ; CHECK: two: ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[TMP0:%.*]] = phi double [ 0.000000e+00, [[ENTRY:%.*]] ], [ [[VALD:%.*]], [[TWO]] ] -; CHECK-NEXT: call void @test13f(double [[TMP0]], i32 [[V1:%.*]]) +; CHECK-NEXT: [[T31:%.*]] = phi double [ 0.000000e+00, [[ENTRY:%.*]] ], [ [[VALD:%.*]], [[TWO]] ] +; CHECK-NEXT: call void @test13f(double [[T31]], i32 [[V1:%.*]]) ; CHECK-NEXT: ret void ; entry: -- 2.7.4