@@ -483,5 +483,57 @@ if.else:
483
483
ret i64 13
484
484
}
485
485
486
+ define i1 @test_icmp_or_distjoint (i8 %n , i1 %other ) {
487
+ ; CHECK-LABEL: @test_icmp_or_distjoint(
488
+ ; CHECK-NEXT: entry:
489
+ ; CHECK-NEXT: [[N_OR:%.*]] = or disjoint i8 [[N:%.*]], 16
490
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_OR]], -111
491
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
492
+ ; CHECK: if.then:
493
+ ; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[N]], 0
494
+ ; CHECK-NEXT: ret i1 [[R]]
495
+ ; CHECK: if.else:
496
+ ; CHECK-NEXT: ret i1 [[OTHER:%.*]]
497
+ ;
498
+ entry:
499
+ %n_or = or disjoint i8 %n , 16
500
+ %cmp = icmp ugt i8 %n_or , 145
501
+ br i1 %cmp , label %if.then , label %if.else
502
+
503
+ if.then:
504
+ %r = icmp slt i8 %n , 0
505
+ ret i1 %r
506
+
507
+ if.else:
508
+ ret i1 %other
509
+ }
510
+
511
+ define i1 @test_icmp_or_fail_missing_disjoint (i8 %n , i1 %other ) {
512
+ ; CHECK-LABEL: @test_icmp_or_fail_missing_disjoint(
513
+ ; CHECK-NEXT: entry:
514
+ ; CHECK-NEXT: [[N_OR:%.*]] = or i8 [[N:%.*]], 16
515
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_OR]], -111
516
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
517
+ ; CHECK: if.then:
518
+ ; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[N]], 0
519
+ ; CHECK-NEXT: ret i1 [[R]]
520
+ ; CHECK: if.else:
521
+ ; CHECK-NEXT: ret i1 [[OTHER:%.*]]
522
+ ;
523
+ entry:
524
+ %n_or = or i8 %n , 16
525
+ %cmp = icmp ugt i8 %n_or , 145
526
+ br i1 %cmp , label %if.then , label %if.else
527
+
528
+ if.then:
529
+ %r = icmp slt i8 %n , 0
530
+ ret i1 %r
531
+
532
+ if.else:
533
+ ret i1 %other
534
+ }
535
+
536
+
537
+
486
538
declare void @use (i1 )
487
539
declare void @sink (i8 )
0 commit comments