@@ -403,3 +403,142 @@ truelabel:
403
403
falselabel:
404
404
ret i8 0
405
405
}
406
+
407
+ define i1 @and_mask1_eq (i32 %conv ) {
408
+ ; CHECK-LABEL: @and_mask1_eq(
409
+ ; CHECK-NEXT: entry:
410
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[CONV:%.*]], 1
411
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND]], 0
412
+ ; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
413
+ ; CHECK: then:
414
+ ; CHECK-NEXT: ret i1 false
415
+ ; CHECK: else:
416
+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[CONV]], 3
417
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[AND1]], 0
418
+ ; CHECK-NEXT: ret i1 [[CMP1]]
419
+ ;
420
+ entry:
421
+ %and = and i32 %conv , 1
422
+ %cmp = icmp eq i32 %and , 0
423
+ br i1 %cmp , label %then , label %else
424
+
425
+ then:
426
+ ret i1 0
427
+
428
+ else:
429
+ %and1 = and i32 %conv , 3
430
+ %cmp1 = icmp eq i32 %and1 , 0
431
+ ret i1 %cmp1
432
+ }
433
+
434
+ define i1 @and_mask1_ne (i32 %conv ) {
435
+ ; CHECK-LABEL: @and_mask1_ne(
436
+ ; CHECK-NEXT: entry:
437
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[CONV:%.*]], 1
438
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND]], 0
439
+ ; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
440
+ ; CHECK: then:
441
+ ; CHECK-NEXT: ret i1 false
442
+ ; CHECK: else:
443
+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[CONV]], 3
444
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[AND1]], 0
445
+ ; CHECK-NEXT: ret i1 [[CMP1]]
446
+ ;
447
+ entry:
448
+ %and = and i32 %conv , 1
449
+ %cmp = icmp eq i32 %and , 0
450
+ br i1 %cmp , label %then , label %else
451
+
452
+ then:
453
+ ret i1 0
454
+
455
+ else:
456
+ %and1 = and i32 %conv , 3
457
+ %cmp1 = icmp ne i32 %and1 , 0
458
+ ret i1 %cmp1
459
+ }
460
+
461
+ define i1 @and_mask2 (i32 %conv ) {
462
+ ; CHECK-LABEL: @and_mask2(
463
+ ; CHECK-NEXT: entry:
464
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[CONV:%.*]], 4
465
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND]], 0
466
+ ; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
467
+ ; CHECK: then:
468
+ ; CHECK-NEXT: ret i1 false
469
+ ; CHECK: else:
470
+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[CONV]], 3
471
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[AND1]], 0
472
+ ; CHECK-NEXT: ret i1 [[CMP1]]
473
+ ;
474
+ entry:
475
+ %and = and i32 %conv , 4
476
+ %cmp = icmp eq i32 %and , 0
477
+ br i1 %cmp , label %then , label %else
478
+
479
+ then:
480
+ ret i1 0
481
+
482
+ else:
483
+ %and1 = and i32 %conv , 3
484
+ %cmp1 = icmp eq i32 %and1 , 0
485
+ ret i1 %cmp1
486
+ }
487
+
488
+ ; TODO: %cmp1 can be folded into false.
489
+
490
+ define i1 @and_mask3 (i32 %conv ) {
491
+ ; CHECK-LABEL: @and_mask3(
492
+ ; CHECK-NEXT: entry:
493
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[CONV:%.*]], 3
494
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND]], 0
495
+ ; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
496
+ ; CHECK: then:
497
+ ; CHECK-NEXT: ret i1 false
498
+ ; CHECK: else:
499
+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[CONV]], 7
500
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[AND1]], 0
501
+ ; CHECK-NEXT: ret i1 [[CMP1]]
502
+ ;
503
+ entry:
504
+ %and = and i32 %conv , 3
505
+ %cmp = icmp eq i32 %and , 0
506
+ br i1 %cmp , label %then , label %else
507
+
508
+ then:
509
+ ret i1 0
510
+
511
+ else:
512
+ %and1 = and i32 %conv , 7
513
+ %cmp1 = icmp eq i32 %and1 , 0
514
+ ret i1 %cmp1
515
+ }
516
+
517
+ ; TODO: %cmp1 can be folded into false.
518
+
519
+ define i1 @and_mask4 (i32 %conv ) {
520
+ ; CHECK-LABEL: @and_mask4(
521
+ ; CHECK-NEXT: entry:
522
+ ; CHECK-NEXT: [[AND:%.*]] = and i32 [[CONV:%.*]], 4
523
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[AND]], 0
524
+ ; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
525
+ ; CHECK: then:
526
+ ; CHECK-NEXT: ret i1 false
527
+ ; CHECK: else:
528
+ ; CHECK-NEXT: [[AND1:%.*]] = and i32 [[CONV]], 7
529
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[AND1]], 0
530
+ ; CHECK-NEXT: ret i1 [[CMP1]]
531
+ ;
532
+ entry:
533
+ %and = and i32 %conv , 4
534
+ %cmp = icmp eq i32 %and , 0
535
+ br i1 %cmp , label %then , label %else
536
+
537
+ then:
538
+ ret i1 0
539
+
540
+ else:
541
+ %and1 = and i32 %conv , 7
542
+ %cmp1 = icmp eq i32 %and1 , 0
543
+ ret i1 %cmp1
544
+ }
0 commit comments