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_pmulhu_128(<8 x i16> %a0) { 952cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulhu_128( 104ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <8 x i16> zeroinitializer 1152cc7c00SSimon Pilgrim; 1252cc7c00SSimon Pilgrim %1 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<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_pmulhu_128_commute(<8 x i16> %a0) { 1752cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulhu_128_commute( 184ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <8 x i16> zeroinitializer 1952cc7c00SSimon Pilgrim; 2052cc7c00SSimon Pilgrim %1 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<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_pmulhu_256(<16 x i16> %a0) { 2552cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulhu_256( 264ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <16 x i16> zeroinitializer 2752cc7c00SSimon Pilgrim; 2852cc7c00SSimon Pilgrim %1 = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<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_pmulhu_256_commute(<16 x i16> %a0) { 3352cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulhu_256_commute( 344ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <16 x i16> zeroinitializer 3552cc7c00SSimon Pilgrim; 3652cc7c00SSimon Pilgrim %1 = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<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_pmulhu_512(<32 x i16> %a0) { 4152cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulhu_512( 424ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <32 x i16> zeroinitializer 4352cc7c00SSimon Pilgrim; 4452cc7c00SSimon Pilgrim %1 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.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_pmulhu_512_commute(<32 x i16> %a0) { 4952cc7c00SSimon Pilgrim; CHECK-LABEL: @undef_pmulhu_512_commute( 504ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <32 x i16> zeroinitializer 5152cc7c00SSimon Pilgrim; 5252cc7c00SSimon Pilgrim %1 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.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_pmulhu_128(<8 x i16> %a0) { 6152cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulhu_128( 624ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <8 x i16> zeroinitializer 6352cc7c00SSimon Pilgrim; 6452cc7c00SSimon Pilgrim %1 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<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_pmulhu_128_commute(<8 x i16> %a0) { 6952cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulhu_128_commute( 704ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <8 x i16> zeroinitializer 7152cc7c00SSimon Pilgrim; 7252cc7c00SSimon Pilgrim %1 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<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_pmulhu_256(<16 x i16> %a0) { 7752cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulhu_256( 784ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <16 x i16> zeroinitializer 7952cc7c00SSimon Pilgrim; 8052cc7c00SSimon Pilgrim %1 = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<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_pmulhu_256_commute(<16 x i16> %a0) { 8552cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulhu_256_commute( 864ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <16 x i16> zeroinitializer 8752cc7c00SSimon Pilgrim; 8852cc7c00SSimon Pilgrim %1 = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<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_pmulhu_512(<32 x i16> %a0) { 9352cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulhu_512( 944ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <32 x i16> zeroinitializer 9552cc7c00SSimon Pilgrim; 9652cc7c00SSimon Pilgrim %1 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.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_pmulhu_512_commute(<32 x i16> %a0) { 10152cc7c00SSimon Pilgrim; CHECK-LABEL: @zero_pmulhu_512_commute( 1024ee4bc3cSSimon Pilgrim; CHECK-NEXT: ret <32 x i16> zeroinitializer 10352cc7c00SSimon Pilgrim; 10452cc7c00SSimon Pilgrim %1 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.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_pmulhu_128(<8 x i16> %a0) { 11307fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulhu_128( 114f60f7b47SSimon Pilgrim; CHECK-NEXT: ret <8 x i16> zeroinitializer 11507fa7fc0SSimon Pilgrim; 11607fa7fc0SSimon Pilgrim %1 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %a0, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>) 11707fa7fc0SSimon Pilgrim ret <8 x i16> %1 11807fa7fc0SSimon Pilgrim} 11907fa7fc0SSimon Pilgrim 12007fa7fc0SSimon Pilgrimdefine <8 x i16> @one_pmulhu_128_commute(<8 x i16> %a0) { 12107fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulhu_128_commute( 122f60f7b47SSimon Pilgrim; CHECK-NEXT: ret <8 x i16> zeroinitializer 12307fa7fc0SSimon Pilgrim; 12407fa7fc0SSimon Pilgrim %1 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, <8 x i16> %a0) 12507fa7fc0SSimon Pilgrim ret <8 x i16> %1 12607fa7fc0SSimon Pilgrim} 12707fa7fc0SSimon Pilgrim 12807fa7fc0SSimon Pilgrimdefine <16 x i16> @one_pmulhu_256(<16 x i16> %a0) { 12907fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulhu_256( 130f60f7b47SSimon Pilgrim; CHECK-NEXT: ret <16 x i16> zeroinitializer 13107fa7fc0SSimon Pilgrim; 13207fa7fc0SSimon Pilgrim %1 = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<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>) 13307fa7fc0SSimon Pilgrim ret <16 x i16> %1 13407fa7fc0SSimon Pilgrim} 13507fa7fc0SSimon Pilgrim 13607fa7fc0SSimon Pilgrimdefine <16 x i16> @one_pmulhu_256_commute(<16 x i16> %a0) { 13707fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulhu_256_commute( 138f60f7b47SSimon Pilgrim; CHECK-NEXT: ret <16 x i16> zeroinitializer 13907fa7fc0SSimon Pilgrim; 14007fa7fc0SSimon Pilgrim %1 = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<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) 14107fa7fc0SSimon Pilgrim ret <16 x i16> %1 14207fa7fc0SSimon Pilgrim} 14307fa7fc0SSimon Pilgrim 14407fa7fc0SSimon Pilgrimdefine <32 x i16> @one_pmulhu_512(<32 x i16> %a0) { 14507fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulhu_512( 146f60f7b47SSimon Pilgrim; CHECK-NEXT: ret <32 x i16> zeroinitializer 14707fa7fc0SSimon Pilgrim; 14807fa7fc0SSimon Pilgrim %1 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.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>) 14907fa7fc0SSimon Pilgrim ret <32 x i16> %1 15007fa7fc0SSimon Pilgrim} 15107fa7fc0SSimon Pilgrim 15207fa7fc0SSimon Pilgrimdefine <32 x i16> @one_pmulhu_512_commute(<32 x i16> %a0) { 15307fa7fc0SSimon Pilgrim; CHECK-LABEL: @one_pmulhu_512_commute( 154f60f7b47SSimon Pilgrim; CHECK-NEXT: ret <32 x i16> zeroinitializer 15507fa7fc0SSimon Pilgrim; 15607fa7fc0SSimon Pilgrim %1 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.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) 15707fa7fc0SSimon Pilgrim ret <32 x i16> %1 15807fa7fc0SSimon Pilgrim} 15907fa7fc0SSimon Pilgrim 16007fa7fc0SSimon Pilgrim; 16152cc7c00SSimon Pilgrim; Constant Folding 16252cc7c00SSimon Pilgrim; 16352cc7c00SSimon Pilgrim 16452cc7c00SSimon Pilgrimdefine <8 x i16> @fold_pmulhu_128() { 16552cc7c00SSimon Pilgrim; CHECK-LABEL: @fold_pmulhu_128( 1667bb251a9SSimon Pilgrim; CHECK-NEXT: ret <8 x i16> <i16 -6, i16 0, i16 1, i16 32763, i16 -14, i16 5, i16 3, i16 32757> 16752cc7c00SSimon Pilgrim; 16852cc7c00SSimon Pilgrim %1 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<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>) 16952cc7c00SSimon Pilgrim ret <8 x i16> %1 17052cc7c00SSimon Pilgrim} 17152cc7c00SSimon Pilgrim 17252cc7c00SSimon Pilgrimdefine <16 x i16> @fold_pmulhu_256() { 17352cc7c00SSimon Pilgrim; CHECK-LABEL: @fold_pmulhu_256( 1747bb251a9SSimon Pilgrim; CHECK-NEXT: ret <16 x i16> <i16 0, i16 6, i16 1, i16 1, i16 -13, i16 -16, i16 3, i16 3, i16 12, i16 8, i16 -32766, i16 5, i16 16, i16 12, i16 -32764, i16 32748> 17552cc7c00SSimon Pilgrim; 17652cc7c00SSimon Pilgrim %1 = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<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>) 17752cc7c00SSimon Pilgrim ret <16 x i16> %1 17852cc7c00SSimon Pilgrim} 17952cc7c00SSimon Pilgrim 18052cc7c00SSimon Pilgrimdefine <32 x i16> @fold_pmulhu_512() { 18152cc7c00SSimon Pilgrim; CHECK-LABEL: @fold_pmulhu_512( 1827bb251a9SSimon Pilgrim; CHECK-NEXT: ret <32 x i16> <i16 0, i16 6, i16 1, i16 1, i16 -13, i16 -16, i16 3, i16 3, i16 12, i16 8, i16 -32766, i16 5, i16 16, i16 12, i16 -32764, i16 32748, i16 0, i16 6, i16 1, i16 1, i16 -13, i16 -16, i16 3, i16 3, i16 12, i16 8, i16 -32766, i16 5, i16 16, i16 12, i16 -32764, i16 32748> 18352cc7c00SSimon Pilgrim; 18452cc7c00SSimon Pilgrim %1 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.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>) 18552cc7c00SSimon Pilgrim ret <32 x i16> %1 18652cc7c00SSimon Pilgrim} 18752cc7c00SSimon Pilgrim 18852cc7c00SSimon Pilgrim; 18952cc7c00SSimon Pilgrim; Demanded Elts 19052cc7c00SSimon Pilgrim; 19152cc7c00SSimon Pilgrim 19252cc7c00SSimon Pilgrimdefine <8 x i16> @elts_pmulhu_128(<8 x i16> %a0, <8 x i16> %a1) { 19352cc7c00SSimon Pilgrim; CHECK-LABEL: @elts_pmulhu_128( 194c20695a4SSimon Pilgrim; CHECK-NEXT: [[TMP1:%.*]] = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]]) 195c20695a4SSimon Pilgrim; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <8 x i16> [[TMP1]], <8 x i16> poison, <8 x i32> zeroinitializer 196c20695a4SSimon Pilgrim; CHECK-NEXT: ret <8 x i16> [[TMP2]] 19752cc7c00SSimon Pilgrim; 19852cc7c00SSimon 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> 19952cc7c00SSimon 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> 20052cc7c00SSimon Pilgrim %3 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %1, <8 x i16> %2) 20152cc7c00SSimon Pilgrim %4 = shufflevector <8 x i16> %3, <8 x i16> poison, <8 x i32> zeroinitializer 20252cc7c00SSimon Pilgrim ret <8 x i16> %4 20352cc7c00SSimon Pilgrim} 20452cc7c00SSimon Pilgrim 20552cc7c00SSimon Pilgrimdefine <16 x i16> @elts_pmulhu_256(<16 x i16> %a0, <16 x i16> %a1) { 20652cc7c00SSimon Pilgrim; CHECK-LABEL: @elts_pmulhu_256( 207c20695a4SSimon Pilgrim; CHECK-NEXT: [[TMP1:%.*]] = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<16 x i16> [[A0:%.*]], <16 x i16> [[A1:%.*]]) 208c20695a4SSimon Pilgrim; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <16 x i16> [[TMP1]], <16 x i16> poison, <16 x i32> zeroinitializer 209c20695a4SSimon Pilgrim; CHECK-NEXT: ret <16 x i16> [[TMP2]] 21052cc7c00SSimon Pilgrim; 21152cc7c00SSimon 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> 21252cc7c00SSimon 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> 21352cc7c00SSimon Pilgrim %3 = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<16 x i16> %1, <16 x i16> %2) 21452cc7c00SSimon Pilgrim %4 = shufflevector <16 x i16> %3, <16 x i16> poison, <16 x i32> zeroinitializer 21552cc7c00SSimon Pilgrim ret <16 x i16> %4 21652cc7c00SSimon Pilgrim} 21752cc7c00SSimon Pilgrim 21852cc7c00SSimon Pilgrimdefine <32 x i16> @elts_pmulhu_512(<32 x i16> %a0, <32 x i16> %a1) { 21952cc7c00SSimon Pilgrim; CHECK-LABEL: @elts_pmulhu_512( 220c20695a4SSimon Pilgrim; CHECK-NEXT: [[TMP1:%.*]] = call <32 x i16> @llvm.x86.avx512.pmulhu.w.512(<32 x i16> [[A0:%.*]], <32 x i16> [[A1:%.*]]) 221c20695a4SSimon Pilgrim; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <32 x i16> [[TMP1]], <32 x i16> poison, <32 x i32> zeroinitializer 222c20695a4SSimon Pilgrim; CHECK-NEXT: ret <32 x i16> [[TMP2]] 22352cc7c00SSimon Pilgrim; 22452cc7c00SSimon 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> 22552cc7c00SSimon 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> 22652cc7c00SSimon Pilgrim %3 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.512(<32 x i16> %1, <32 x i16> %2) 22752cc7c00SSimon Pilgrim %4 = shufflevector <32 x i16> %3, <32 x i16> poison, <32 x i32> zeroinitializer 22852cc7c00SSimon Pilgrim ret <32 x i16> %4 22952cc7c00SSimon Pilgrim} 230e6cf2920SSimon Pilgrim 231e6cf2920SSimon Pilgrim; 232e6cf2920SSimon Pilgrim; Known Bits 233e6cf2920SSimon Pilgrim; 234e6cf2920SSimon Pilgrim 235e6cf2920SSimon Pilgrimdefine <8 x i16> @known_pmulhu_128(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> %a2) { 236e6cf2920SSimon Pilgrim; CHECK-LABEL: @known_pmulhu_128( 237*5c204b1dSSimon Pilgrim; CHECK-NEXT: ret <8 x i16> [[A2:%.*]] 238e6cf2920SSimon Pilgrim; 239e6cf2920SSimon Pilgrim %x0 = lshr <8 x i16> %a0, <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15> 240e6cf2920SSimon Pilgrim %x1 = and <8 x i16> %a1, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 241e6cf2920SSimon Pilgrim %m = tail call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %x0, <8 x i16> %x1) 242e6cf2920SSimon Pilgrim %r = add <8 x i16> %m, %a2 243e6cf2920SSimon Pilgrim ret <8 x i16> %r 244e6cf2920SSimon Pilgrim} 245e6cf2920SSimon Pilgrim 246e6cf2920SSimon Pilgrimdefine <16 x i16> @known_pmulhu_256(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> %a2) { 247e6cf2920SSimon Pilgrim; CHECK-LABEL: @known_pmulhu_256( 248*5c204b1dSSimon Pilgrim; CHECK-NEXT: ret <16 x i16> [[A2:%.*]] 249e6cf2920SSimon Pilgrim; 250e6cf2920SSimon Pilgrim %x0 = lshr <16 x i16> %a0, <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15> 251e6cf2920SSimon Pilgrim %x1 = and <16 x i16> %a1, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 252e6cf2920SSimon Pilgrim %m = tail call <16 x i16> @llvm.x86.avx2.pmulhu.w(<16 x i16> %x0, <16 x i16> %x1) 253e6cf2920SSimon Pilgrim %r = add <16 x i16> %m, %a2 254e6cf2920SSimon Pilgrim ret <16 x i16> %r 255e6cf2920SSimon Pilgrim} 256e6cf2920SSimon Pilgrim 257e6cf2920SSimon Pilgrimdefine <32 x i16> @known_pmulhu_512(<32 x i16> %a0, <32 x i16> %a1, <32 x i16> %a2) { 258e6cf2920SSimon Pilgrim; CHECK-LABEL: @known_pmulhu_512( 259*5c204b1dSSimon Pilgrim; CHECK-NEXT: ret <32 x i16> [[A2:%.*]] 260e6cf2920SSimon Pilgrim; 261e6cf2920SSimon Pilgrim %x0 = lshr <32 x i16> %a0, <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15> 262e6cf2920SSimon Pilgrim %x1 = and <32 x i16> %a1, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 263e6cf2920SSimon Pilgrim %m = tail call <32 x i16> @llvm.x86.avx512.pmulhu.w.512(<32 x i16> %x0, <32 x i16> %x1) 264e6cf2920SSimon Pilgrim %r = add <32 x i16> %m, %a2 265e6cf2920SSimon Pilgrim ret <32 x i16> %r 266e6cf2920SSimon Pilgrim} 267