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