Skip to content

Commit 9effba7

Browse files
committed
[NFC] Update test for PR #118055
1 parent 5315f3f commit 9effba7

File tree

1 file changed

+111
-3
lines changed
  • llvm/test/Transforms/SLPVectorizer/AArch64

1 file changed

+111
-3
lines changed

llvm/test/Transforms/SLPVectorizer/AArch64/div.ll

+111-3
Original file line numberDiff line numberDiff line change
@@ -552,9 +552,63 @@ define <4 x i32> @slp_v4i32_Op1_unknown_Op2_const_pow2(<4 x i32> %a)
552552
ret <4 x i32> %r3
553553
}
554554

555+
define <2 x i32> @sdiv_v2i32_unknown_divisor(<2 x i32> %a, <2 x i32> %x, <2 x i32> %y, <2 x i32> %z)
556+
; NO-SVE-LABEL: define <2 x i32> @sdiv_v2i32_unknown_divisor(
557+
; NO-SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {
558+
; NO-SVE-NEXT: [[A0:%.*]] = extractelement <2 x i32> [[A]], i64 0
559+
; NO-SVE-NEXT: [[A1:%.*]] = extractelement <2 x i32> [[A]], i64 1
560+
; NO-SVE-NEXT: [[TMP1:%.*]] = sdiv i32 [[A0]], [[A1]]
561+
; NO-SVE-NEXT: [[TMP2:%.*]] = sdiv i32 [[A1]], [[A0]]
562+
; NO-SVE-NEXT: [[X0:%.*]] = extractelement <2 x i32> [[X]], i64 0
563+
; NO-SVE-NEXT: [[X1:%.*]] = extractelement <2 x i32> [[X]], i64 1
564+
; NO-SVE-NEXT: [[TMP3:%.*]] = add i32 [[TMP1]], [[X0]]
565+
; NO-SVE-NEXT: [[TMP4:%.*]] = add i32 [[TMP2]], [[X1]]
566+
; NO-SVE-NEXT: [[Y0:%.*]] = extractelement <2 x i32> [[Y]], i64 0
567+
; NO-SVE-NEXT: [[Y1:%.*]] = extractelement <2 x i32> [[Y]], i64 1
568+
; NO-SVE-NEXT: [[TMP5:%.*]] = sub i32 [[TMP3]], [[Y0]]
569+
; NO-SVE-NEXT: [[TMP6:%.*]] = sub i32 [[TMP4]], [[Y1]]
570+
; NO-SVE-NEXT: [[Z0:%.*]] = extractelement <2 x i32> [[Z]], i64 0
571+
; NO-SVE-NEXT: [[Z1:%.*]] = extractelement <2 x i32> [[Z]], i64 1
572+
; NO-SVE-NEXT: [[TMP7:%.*]] = mul i32 [[TMP5]], [[Z0]]
573+
; NO-SVE-NEXT: [[TMP8:%.*]] = mul i32 [[TMP6]], [[Z1]]
574+
; NO-SVE-NEXT: [[RES0:%.*]] = insertelement <2 x i32> poison, i32 [[TMP7]], i32 0
575+
; NO-SVE-NEXT: [[RES1:%.*]] = insertelement <2 x i32> [[RES0]], i32 [[TMP8]], i32 1
576+
; NO-SVE-NEXT: ret <2 x i32> [[RES1]]
577+
;
578+
; SVE-LABEL: define <2 x i32> @sdiv_v2i32_unknown_divisor(
579+
; SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {
580+
; SVE-NEXT: [[TMP1:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> poison, <2 x i32> <i32 1, i32 0>
581+
; SVE-NEXT: [[TMP2:%.*]] = sdiv <2 x i32> [[A]], [[TMP1]]
582+
; SVE-NEXT: [[TMP3:%.*]] = add <2 x i32> [[TMP2]], [[X]]
583+
; SVE-NEXT: [[TMP4:%.*]] = sub <2 x i32> [[TMP3]], [[Y]]
584+
; SVE-NEXT: [[TMP5:%.*]] = mul <2 x i32> [[TMP4]], [[Z]]
585+
; SVE-NEXT: ret <2 x i32> [[TMP5]]
586+
;
587+
{
588+
%a0 = extractelement <2 x i32> %a, i64 0
589+
%a1 = extractelement <2 x i32> %a, i64 1
590+
%1 = sdiv i32 %a0, %a1
591+
%2 = sdiv i32 %a1, %a0
592+
%x0 = extractelement <2 x i32> %x, i64 0
593+
%x1 = extractelement <2 x i32> %x, i64 1
594+
%3 = add i32 %1, %x0
595+
%4 = add i32 %2, %x1
596+
%y0 = extractelement <2 x i32> %y, i64 0
597+
%y1 = extractelement <2 x i32> %y, i64 1
598+
%5 = sub i32 %3, %y0
599+
%6 = sub i32 %4, %y1
600+
%z0 = extractelement <2 x i32> %z, i64 0
601+
%z1 = extractelement <2 x i32> %z, i64 1
602+
%7 = mul i32 %5, %z0
603+
%8 = mul i32 %6, %z1
604+
%res0 = insertelement <2 x i32> poison, i32 %7, i32 0
605+
%res1 = insertelement <2 x i32> %res0, i32 %8, i32 1
606+
ret <2 x i32> %res1
607+
}
608+
555609
; computes (a/const + x - y) * z
556-
define <2 x i32> @vectorize_sdiv_v2i32(<2 x i32> %a, <2 x i32> %x, <2 x i32> %y, <2 x i32> %z)
557-
; NO-SVE-LABEL: define <2 x i32> @vectorize_sdiv_v2i32(
610+
define <2 x i32> @sdiv_v2i32_const_divisor(<2 x i32> %a, <2 x i32> %x, <2 x i32> %y, <2 x i32> %z)
611+
; NO-SVE-LABEL: define <2 x i32> @sdiv_v2i32_const_divisor(
558612
; NO-SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {
559613
; NO-SVE-NEXT: [[A0:%.*]] = extractelement <2 x i32> [[A]], i64 0
560614
; NO-SVE-NEXT: [[A1:%.*]] = extractelement <2 x i32> [[A]], i64 1
@@ -576,7 +630,7 @@ define <2 x i32> @vectorize_sdiv_v2i32(<2 x i32> %a, <2 x i32> %x, <2 x i32> %y,
576630
; NO-SVE-NEXT: [[RES1:%.*]] = insertelement <2 x i32> [[RES0]], i32 [[TMP8]], i32 1
577631
; NO-SVE-NEXT: ret <2 x i32> [[RES1]]
578632
;
579-
; SVE-LABEL: define <2 x i32> @vectorize_sdiv_v2i32(
633+
; SVE-LABEL: define <2 x i32> @sdiv_v2i32_const_divisor(
580634
; SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {
581635
; SVE-NEXT: [[TMP1:%.*]] = sdiv <2 x i32> [[A]], <i32 2, i32 4>
582636
; SVE-NEXT: [[TMP2:%.*]] = add <2 x i32> [[TMP1]], [[X]]
@@ -605,3 +659,57 @@ define <2 x i32> @vectorize_sdiv_v2i32(<2 x i32> %a, <2 x i32> %x, <2 x i32> %y,
605659
%res1 = insertelement <2 x i32> %res0, i32 %8, i32 1
606660
ret <2 x i32> %res1
607661
}
662+
663+
define <2 x i32> @sdiv_v2i32_Op1_unknown_Op2_const(<2 x i32> %a, <2 x i32> %x, <2 x i32> %y, <2 x i32> %z)
664+
; NO-SVE-LABEL: define <2 x i32> @sdiv_v2i32_Op1_unknown_Op2_const(
665+
; NO-SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {
666+
; NO-SVE-NEXT: [[A0:%.*]] = extractelement <2 x i32> [[A]], i64 0
667+
; NO-SVE-NEXT: [[A1:%.*]] = extractelement <2 x i32> [[A]], i64 1
668+
; NO-SVE-NEXT: [[TMP1:%.*]] = sdiv i32 [[A0]], [[A0]]
669+
; NO-SVE-NEXT: [[TMP2:%.*]] = sdiv i32 [[A1]], 4
670+
; NO-SVE-NEXT: [[X0:%.*]] = extractelement <2 x i32> [[X]], i64 0
671+
; NO-SVE-NEXT: [[X1:%.*]] = extractelement <2 x i32> [[X]], i64 1
672+
; NO-SVE-NEXT: [[TMP3:%.*]] = add i32 [[TMP1]], [[X0]]
673+
; NO-SVE-NEXT: [[TMP4:%.*]] = add i32 [[TMP2]], [[X1]]
674+
; NO-SVE-NEXT: [[Y0:%.*]] = extractelement <2 x i32> [[Y]], i64 0
675+
; NO-SVE-NEXT: [[Y1:%.*]] = extractelement <2 x i32> [[Y]], i64 1
676+
; NO-SVE-NEXT: [[TMP5:%.*]] = sub i32 [[TMP3]], [[Y0]]
677+
; NO-SVE-NEXT: [[TMP6:%.*]] = sub i32 [[TMP4]], [[Y1]]
678+
; NO-SVE-NEXT: [[Z0:%.*]] = extractelement <2 x i32> [[Z]], i64 0
679+
; NO-SVE-NEXT: [[Z1:%.*]] = extractelement <2 x i32> [[Z]], i64 1
680+
; NO-SVE-NEXT: [[TMP7:%.*]] = mul i32 [[TMP5]], [[Z0]]
681+
; NO-SVE-NEXT: [[TMP8:%.*]] = mul i32 [[TMP6]], [[Z1]]
682+
; NO-SVE-NEXT: [[RES0:%.*]] = insertelement <2 x i32> poison, i32 [[TMP7]], i32 0
683+
; NO-SVE-NEXT: [[RES1:%.*]] = insertelement <2 x i32> [[RES0]], i32 [[TMP8]], i32 1
684+
; NO-SVE-NEXT: ret <2 x i32> [[RES1]]
685+
;
686+
; SVE-LABEL: define <2 x i32> @sdiv_v2i32_Op1_unknown_Op2_const(
687+
; SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {
688+
; SVE-NEXT: [[TMP1:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> <i32 poison, i32 4>, <2 x i32> <i32 0, i32 3>
689+
; SVE-NEXT: [[TMP2:%.*]] = sdiv <2 x i32> [[A]], [[TMP1]]
690+
; SVE-NEXT: [[TMP3:%.*]] = add <2 x i32> [[TMP2]], [[X]]
691+
; SVE-NEXT: [[TMP4:%.*]] = sub <2 x i32> [[TMP3]], [[Y]]
692+
; SVE-NEXT: [[TMP5:%.*]] = mul <2 x i32> [[TMP4]], [[Z]]
693+
; SVE-NEXT: ret <2 x i32> [[TMP5]]
694+
;
695+
{
696+
%a0 = extractelement <2 x i32> %a, i64 0
697+
%a1 = extractelement <2 x i32> %a, i64 1
698+
%1 = sdiv i32 %a0, %a0
699+
%2 = sdiv i32 %a1, 4
700+
%x0 = extractelement <2 x i32> %x, i64 0
701+
%x1 = extractelement <2 x i32> %x, i64 1
702+
%3 = add i32 %1, %x0
703+
%4 = add i32 %2, %x1
704+
%y0 = extractelement <2 x i32> %y, i64 0
705+
%y1 = extractelement <2 x i32> %y, i64 1
706+
%5 = sub i32 %3, %y0
707+
%6 = sub i32 %4, %y1
708+
%z0 = extractelement <2 x i32> %z, i64 0
709+
%z1 = extractelement <2 x i32> %z, i64 1
710+
%7 = mul i32 %5, %z0
711+
%8 = mul i32 %6, %z1
712+
%res0 = insertelement <2 x i32> poison, i32 %7, i32 0
713+
%res1 = insertelement <2 x i32> %res0, i32 %8, i32 1
714+
ret <2 x i32> %res1
715+
}

0 commit comments

Comments
 (0)