xref: /llvm-project/llvm/test/Transforms/InstCombine/X86/x86-pmulhrs.ll (revision 38fffa630ee80163dc65e759392ad29798905679)
152cc7c00SSimon Pilgrim; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
252cc7c00SSimon Pilgrim; RUN: opt < %s -passes=instcombine -mtriple=x86_64-unknown-unknown -S | FileCheck %s
352cc7c00SSimon Pilgrim
452cc7c00SSimon Pilgrim;
552cc7c00SSimon Pilgrim; UNDEF Elts
652cc7c00SSimon Pilgrim;
752cc7c00SSimon Pilgrim
852cc7c00SSimon Pilgrimdefine <8 x i16> @undef_pmulh_128(<8 x i16> %a0) {
952cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulh_128(
104ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <8 x i16> zeroinitializer
1152cc7c00SSimon Pilgrim;
1252cc7c00SSimon Pilgrim  %1 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> %a0, <8 x i16> undef)
1352cc7c00SSimon Pilgrim  ret <8 x i16> %1
1452cc7c00SSimon Pilgrim}
1552cc7c00SSimon Pilgrim
1652cc7c00SSimon Pilgrimdefine <8 x i16> @undef_pmulh_128_commute(<8 x i16> %a0) {
1752cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulh_128_commute(
184ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <8 x i16> zeroinitializer
1952cc7c00SSimon Pilgrim;
2052cc7c00SSimon Pilgrim  %1 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> undef, <8 x i16> %a0)
2152cc7c00SSimon Pilgrim  ret <8 x i16> %1
2252cc7c00SSimon Pilgrim}
2352cc7c00SSimon Pilgrim
2452cc7c00SSimon Pilgrimdefine <16 x i16> @undef_pmulh_256(<16 x i16> %a0) {
2552cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulh_256(
264ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <16 x i16> zeroinitializer
2752cc7c00SSimon Pilgrim;
2852cc7c00SSimon Pilgrim  %1 = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> %a0, <16 x i16> undef)
2952cc7c00SSimon Pilgrim  ret <16 x i16> %1
3052cc7c00SSimon Pilgrim}
3152cc7c00SSimon Pilgrim
3252cc7c00SSimon Pilgrimdefine <16 x i16> @undef_pmulh_256_commute(<16 x i16> %a0) {
3352cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulh_256_commute(
344ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <16 x i16> zeroinitializer
3552cc7c00SSimon Pilgrim;
3652cc7c00SSimon Pilgrim  %1 = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> undef, <16 x i16> %a0)
3752cc7c00SSimon Pilgrim  ret <16 x i16> %1
3852cc7c00SSimon Pilgrim}
3952cc7c00SSimon Pilgrim
4052cc7c00SSimon Pilgrimdefine <32 x i16> @undef_pmulh_512(<32 x i16> %a0) {
4152cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulh_512(
424ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <32 x i16> zeroinitializer
4352cc7c00SSimon Pilgrim;
4452cc7c00SSimon Pilgrim  %1 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> %a0, <32 x i16> undef)
4552cc7c00SSimon Pilgrim  ret <32 x i16> %1
4652cc7c00SSimon Pilgrim}
4752cc7c00SSimon Pilgrim
4852cc7c00SSimon Pilgrimdefine <32 x i16> @undef_pmulh_512_commute(<32 x i16> %a0) {
4952cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulh_512_commute(
504ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <32 x i16> zeroinitializer
5152cc7c00SSimon Pilgrim;
5252cc7c00SSimon Pilgrim  %1 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> undef, <32 x i16> %a0)
5352cc7c00SSimon Pilgrim  ret <32 x i16> %1
5452cc7c00SSimon Pilgrim}
5552cc7c00SSimon Pilgrim
5652cc7c00SSimon Pilgrim;
5752cc7c00SSimon Pilgrim; Zero Elts
5852cc7c00SSimon Pilgrim;
5952cc7c00SSimon Pilgrim
6052cc7c00SSimon Pilgrimdefine <8 x i16> @zero_pmulh_128(<8 x i16> %a0) {
6152cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulh_128(
624ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <8 x i16> zeroinitializer
6352cc7c00SSimon Pilgrim;
6452cc7c00SSimon Pilgrim  %1 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> %a0, <8 x i16> zeroinitializer)
6552cc7c00SSimon Pilgrim  ret <8 x i16> %1
6652cc7c00SSimon Pilgrim}
6752cc7c00SSimon Pilgrim
6852cc7c00SSimon Pilgrimdefine <8 x i16> @zero_pmulh_128_commute(<8 x i16> %a0) {
6952cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulh_128_commute(
704ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <8 x i16> zeroinitializer
7152cc7c00SSimon Pilgrim;
7252cc7c00SSimon Pilgrim  %1 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> zeroinitializer, <8 x i16> %a0)
7352cc7c00SSimon Pilgrim  ret <8 x i16> %1
7452cc7c00SSimon Pilgrim}
7552cc7c00SSimon Pilgrim
7652cc7c00SSimon Pilgrimdefine <16 x i16> @zero_pmulh_256(<16 x i16> %a0) {
7752cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulh_256(
784ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <16 x i16> zeroinitializer
7952cc7c00SSimon Pilgrim;
8052cc7c00SSimon Pilgrim  %1 = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> %a0, <16 x i16> zeroinitializer)
8152cc7c00SSimon Pilgrim  ret <16 x i16> %1
8252cc7c00SSimon Pilgrim}
8352cc7c00SSimon Pilgrim
8452cc7c00SSimon Pilgrimdefine <16 x i16> @zero_pmulh_256_commute(<16 x i16> %a0) {
8552cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulh_256_commute(
864ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <16 x i16> zeroinitializer
8752cc7c00SSimon Pilgrim;
8852cc7c00SSimon Pilgrim  %1 = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> zeroinitializer, <16 x i16> %a0)
8952cc7c00SSimon Pilgrim  ret <16 x i16> %1
9052cc7c00SSimon Pilgrim}
9152cc7c00SSimon Pilgrim
9252cc7c00SSimon Pilgrimdefine <32 x i16> @zero_pmulh_512(<32 x i16> %a0) {
9352cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulh_512(
944ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <32 x i16> zeroinitializer
9552cc7c00SSimon Pilgrim;
9652cc7c00SSimon Pilgrim  %1 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> %a0, <32 x i16> zeroinitializer)
9752cc7c00SSimon Pilgrim  ret <32 x i16> %1
9852cc7c00SSimon Pilgrim}
9952cc7c00SSimon Pilgrim
10052cc7c00SSimon Pilgrimdefine <32 x i16> @zero_pmulh_512_commute(<32 x i16> %a0) {
10152cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulh_512_commute(
1024ee4bc3cSSimon Pilgrim; CHECK-NEXT:    ret <32 x i16> zeroinitializer
10352cc7c00SSimon Pilgrim;
10452cc7c00SSimon Pilgrim  %1 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> zeroinitializer, <32 x i16> %a0)
10552cc7c00SSimon Pilgrim  ret <32 x i16> %1
10652cc7c00SSimon Pilgrim}
10752cc7c00SSimon Pilgrim
10852cc7c00SSimon Pilgrim;
10907fa7fc0SSimon Pilgrim; Multiply by One
11007fa7fc0SSimon Pilgrim;
11107fa7fc0SSimon Pilgrim
11207fa7fc0SSimon Pilgrimdefine <8 x i16> @one_pmulh_128(<8 x i16> %a0) {
11307fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulh_128(
114*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> [[A0:%.*]], <8 x i16> splat (i16 1))
11507fa7fc0SSimon Pilgrim; CHECK-NEXT:    ret <8 x i16> [[TMP1]]
11607fa7fc0SSimon Pilgrim;
11707fa7fc0SSimon Pilgrim  %1 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> %a0, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
11807fa7fc0SSimon Pilgrim  ret <8 x i16> %1
11907fa7fc0SSimon Pilgrim}
12007fa7fc0SSimon Pilgrim
12107fa7fc0SSimon Pilgrimdefine <8 x i16> @one_pmulh_128_commute(<8 x i16> %a0) {
12207fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulh_128_commute(
123*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> splat (i16 1), <8 x i16> [[A0:%.*]])
12407fa7fc0SSimon Pilgrim; CHECK-NEXT:    ret <8 x i16> [[TMP1]]
12507fa7fc0SSimon Pilgrim;
12607fa7fc0SSimon Pilgrim  %1 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, <8 x i16> %a0)
12707fa7fc0SSimon Pilgrim  ret <8 x i16> %1
12807fa7fc0SSimon Pilgrim}
12907fa7fc0SSimon Pilgrim
13007fa7fc0SSimon Pilgrimdefine <16 x i16> @one_pmulh_256(<16 x i16> %a0) {
13107fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulh_256(
132*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> [[A0:%.*]], <16 x i16> splat (i16 1))
13307fa7fc0SSimon Pilgrim; CHECK-NEXT:    ret <16 x i16> [[TMP1]]
13407fa7fc0SSimon Pilgrim;
13507fa7fc0SSimon Pilgrim  %1 = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> %a0, <16 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
13607fa7fc0SSimon Pilgrim  ret <16 x i16> %1
13707fa7fc0SSimon Pilgrim}
13807fa7fc0SSimon Pilgrim
13907fa7fc0SSimon Pilgrimdefine <16 x i16> @one_pmulh_256_commute(<16 x i16> %a0) {
14007fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulh_256_commute(
141*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> splat (i16 1), <16 x i16> [[A0:%.*]])
14207fa7fc0SSimon Pilgrim; CHECK-NEXT:    ret <16 x i16> [[TMP1]]
14307fa7fc0SSimon Pilgrim;
14407fa7fc0SSimon Pilgrim  %1 = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, <16 x i16> %a0)
14507fa7fc0SSimon Pilgrim  ret <16 x i16> %1
14607fa7fc0SSimon Pilgrim}
14707fa7fc0SSimon Pilgrim
14807fa7fc0SSimon Pilgrimdefine <32 x i16> @one_pmulh_512(<32 x i16> %a0) {
14907fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulh_512(
150*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP1:%.*]] = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> [[A0:%.*]], <32 x i16> splat (i16 1))
15107fa7fc0SSimon Pilgrim; CHECK-NEXT:    ret <32 x i16> [[TMP1]]
15207fa7fc0SSimon Pilgrim;
15307fa7fc0SSimon Pilgrim  %1 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> %a0, <32 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
15407fa7fc0SSimon Pilgrim  ret <32 x i16> %1
15507fa7fc0SSimon Pilgrim}
15607fa7fc0SSimon Pilgrim
15707fa7fc0SSimon Pilgrimdefine <32 x i16> @one_pmulh_512_commute(<32 x i16> %a0) {
15807fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulh_512_commute(
159*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP1:%.*]] = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> splat (i16 1), <32 x i16> [[A0:%.*]])
16007fa7fc0SSimon Pilgrim; CHECK-NEXT:    ret <32 x i16> [[TMP1]]
16107fa7fc0SSimon Pilgrim;
16207fa7fc0SSimon Pilgrim  %1 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, <32 x i16> %a0)
16307fa7fc0SSimon Pilgrim  ret <32 x i16> %1
16407fa7fc0SSimon Pilgrim}
16507fa7fc0SSimon Pilgrim
16607fa7fc0SSimon Pilgrim;
16752cc7c00SSimon Pilgrim; Constant Folding
16852cc7c00SSimon Pilgrim;
16952cc7c00SSimon Pilgrim
17052cc7c00SSimon Pilgrimdefine <8 x i16> @fold_pmulh_128() {
17152cc7c00SSimon Pilgrim; CHECK-LABEL: @fold_pmulh_128(
1727bb251a9SSimon Pilgrim; CHECK-NEXT:    ret <8 x i16> <i16 0, i16 0, i16 -3, i16 -4, i16 0, i16 0, i16 -7, i16 -8>
17352cc7c00SSimon Pilgrim;
17452cc7c00SSimon Pilgrim  %1 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> <i16 -1, i16 2, i16 3, i16 -4, i16 -5, i16 6, i16 7, i16 -8>, <8 x i16> <i16 -5, i16 7, i16 -32768, i16 32765, i16 -9, i16 -11, i16 -32763, i16 32761>)
17552cc7c00SSimon Pilgrim  ret <8 x i16> %1
17652cc7c00SSimon Pilgrim}
17752cc7c00SSimon Pilgrim
17852cc7c00SSimon Pilgrimdefine <16 x i16> @fold_pmulh_256() {
17952cc7c00SSimon Pilgrim; CHECK-LABEL: @fold_pmulh_256(
1807bb251a9SSimon Pilgrim; CHECK-NEXT:    ret <16 x i16> <i16 0, i16 0, i16 -2, i16 3, i16 0, i16 0, i16 -6, i16 7, i16 0, i16 0, i16 10, i16 11, i16 0, i16 0, i16 14, i16 -15>
18152cc7c00SSimon Pilgrim;
18252cc7c00SSimon Pilgrim  %1 = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> <i16 0, i16 -1, i16 2, i16 3, i16 -4, i16 -5, i16 6, i16 7, i16 -8, i16 9, i16 -10, i16 11, i16 -12, i16 13, i16 -14, i16 -15>, <16 x i16> <i16 -5, i16 7, i16 -32768, i16 32766, i16 -9, i16 -11, i16 -32764, i16 32762, i16 13, i16 -15, i16 -32760, i16 32758, i16 17, i16 -19, i16 -32756, i16 32756>)
18352cc7c00SSimon Pilgrim  ret <16 x i16> %1
18452cc7c00SSimon Pilgrim}
18552cc7c00SSimon Pilgrim
18652cc7c00SSimon Pilgrimdefine <32 x i16> @fold_pmulh_512() {
18752cc7c00SSimon Pilgrim; CHECK-LABEL: @fold_pmulh_512(
1887bb251a9SSimon Pilgrim; CHECK-NEXT:    ret <32 x i16> <i16 0, i16 0, i16 -2, i16 3, i16 0, i16 0, i16 -6, i16 7, i16 0, i16 0, i16 10, i16 11, i16 0, i16 0, i16 14, i16 -15, i16 0, i16 0, i16 -2, i16 3, i16 0, i16 0, i16 -6, i16 7, i16 0, i16 0, i16 10, i16 11, i16 0, i16 0, i16 14, i16 -15>
18952cc7c00SSimon Pilgrim;
19052cc7c00SSimon Pilgrim  %1 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> <i16 0, i16 -1, i16 2, i16 3, i16 -4, i16 -5, i16 6, i16 7, i16 -8, i16 9, i16 -10, i16 11, i16 -12, i16 13, i16 -14, i16 -15, i16 -5, i16 7, i16 -32768, i16 32766, i16 -9, i16 -11, i16 -32764, i16 32762, i16 13, i16 -15, i16 -32760, i16 32758, i16 17, i16 -19, i16 -32756, i16 32756>, <32 x i16> <i16 -5, i16 7, i16 -32768, i16 32766, i16 -9, i16 -11, i16 -32764, i16 32762, i16 13, i16 -15, i16 -32760, i16 32758, i16 17, i16 -19, i16 -32756, i16 32756, i16 0, i16 -1, i16 2, i16 3, i16 -4, i16 -5, i16 6, i16 7, i16 -8, i16 9, i16 -10, i16 11, i16 -12, i16 13, i16 -14, i16 -15>)
19152cc7c00SSimon Pilgrim  ret <32 x i16> %1
19252cc7c00SSimon Pilgrim}
19352cc7c00SSimon Pilgrim
19452cc7c00SSimon Pilgrim;
19552cc7c00SSimon Pilgrim; Demanded Elts
19652cc7c00SSimon Pilgrim;
19752cc7c00SSimon Pilgrim
19852cc7c00SSimon Pilgrimdefine <8 x i16> @elts_pmulh_128(<8 x i16> %a0, <8 x i16> %a1) {
19952cc7c00SSimon Pilgrim; CHECK-LABEL: @elts_pmulh_128(
200c20695a4SSimon Pilgrim; CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]])
201c20695a4SSimon Pilgrim; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i16> [[TMP1]], <8 x i16> poison, <8 x i32> zeroinitializer
202c20695a4SSimon Pilgrim; CHECK-NEXT:    ret <8 x i16> [[TMP2]]
20352cc7c00SSimon Pilgrim;
20452cc7c00SSimon Pilgrim  %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2>
20552cc7c00SSimon Pilgrim  %2 = shufflevector <8 x i16> %a1, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
20652cc7c00SSimon Pilgrim  %3 = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> %1, <8 x i16> %2)
20752cc7c00SSimon Pilgrim  %4 = shufflevector <8 x i16> %3, <8 x i16> poison, <8 x i32> zeroinitializer
20852cc7c00SSimon Pilgrim  ret <8 x i16> %4
20952cc7c00SSimon Pilgrim}
21052cc7c00SSimon Pilgrim
21152cc7c00SSimon Pilgrimdefine <16 x i16> @elts_pmulh_256(<16 x i16> %a0, <16 x i16> %a1) {
21252cc7c00SSimon Pilgrim; CHECK-LABEL: @elts_pmulh_256(
213c20695a4SSimon Pilgrim; CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> [[A0:%.*]], <16 x i16> [[A1:%.*]])
214c20695a4SSimon Pilgrim; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <16 x i16> [[TMP1]], <16 x i16> poison, <16 x i32> zeroinitializer
215c20695a4SSimon Pilgrim; CHECK-NEXT:    ret <16 x i16> [[TMP2]]
21652cc7c00SSimon Pilgrim;
21752cc7c00SSimon Pilgrim  %1 = shufflevector <16 x i16> %a0, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
21852cc7c00SSimon Pilgrim  %2 = shufflevector <16 x i16> %a1, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
21952cc7c00SSimon Pilgrim  %3 = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> %1, <16 x i16> %2)
22052cc7c00SSimon Pilgrim  %4 = shufflevector <16 x i16> %3, <16 x i16> poison, <16 x i32> zeroinitializer
22152cc7c00SSimon Pilgrim  ret <16 x i16> %4
22252cc7c00SSimon Pilgrim}
22352cc7c00SSimon Pilgrim
22452cc7c00SSimon Pilgrimdefine <32 x i16> @elts_pmulh_512(<32 x i16> %a0, <32 x i16> %a1) {
22552cc7c00SSimon Pilgrim; CHECK-LABEL: @elts_pmulh_512(
226c20695a4SSimon Pilgrim; CHECK-NEXT:    [[TMP1:%.*]] = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> [[A0:%.*]], <32 x i16> [[A1:%.*]])
227c20695a4SSimon Pilgrim; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <32 x i16> [[TMP1]], <32 x i16> poison, <32 x i32> zeroinitializer
228c20695a4SSimon Pilgrim; CHECK-NEXT:    ret <32 x i16> [[TMP2]]
22952cc7c00SSimon Pilgrim;
23052cc7c00SSimon Pilgrim  %1 = shufflevector <32 x i16> %a0, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
23152cc7c00SSimon Pilgrim  %2 = shufflevector <32 x i16> %a1, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
23252cc7c00SSimon Pilgrim  %3 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> %1, <32 x i16> %2)
23352cc7c00SSimon Pilgrim  %4 = shufflevector <32 x i16> %3, <32 x i16> poison, <32 x i32> zeroinitializer
23452cc7c00SSimon Pilgrim  ret <32 x i16> %4
23552cc7c00SSimon Pilgrim}
236