From 976926e8ee3e3c9f7c391281eab89e0d1b02092a Mon Sep 17 00:00:00 2001 From: Max Kazantsev Date: Wed, 23 Jun 2021 11:33:03 +0700 Subject: [PATCH] [Test] Clear out br i1 undef from tests to avoid UB We don't want to test possible unexpected impact of such branches. Replacing them with regular conditions. Idea by Nikita Popov. --- .../LoopDeletion/eval_first_iteration.ll | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/llvm/test/Transforms/LoopDeletion/eval_first_iteration.ll b/llvm/test/Transforms/LoopDeletion/eval_first_iteration.ll index 15ebd7d..be13d02 100644 --- a/llvm/test/Transforms/LoopDeletion/eval_first_iteration.ll +++ b/llvm/test/Transforms/LoopDeletion/eval_first_iteration.ll @@ -655,7 +655,7 @@ failure: unreachable } -define i32 @test_multiple_pred_2() { +define i32 @test_multiple_pred_2(i1 %cond, i1 %cond2) { ; CHECK-LABEL: @test_multiple_pred_2( ; CHECK-NEXT: entry: ; CHECK-NEXT: br label [[LOOP:%.*]] @@ -665,13 +665,13 @@ define i32 @test_multiple_pred_2() { ; CHECK-NEXT: [[IS_POSITIVE:%.*]] = icmp sgt i32 [[SUB]], 0 ; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] ; CHECK: if.true: -; CHECK-NEXT: br i1 undef, label [[IF_TRUE_1:%.*]], label [[IF_TRUE_2:%.*]] +; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE_1:%.*]], label [[IF_TRUE_2:%.*]] ; CHECK: if.true.1: ; CHECK-NEXT: br label [[BACKEDGE:%.*]] ; CHECK: if.true.2: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.false: -; CHECK-NEXT: br i1 undef, label [[IF_FALSE_1:%.*]], label [[IF_FALSE_2:%.*]] +; CHECK-NEXT: br i1 [[COND2:%.*]], label [[IF_FALSE_1:%.*]], label [[IF_FALSE_2:%.*]] ; CHECK: if.false.1: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.false.2: @@ -700,7 +700,7 @@ loop: ; preds = %backedge, %entry br i1 %is.positive, label %if.true, label %if.false if.true: - br i1 undef, label %if.true.1, label %if.true.2 + br i1 %cond, label %if.true.1, label %if.true.2 if.true.1: br label %backedge @@ -709,7 +709,7 @@ if.true.2: br label %backedge if.false: ; preds = %loop - br i1 undef, label %if.false.1, label %if.false.2 + br i1 %cond2, label %if.false.1, label %if.false.2 if.false.1: br label %backedge @@ -732,7 +732,7 @@ failure: } ; TODO: We can break the backedge here by assuming that undef = sub. -define i32 @test_multiple_pred_undef_1() { +define i32 @test_multiple_pred_undef_1(i1 %cond, i1 %cond2) { ; CHECK-LABEL: @test_multiple_pred_undef_1( ; CHECK-NEXT: entry: ; CHECK-NEXT: br label [[LOOP:%.*]] @@ -742,13 +742,13 @@ define i32 @test_multiple_pred_undef_1() { ; CHECK-NEXT: [[IS_POSITIVE:%.*]] = icmp sgt i32 [[SUB]], 0 ; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] ; CHECK: if.true: -; CHECK-NEXT: br i1 undef, label [[IF_TRUE_1:%.*]], label [[IF_TRUE_2:%.*]] +; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE_1:%.*]], label [[IF_TRUE_2:%.*]] ; CHECK: if.true.1: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.true.2: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.false: -; CHECK-NEXT: br i1 undef, label [[IF_FALSE_1:%.*]], label [[IF_FALSE_2:%.*]] +; CHECK-NEXT: br i1 [[COND2:%.*]], label [[IF_FALSE_1:%.*]], label [[IF_FALSE_2:%.*]] ; CHECK: if.false.1: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.false.2: @@ -774,7 +774,7 @@ loop: ; preds = %backedge, %entry br i1 %is.positive, label %if.true, label %if.false if.true: - br i1 undef, label %if.true.1, label %if.true.2 + br i1 %cond, label %if.true.1, label %if.true.2 if.true.1: br label %backedge @@ -783,7 +783,7 @@ if.true.2: br label %backedge if.false: ; preds = %loop - br i1 undef, label %if.false.1, label %if.false.2 + br i1 %cond2, label %if.false.1, label %if.false.2 if.false.1: br label %backedge @@ -806,7 +806,7 @@ failure: } ; TODO: We can break the backedge here by assuming that undef = sub. -define i32 @test_multiple_pred_undef_2() { +define i32 @test_multiple_pred_undef_2(i1 %cond, i1 %cond2) { ; CHECK-LABEL: @test_multiple_pred_undef_2( ; CHECK-NEXT: entry: ; CHECK-NEXT: br label [[LOOP:%.*]] @@ -816,13 +816,13 @@ define i32 @test_multiple_pred_undef_2() { ; CHECK-NEXT: [[IS_POSITIVE:%.*]] = icmp sgt i32 [[SUB]], 0 ; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] ; CHECK: if.true: -; CHECK-NEXT: br i1 undef, label [[IF_TRUE_1:%.*]], label [[IF_TRUE_2:%.*]] +; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE_1:%.*]], label [[IF_TRUE_2:%.*]] ; CHECK: if.true.1: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.true.2: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.false: -; CHECK-NEXT: br i1 undef, label [[IF_FALSE_1:%.*]], label [[IF_FALSE_2:%.*]] +; CHECK-NEXT: br i1 [[COND2:%.*]], label [[IF_FALSE_1:%.*]], label [[IF_FALSE_2:%.*]] ; CHECK: if.false.1: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.false.2: @@ -848,7 +848,7 @@ loop: ; preds = %backedge, %entry br i1 %is.positive, label %if.true, label %if.false if.true: - br i1 undef, label %if.true.1, label %if.true.2 + br i1 %cond, label %if.true.1, label %if.true.2 if.true.1: br label %backedge @@ -857,7 +857,7 @@ if.true.2: br label %backedge if.false: ; preds = %loop - br i1 undef, label %if.false.1, label %if.false.2 + br i1 %cond2, label %if.false.1, label %if.false.2 if.false.1: br label %backedge @@ -880,7 +880,7 @@ failure: } ; TODO: We can break the backedge here by exploiting undef. -define i32 @test_multiple_pred_undef_3() { +define i32 @test_multiple_pred_undef_3(i1 %cond, i1 %cond2) { ; CHECK-LABEL: @test_multiple_pred_undef_3( ; CHECK-NEXT: entry: ; CHECK-NEXT: br label [[LOOP:%.*]] @@ -890,13 +890,13 @@ define i32 @test_multiple_pred_undef_3() { ; CHECK-NEXT: [[IS_POSITIVE:%.*]] = icmp sgt i32 [[SUB]], 0 ; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] ; CHECK: if.true: -; CHECK-NEXT: br i1 undef, label [[IF_TRUE_1:%.*]], label [[IF_TRUE_2:%.*]] +; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE_1:%.*]], label [[IF_TRUE_2:%.*]] ; CHECK: if.true.1: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.true.2: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.false: -; CHECK-NEXT: br i1 undef, label [[IF_FALSE_1:%.*]], label [[IF_FALSE_2:%.*]] +; CHECK-NEXT: br i1 [[COND2:%.*]], label [[IF_FALSE_1:%.*]], label [[IF_FALSE_2:%.*]] ; CHECK: if.false.1: ; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK: if.false.2: @@ -922,7 +922,7 @@ loop: ; preds = %backedge, %entry br i1 %is.positive, label %if.true, label %if.false if.true: - br i1 undef, label %if.true.1, label %if.true.2 + br i1 %cond, label %if.true.1, label %if.true.2 if.true.1: br label %backedge @@ -931,7 +931,7 @@ if.true.2: br label %backedge if.false: ; preds = %loop - br i1 undef, label %if.false.1, label %if.false.2 + br i1 %cond2, label %if.false.1, label %if.false.2 if.false.1: br label %backedge -- 2.7.4