[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.
This commit is contained in:
Max Kazantsev 2021-06-23 11:33:03 +07:00
parent b7d2c173eb
commit 976926e8ee
1 changed files with 20 additions and 20 deletions

View File

@ -655,7 +655,7 @@ failure:
unreachable unreachable
} }
define i32 @test_multiple_pred_2() { define i32 @test_multiple_pred_2(i1 %cond, i1 %cond2) {
; CHECK-LABEL: @test_multiple_pred_2( ; CHECK-LABEL: @test_multiple_pred_2(
; CHECK-NEXT: entry: ; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]] ; 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: [[IS_POSITIVE:%.*]] = icmp sgt i32 [[SUB]], 0
; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] ; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
; CHECK: if.true: ; 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: if.true.1:
; CHECK-NEXT: br label [[BACKEDGE:%.*]] ; CHECK-NEXT: br label [[BACKEDGE:%.*]]
; CHECK: if.true.2: ; CHECK: if.true.2:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false: ; 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: if.false.1:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false.2: ; CHECK: if.false.2:
@ -700,7 +700,7 @@ loop: ; preds = %backedge, %entry
br i1 %is.positive, label %if.true, label %if.false br i1 %is.positive, label %if.true, label %if.false
if.true: 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: if.true.1:
br label %backedge br label %backedge
@ -709,7 +709,7 @@ if.true.2:
br label %backedge br label %backedge
if.false: ; preds = %loop 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: if.false.1:
br label %backedge br label %backedge
@ -732,7 +732,7 @@ failure:
} }
; TODO: We can break the backedge here by assuming that undef = sub. ; 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-LABEL: @test_multiple_pred_undef_1(
; CHECK-NEXT: entry: ; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]] ; 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: [[IS_POSITIVE:%.*]] = icmp sgt i32 [[SUB]], 0
; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] ; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
; CHECK: if.true: ; 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: if.true.1:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.true.2: ; CHECK: if.true.2:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false: ; 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: if.false.1:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false.2: ; CHECK: if.false.2:
@ -774,7 +774,7 @@ loop: ; preds = %backedge, %entry
br i1 %is.positive, label %if.true, label %if.false br i1 %is.positive, label %if.true, label %if.false
if.true: 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: if.true.1:
br label %backedge br label %backedge
@ -783,7 +783,7 @@ if.true.2:
br label %backedge br label %backedge
if.false: ; preds = %loop 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: if.false.1:
br label %backedge br label %backedge
@ -806,7 +806,7 @@ failure:
} }
; TODO: We can break the backedge here by assuming that undef = sub. ; 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-LABEL: @test_multiple_pred_undef_2(
; CHECK-NEXT: entry: ; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]] ; 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: [[IS_POSITIVE:%.*]] = icmp sgt i32 [[SUB]], 0
; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] ; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
; CHECK: if.true: ; 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: if.true.1:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.true.2: ; CHECK: if.true.2:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false: ; 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: if.false.1:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false.2: ; CHECK: if.false.2:
@ -848,7 +848,7 @@ loop: ; preds = %backedge, %entry
br i1 %is.positive, label %if.true, label %if.false br i1 %is.positive, label %if.true, label %if.false
if.true: 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: if.true.1:
br label %backedge br label %backedge
@ -857,7 +857,7 @@ if.true.2:
br label %backedge br label %backedge
if.false: ; preds = %loop 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: if.false.1:
br label %backedge br label %backedge
@ -880,7 +880,7 @@ failure:
} }
; TODO: We can break the backedge here by exploiting undef. ; 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-LABEL: @test_multiple_pred_undef_3(
; CHECK-NEXT: entry: ; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[LOOP:%.*]] ; 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: [[IS_POSITIVE:%.*]] = icmp sgt i32 [[SUB]], 0
; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]] ; CHECK-NEXT: br i1 [[IS_POSITIVE]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
; CHECK: if.true: ; 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: if.true.1:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.true.2: ; CHECK: if.true.2:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false: ; 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: if.false.1:
; CHECK-NEXT: br label [[BACKEDGE]] ; CHECK-NEXT: br label [[BACKEDGE]]
; CHECK: if.false.2: ; CHECK: if.false.2:
@ -922,7 +922,7 @@ loop: ; preds = %backedge, %entry
br i1 %is.positive, label %if.true, label %if.false br i1 %is.positive, label %if.true, label %if.false
if.true: 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: if.true.1:
br label %backedge br label %backedge
@ -931,7 +931,7 @@ if.true.2:
br label %backedge br label %backedge
if.false: ; preds = %loop 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: if.false.1:
br label %backedge br label %backedge