Skip to content

Commit 2eb72fa

Browse files
floatshadownikic
authored andcommitted
[InstSimplify] Test case for D149001 (NFC)
Differential Revision: https://reviews.llvm.org/D149012
1 parent 039c356 commit 2eb72fa

File tree

1 file changed

+158
-0
lines changed
  • llvm/test/Transforms/InstSimplify

1 file changed

+158
-0
lines changed

llvm/test/Transforms/InstSimplify/div.ll

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,3 +434,161 @@ define <2 x i8> @udiv_exact_trailing_zeros_nonuniform_vector(<2 x i8> %x) {
434434
}
435435

436436
!0 = !{i32 0, i32 3}
437+
438+
define i32 @sdiv_one_srem_divisor(i32 %a, i32 %b) {
439+
; CHECK-LABEL: @sdiv_one_srem_divisor(
440+
; CHECK-NEXT: [[SREM:%.*]] = srem i32 1, [[B:%.*]]
441+
; CHECK-NEXT: [[SDIV:%.*]] = sdiv i32 [[A:%.*]], [[SREM]]
442+
; CHECK-NEXT: ret i32 [[SDIV]]
443+
;
444+
%srem = srem i32 1, %b
445+
%sdiv = sdiv i32 %a, %srem
446+
ret i32 %sdiv
447+
}
448+
449+
define i32 @sdiv_one_urem_divisor(i32 %a, i32 %b) {
450+
; CHECK-LABEL: @sdiv_one_urem_divisor(
451+
; CHECK-NEXT: [[UREM:%.*]] = urem i32 1, [[B:%.*]]
452+
; CHECK-NEXT: [[SDIV:%.*]] = sdiv i32 [[A:%.*]], [[UREM]]
453+
; CHECK-NEXT: ret i32 [[SDIV]]
454+
;
455+
%urem = urem i32 1, %b
456+
%sdiv = sdiv i32 %a, %urem
457+
ret i32 %sdiv
458+
}
459+
460+
define i32 @udiv_one_srem_divisor(i32 %a, i32 %b) {
461+
; CHECK-LABEL: @udiv_one_srem_divisor(
462+
; CHECK-NEXT: [[SREM:%.*]] = srem i32 1, [[B:%.*]]
463+
; CHECK-NEXT: [[UDIV:%.*]] = udiv i32 [[A:%.*]], [[SREM]]
464+
; CHECK-NEXT: ret i32 [[UDIV]]
465+
;
466+
%srem = srem i32 1, %b
467+
%udiv = udiv i32 %a, %srem
468+
ret i32 %udiv
469+
}
470+
471+
define i32 @udiv_one_urem_divisor(i32 %a, i32 %b) {
472+
; CHECK-LABEL: @udiv_one_urem_divisor(
473+
; CHECK-NEXT: [[UREM:%.*]] = urem i32 1, [[B:%.*]]
474+
; CHECK-NEXT: [[UDIV:%.*]] = udiv i32 [[A:%.*]], [[UREM]]
475+
; CHECK-NEXT: ret i32 [[UDIV]]
476+
;
477+
%urem = urem i32 1, %b
478+
%udiv = udiv i32 %a, %urem
479+
ret i32 %udiv
480+
}
481+
482+
define i32 @srem_one_srem_divisor(i32 %a, i32 %b) {
483+
; CHECK-LABEL: @srem_one_srem_divisor(
484+
; CHECK-NEXT: [[SREM:%.*]] = srem i32 1, [[B:%.*]]
485+
; CHECK-NEXT: [[SREM1:%.*]] = srem i32 [[A:%.*]], [[SREM]]
486+
; CHECK-NEXT: ret i32 [[SREM1]]
487+
;
488+
%srem = srem i32 1, %b
489+
%srem1 = srem i32 %a, %srem
490+
ret i32 %srem1
491+
}
492+
493+
define i32 @urem_one_srem_divisor(i32 %a, i32 %b) {
494+
; CHECK-LABEL: @urem_one_srem_divisor(
495+
; CHECK-NEXT: [[SREM:%.*]] = srem i32 1, [[B:%.*]]
496+
; CHECK-NEXT: [[UREM:%.*]] = urem i32 [[A:%.*]], [[SREM]]
497+
; CHECK-NEXT: ret i32 [[UREM]]
498+
;
499+
%srem = srem i32 1, %b
500+
%urem = urem i32 %a, %srem
501+
ret i32 %urem
502+
}
503+
504+
define i32 @srem_one_urem_divisor(i32 %a, i32 %b) {
505+
; CHECK-LABEL: @srem_one_urem_divisor(
506+
; CHECK-NEXT: [[UREM:%.*]] = urem i32 1, [[B:%.*]]
507+
; CHECK-NEXT: [[SREM:%.*]] = srem i32 [[A:%.*]], [[UREM]]
508+
; CHECK-NEXT: ret i32 [[SREM]]
509+
;
510+
%urem = urem i32 1, %b
511+
%srem = srem i32 %a, %urem
512+
ret i32 %srem
513+
}
514+
515+
define i32 @urem_one_urem_divisor(i32 %a, i32 %b) {
516+
; CHECK-LABEL: @urem_one_urem_divisor(
517+
; CHECK-NEXT: [[UREM:%.*]] = urem i32 1, [[B:%.*]]
518+
; CHECK-NEXT: [[UREM1:%.*]] = urem i32 [[A:%.*]], [[UREM]]
519+
; CHECK-NEXT: ret i32 [[UREM1]]
520+
;
521+
%urem = urem i32 1, %b
522+
%urem1 = urem i32 %a, %urem
523+
ret i32 %urem1
524+
}
525+
526+
define <2 x i8> @sdiv_one_vec_srem_divisor(<2 x i8> %a, <2 x i8> %b) {
527+
; CHECK-LABEL: @sdiv_one_vec_srem_divisor(
528+
; CHECK-NEXT: [[SREM:%.*]] = srem <2 x i8> <i8 1, i8 1>, [[B:%.*]]
529+
; CHECK-NEXT: [[SDIV:%.*]] = sdiv <2 x i8> [[A:%.*]], [[SREM]]
530+
; CHECK-NEXT: ret <2 x i8> [[SDIV]]
531+
;
532+
%srem = srem <2 x i8> <i8 1, i8 1>, %b
533+
%sdiv = sdiv <2 x i8> %a, %srem
534+
ret <2 x i8> %sdiv
535+
}
536+
537+
define i32 @sdiv_and_one_divisor(i32 %x, i32 %y) {
538+
; CHECK-LABEL: @sdiv_and_one_divisor(
539+
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 1
540+
; CHECK-NEXT: [[RES:%.*]] = sdiv i32 [[Y:%.*]], [[AND]]
541+
; CHECK-NEXT: ret i32 [[RES]]
542+
;
543+
%and = and i32 %x, 1
544+
%res = sdiv i32 %y, %and
545+
ret i32 %res
546+
}
547+
548+
define <2 x i8> @sdiv_and_one_vec_divisor(<2 x i8> %x, <2 x i8> %y) {
549+
; CHECK-LABEL: @sdiv_and_one_vec_divisor(
550+
; CHECK-NEXT: [[AND:%.*]] = and <2 x i8> [[X:%.*]], <i8 1, i8 1>
551+
; CHECK-NEXT: [[RES:%.*]] = sdiv <2 x i8> [[Y:%.*]], [[AND]]
552+
; CHECK-NEXT: ret <2 x i8> [[RES]]
553+
;
554+
%and = and <2 x i8> %x, <i8 1, i8 1>
555+
%res = sdiv <2 x i8> %y, %and
556+
ret <2 x i8> %res
557+
}
558+
559+
define i32 @sdiv_neg_or_divisor(i32 %x, i32 %y) {
560+
; CHECK-LABEL: @sdiv_neg_or_divisor(
561+
; CHECK-NEXT: [[OR:%.*]] = or i32 [[X:%.*]], -2
562+
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[OR]], -1
563+
; CHECK-NEXT: [[RES:%.*]] = sdiv i32 [[Y:%.*]], [[NEG]]
564+
; CHECK-NEXT: ret i32 [[RES]]
565+
;
566+
%or = or i32 %x, -2
567+
%neg = xor i32 %or, -1
568+
%res = sdiv i32 %y, %neg
569+
ret i32 %res
570+
}
571+
572+
define i32 @sdiv_neg_or_multi_one_bit_divisor(i32 %x, i32 %y) {
573+
; CHECK-LABEL: @sdiv_neg_or_multi_one_bit_divisor(
574+
; CHECK-NEXT: [[OR:%.*]] = or i32 [[X:%.*]], -3
575+
; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[OR]], -1
576+
; CHECK-NEXT: [[RES:%.*]] = sdiv i32 [[Y:%.*]], [[NEG]]
577+
; CHECK-NEXT: ret i32 [[RES]]
578+
;
579+
%or = or i32 %x, -3
580+
%neg = xor i32 %or, -1
581+
%res = sdiv i32 %y, %neg
582+
ret i32 %res
583+
}
584+
585+
define <2 x i8> @sdiv_vec_multi_one_bit_divisor(<2 x i8> %x, <2 x i8> %y) {
586+
; CHECK-LABEL: @sdiv_vec_multi_one_bit_divisor(
587+
; CHECK-NEXT: [[AND:%.*]] = and <2 x i8> [[X:%.*]], <i8 1, i8 3>
588+
; CHECK-NEXT: [[RES:%.*]] = sdiv <2 x i8> [[Y:%.*]], [[AND]]
589+
; CHECK-NEXT: ret <2 x i8> [[RES]]
590+
;
591+
%and = and <2 x i8> %x, <i8 1, i8 3>
592+
%res = sdiv <2 x i8> %y, %and
593+
ret <2 x i8> %res
594+
}

0 commit comments

Comments
 (0)