Skip to content

Commit eb3361d

Browse files
committed
[InstCombine] Add additional mask merging tests (NFC)
1 parent b468119 commit eb3361d

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

llvm/test/Transforms/InstCombine/and-or-icmps.ll

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3332,3 +3332,93 @@ define i1 @icmp_eq_or_z_or_pow2orz_fail_bad_pred2(i8 %x, i8 %y) {
33323332
%r = or i1 %c0, %cp2
33333333
ret i1 %r
33343334
}
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

Comments
 (0)