1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

[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 567fc5f75a
commit c87b0786bc

View File

@ -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