@@ -6,8 +6,7 @@ define i1 @test_second_and_condition_implied_by_first(i8 %x) {
6
6
; CHECK-NEXT: entry:
7
7
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
8
8
; 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:%.*]]
11
10
; CHECK: then:
12
11
; CHECK-NEXT: ret i1 false
13
12
; CHECK: else:
@@ -31,8 +30,7 @@ define i1 @test_first_and_condition_implied_by_second_ops(i8 %x) {
31
30
; CHECK-NEXT: entry:
32
31
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
33
32
; 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:%.*]]
36
34
; CHECK: then:
37
35
; CHECK-NEXT: ret i1 false
38
36
; CHECK: else:
@@ -56,8 +54,7 @@ define i1 @test_second_and_condition_implied_by_first_select_form(i8 %x) {
56
54
; CHECK-NEXT: entry:
57
55
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
58
56
; 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:%.*]]
61
58
; CHECK: then:
62
59
; CHECK-NEXT: ret i1 false
63
60
; CHECK: else:
@@ -105,8 +102,7 @@ define i1 @test_same_cond_for_and(i8 %x) {
105
102
; CHECK-LABEL: @test_same_cond_for_and(
106
103
; CHECK-NEXT: entry:
107
104
; 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:%.*]]
110
106
; CHECK: then:
111
107
; CHECK-NEXT: ret i1 false
112
108
; CHECK: else:
@@ -152,8 +148,7 @@ define i1 @test_second_and_condition_not_implied_by_first(i8 %x) {
152
148
; CHECK-NEXT: entry:
153
149
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
154
150
; 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:%.*]]
157
152
; CHECK: then:
158
153
; CHECK-NEXT: ret i1 false
159
154
; CHECK: else:
@@ -371,8 +366,7 @@ define i1 @test_and_used_in_false_branch(i8 %x) {
371
366
; CHECK-NEXT: entry:
372
367
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
373
368
; 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:%.*]]
376
370
; CHECK: then:
377
371
; CHECK-NEXT: ret i1 true
378
372
; CHECK: else:
@@ -397,8 +391,7 @@ define i1 @test_or_used_in_false_branch(i8 %x) {
397
391
; CHECK-NEXT: entry:
398
392
; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
399
393
; 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:%.*]]
402
395
; CHECK: then:
403
396
; CHECK-NEXT: ret i1 [[T_1]]
404
397
; CHECK: else:
@@ -423,8 +416,7 @@ define i1 @test_or_used_in_false_branch2(i8 %x) {
423
416
; CHECK-NEXT: entry:
424
417
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10
425
418
; 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:%.*]]
428
420
; CHECK: then:
429
421
; CHECK-NEXT: ret i1 [[T_1]]
430
422
; CHECK: else:
@@ -450,8 +442,7 @@ define i1 @and_select_first_implies_second_may_be_poison(ptr noundef %A, ptr nou
450
442
; CHECK-NEXT: [[C_1:%.*]] = icmp ne ptr [[A:%.*]], [[B:%.*]]
451
443
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds ptr, ptr [[B]], i64 -1
452
444
; 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]]
455
446
;
456
447
entry:
457
448
%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
504
495
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V1]], [[V2:%.*]]
505
496
; CHECK-NEXT: [[AND1:%.*]] = and i1 [[CMP0]], [[CMP1]]
506
497
; 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:%.*]]
509
499
; CHECK: if.then:
510
500
; CHECK-NEXT: call void @side_effect()
511
501
; CHECK-NEXT: br label [[RETURN]]
@@ -535,8 +525,7 @@ define void @and_tree_second_implies_first_perm1(i32 noundef %v0, i32 noundef %v
535
525
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V1]], [[V2:%.*]]
536
526
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[V0]], [[V2]]
537
527
; 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:%.*]]
540
529
; CHECK: if.then:
541
530
; CHECK-NEXT: call void @side_effect()
542
531
; CHECK-NEXT: br label [[RETURN]]
@@ -567,8 +556,7 @@ define void @and_tree_second_implies_first_perm2(i32 noundef %v0, i32 noundef %v
567
556
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V1]], [[V2:%.*]]
568
557
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[V0]], [[V2]]
569
558
; 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:%.*]]
572
560
; CHECK: if.then:
573
561
; CHECK-NEXT: call void @side_effect()
574
562
; CHECK-NEXT: br label [[RETURN]]
@@ -629,8 +617,7 @@ define void @or_tree_second_implies_first(i32 noundef %v0, i32 noundef %v1, i32
629
617
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[V1]], [[V2:%.*]]
630
618
; CHECK-NEXT: [[AND1:%.*]] = or i1 [[CMP0]], [[CMP1]]
631
619
; 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:%.*]]
634
621
; CHECK: if.then:
635
622
; CHECK-NEXT: call void @side_effect()
636
623
; CHECK-NEXT: br label [[RETURN]]
@@ -659,8 +646,7 @@ define void @or_tree_second_implies_first_with_unknown_cond(i64 %x, i1 %cond) {
659
646
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i64 [[X:%.*]], 1
660
647
; CHECK-NEXT: [[OR1:%.*]] = select i1 [[CMP1]], i1 [[COND:%.*]], i1 false
661
648
; 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:%.*]]
664
650
; CHECK: if.then:
665
651
; CHECK-NEXT: call void @side_effect()
666
652
; CHECK-NEXT: br label [[IF_END]]
0 commit comments