@@ -3332,3 +3332,93 @@ define i1 @icmp_eq_or_z_or_pow2orz_fail_bad_pred2(i8 %x, i8 %y) {
3332
3332
%r = or i1 %c0 , %cp2
3333
3333
ret i1 %r
3334
3334
}
3335
+
3336
+ define i1 @and_slt_to_mask (i8 %x ) {
3337
+ ; CHECK-LABEL: @and_slt_to_mask(
3338
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], -124
3339
+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X]], 2
3340
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[AND]], 0
3341
+ ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[CMP]], [[CMP2]]
3342
+ ; CHECK-NEXT: ret i1 [[AND2]]
3343
+ ;
3344
+ %cmp = icmp slt i8 %x , -124
3345
+ %and = and i8 %x , 2
3346
+ %cmp2 = icmp eq i8 %and , 0
3347
+ %and2 = and i1 %cmp , %cmp2
3348
+ ret i1 %and2
3349
+ }
3350
+
3351
+ define i1 @and_slt_to_mask_off_by_one (i8 %x ) {
3352
+ ; CHECK-LABEL: @and_slt_to_mask_off_by_one(
3353
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], -123
3354
+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X]], 2
3355
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[AND]], 0
3356
+ ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[CMP]], [[CMP2]]
3357
+ ; CHECK-NEXT: ret i1 [[AND2]]
3358
+ ;
3359
+ %cmp = icmp slt i8 %x , -123
3360
+ %and = and i8 %x , 2
3361
+ %cmp2 = icmp eq i8 %and , 0
3362
+ %and2 = and i1 %cmp , %cmp2
3363
+ ret i1 %and2
3364
+ }
3365
+
3366
+ define i1 @and_sgt_to_mask (i8 %x ) {
3367
+ ; CHECK-LABEL: @and_sgt_to_mask(
3368
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], 123
3369
+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X]], 2
3370
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[AND]], 0
3371
+ ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[CMP]], [[CMP2]]
3372
+ ; CHECK-NEXT: ret i1 [[AND2]]
3373
+ ;
3374
+ %cmp = icmp sgt i8 %x , 123
3375
+ %and = and i8 %x , 2
3376
+ %cmp2 = icmp eq i8 %and , 0
3377
+ %and2 = and i1 %cmp , %cmp2
3378
+ ret i1 %and2
3379
+ }
3380
+
3381
+ define i1 @and_sgt_to_mask_off_by_one (i8 %x ) {
3382
+ ; CHECK-LABEL: @and_sgt_to_mask_off_by_one(
3383
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], 124
3384
+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X]], 2
3385
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[AND]], 0
3386
+ ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[CMP]], [[CMP2]]
3387
+ ; CHECK-NEXT: ret i1 [[AND2]]
3388
+ ;
3389
+ %cmp = icmp sgt i8 %x , 124
3390
+ %and = and i8 %x , 2
3391
+ %cmp2 = icmp eq i8 %and , 0
3392
+ %and2 = and i1 %cmp , %cmp2
3393
+ ret i1 %and2
3394
+ }
3395
+
3396
+ define i1 @and_ugt_to_mask (i8 %x ) {
3397
+ ; CHECK-LABEL: @and_ugt_to_mask(
3398
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], -5
3399
+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X]], 2
3400
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[AND]], 0
3401
+ ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[CMP]], [[CMP2]]
3402
+ ; CHECK-NEXT: ret i1 [[AND2]]
3403
+ ;
3404
+ %cmp = icmp ugt i8 %x , -5
3405
+ %and = and i8 %x , 2
3406
+ %cmp2 = icmp eq i8 %and , 0
3407
+ %and2 = and i1 %cmp , %cmp2
3408
+ ret i1 %and2
3409
+ }
3410
+
3411
+ define i1 @and_ugt_to_mask_off_by_one (i8 %x ) {
3412
+ ; CHECK-LABEL: @and_ugt_to_mask_off_by_one(
3413
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], -6
3414
+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[X]], 2
3415
+ ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i8 [[AND]], 0
3416
+ ; CHECK-NEXT: [[AND2:%.*]] = and i1 [[CMP]], [[CMP2]]
3417
+ ; CHECK-NEXT: ret i1 [[AND2]]
3418
+ ;
3419
+ %cmp = icmp ugt i8 %x , -6
3420
+ %and = and i8 %x , 2
3421
+ %cmp2 = icmp eq i8 %and , 0
3422
+ %and2 = and i1 %cmp , %cmp2
3423
+ ret i1 %and2
3424
+ }
0 commit comments