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:%.*]]
; 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:
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
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
}
; 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:%.*]]
; 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:
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
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
}
; 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:%.*]]
; 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:
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
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
}
; 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:%.*]]
; 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:
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
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