@@ -6,8 +6,7 @@ define i1 @test_second_and_condition_implied_by_first(i8 %x) {
66; CHECK-NEXT: entry:
77; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
88; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[X]], 5
9- ; CHECK-NEXT: [[AND:%.*]] = and i1 [[C_1]], true
10- ; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
9+ ; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
1110; CHECK: then:
1211; CHECK-NEXT: ret i1 false
1312; CHECK: else:
@@ -31,8 +30,7 @@ define i1 @test_first_and_condition_implied_by_second_ops(i8 %x) {
3130; CHECK-NEXT: entry:
3231; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
3332; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[X]], 5
34- ; CHECK-NEXT: [[AND:%.*]] = and i1 true, [[C_1]]
35- ; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
33+ ; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
3634; CHECK: then:
3735; CHECK-NEXT: ret i1 false
3836; CHECK: else:
@@ -56,8 +54,7 @@ define i1 @test_second_and_condition_implied_by_first_select_form(i8 %x) {
5654; CHECK-NEXT: entry:
5755; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
5856; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[X]], 5
59- ; CHECK-NEXT: [[AND:%.*]] = select i1 [[C_1]], i1 true, i1 false
60- ; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
57+ ; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
6158; CHECK: then:
6259; CHECK-NEXT: ret i1 false
6360; CHECK: else:
@@ -105,8 +102,7 @@ define i1 @test_same_cond_for_and(i8 %x) {
105102; CHECK-LABEL: @test_same_cond_for_and(
106103; CHECK-NEXT: entry:
107104; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
108- ; CHECK-NEXT: [[AND:%.*]] = and i1 true, [[C_1]]
109- ; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
105+ ; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
110106; CHECK: then:
111107; CHECK-NEXT: ret i1 false
112108; CHECK: else:
@@ -152,8 +148,7 @@ define i1 @test_second_and_condition_not_implied_by_first(i8 %x) {
152148; CHECK-NEXT: entry:
153149; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
154150; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[X]], 5
155- ; CHECK-NEXT: [[AND:%.*]] = and i1 true, [[C_1]]
156- ; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
151+ ; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
157152; CHECK: then:
158153; CHECK-NEXT: ret i1 false
159154; CHECK: else:
@@ -371,8 +366,7 @@ define i1 @test_and_used_in_false_branch(i8 %x) {
371366; CHECK-NEXT: entry:
372367; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
373368; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[X]], 5
374- ; CHECK-NEXT: [[AND:%.*]] = and i1 [[C_1]], true
375- ; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
369+ ; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
376370; CHECK: then:
377371; CHECK-NEXT: ret i1 true
378372; CHECK: else:
@@ -397,8 +391,7 @@ define i1 @test_or_used_in_false_branch(i8 %x) {
397391; CHECK-NEXT: entry:
398392; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
399393; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[X]], 5
400- ; CHECK-NEXT: [[AND:%.*]] = or i1 [[C_1]], false
401- ; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
394+ ; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
402395; CHECK: then:
403396; CHECK-NEXT: ret i1 [[T_1]]
404397; CHECK: else:
@@ -423,8 +416,7 @@ define i1 @test_or_used_in_false_branch2(i8 %x) {
423416; CHECK-NEXT: entry:
424417; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
425418; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[X]], 5
426- ; CHECK-NEXT: [[AND:%.*]] = or i1 false, [[T_1]]
427- ; CHECK-NEXT: br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]
419+ ; CHECK-NEXT: br i1 [[T_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
428420; CHECK: then:
429421; CHECK-NEXT: ret i1 [[T_1]]
430422; CHECK: else:
@@ -450,8 +442,7 @@ define i1 @and_select_first_implies_second_may_be_poison(ptr noundef %A, ptr nou
450442; CHECK-NEXT: [[C_1:%.*]] = icmp ne ptr [[A:%.*]], [[B:%.*]]
451443; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds ptr, ptr [[B]], i64 -1
452444; CHECK-NEXT: [[C_2:%.*]] = icmp ugt ptr [[GEP]], [[A]]
453- ; CHECK-NEXT: [[AND:%.*]] = select i1 [[C_2]], i1 true, i1 false
454- ; CHECK-NEXT: ret i1 [[AND]]
445+ ; CHECK-NEXT: ret i1 [[C_2]]
455446;
456447entry:
457448 %c.1 = icmp ne ptr %A , %B
@@ -504,8 +495,7 @@ define void @and_tree_second_implies_first(i32 noundef %v0, i32 noundef %v1, i32
504495; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V1]], [[V2:%.*]]
505496; CHECK-NEXT: [[AND1:%.*]] = and i1 [[CMP0]], [[CMP1]]
506497; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[V0]], [[V2]]
507- ; CHECK-NEXT: [[AND2:%.*]] = and i1 false, [[AND1]]
508- ; CHECK-NEXT: br i1 [[AND2]], label [[IF_THEN:%.*]], label [[RETURN:%.*]]
498+ ; CHECK-NEXT: br i1 false, label [[IF_THEN:%.*]], label [[RETURN:%.*]]
509499; CHECK: if.then:
510500; CHECK-NEXT: call void @side_effect()
511501; CHECK-NEXT: br label [[RETURN]]
@@ -535,8 +525,7 @@ define void @and_tree_second_implies_first_perm1(i32 noundef %v0, i32 noundef %v
535525; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V1]], [[V2:%.*]]
536526; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[V0]], [[V2]]
537527; CHECK-NEXT: [[AND1:%.*]] = and i1 [[CMP2]], [[CMP1]]
538- ; CHECK-NEXT: [[AND2:%.*]] = and i1 false, [[AND1]]
539- ; CHECK-NEXT: br i1 [[AND2]], label [[IF_THEN:%.*]], label [[RETURN:%.*]]
528+ ; CHECK-NEXT: br i1 false, label [[IF_THEN:%.*]], label [[RETURN:%.*]]
540529; CHECK: if.then:
541530; CHECK-NEXT: call void @side_effect()
542531; CHECK-NEXT: br label [[RETURN]]
@@ -567,8 +556,7 @@ define void @and_tree_second_implies_first_perm2(i32 noundef %v0, i32 noundef %v
567556; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V1]], [[V2:%.*]]
568557; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[V0]], [[V2]]
569558; CHECK-NEXT: [[AND1:%.*]] = and i1 [[CMP0]], [[CMP2]]
570- ; CHECK-NEXT: [[AND2:%.*]] = and i1 false, [[AND1]]
571- ; CHECK-NEXT: br i1 [[AND2]], label [[IF_THEN:%.*]], label [[RETURN:%.*]]
559+ ; CHECK-NEXT: br i1 false, label [[IF_THEN:%.*]], label [[RETURN:%.*]]
572560; CHECK: if.then:
573561; CHECK-NEXT: call void @side_effect()
574562; CHECK-NEXT: br label [[RETURN]]
@@ -629,8 +617,7 @@ define void @or_tree_second_implies_first(i32 noundef %v0, i32 noundef %v1, i32
629617; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V1]], [[V2:%.*]]
630618; CHECK-NEXT: [[AND1:%.*]] = or i1 [[CMP0]], [[CMP1]]
631619; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[V0]], [[V2]]
632- ; CHECK-NEXT: [[AND2:%.*]] = or i1 true, [[AND1]]
633- ; CHECK-NEXT: br i1 [[AND2]], label [[IF_THEN:%.*]], label [[RETURN:%.*]]
620+ ; CHECK-NEXT: br i1 true, label [[IF_THEN:%.*]], label [[RETURN:%.*]]
634621; CHECK: if.then:
635622; CHECK-NEXT: call void @side_effect()
636623; CHECK-NEXT: br label [[RETURN]]
@@ -659,8 +646,7 @@ define void @or_tree_second_implies_first_with_unknown_cond(i64 %x, i1 %cond) {
659646; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i64 [[X:%.*]], 1
660647; CHECK-NEXT: [[OR1:%.*]] = select i1 [[CMP1]], i1 [[COND:%.*]], i1 false
661648; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i64 [[X]], 2
662- ; CHECK-NEXT: [[OR2:%.*]] = select i1 [[OR1]], i1 false, i1 false
663- ; CHECK-NEXT: br i1 [[OR2]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
649+ ; CHECK-NEXT: br i1 false, label [[IF_THEN:%.*]], label [[IF_END:%.*]]
664650; CHECK: if.then:
665651; CHECK-NEXT: call void @side_effect()
666652; CHECK-NEXT: br label [[IF_END]]
0 commit comments