; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=core-avx2 -mattr=+avx2 | FileCheck %s ; Make sure that we don't match this shuffle using the vpblendw YMM instruction. ; The mask for the vpblendw instruction needs to be identical for both halves ; of the YMM. Need to use two vpblendw instructions. ; CHECK: blendw1 ; CHECK: vpblendw ; CHECK: vpblendw ; CHECK: ret define <16 x i16> @blendw1(<16 x i16> %a, <16 x i16> %b) nounwind alwaysinline { %t = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> ret <16 x i16> %t } ; CHECK: vpshufhw $27, %ymm define <16 x i16> @vpshufhw(<16 x i16> %src1) nounwind uwtable readnone ssp { entry: %shuffle.i = shufflevector <16 x i16> %src1, <16 x i16> %src1, <16 x i32> ret <16 x i16> %shuffle.i } ; CHECK: vpshuflw $27, %ymm define <16 x i16> @vpshuflw(<16 x i16> %src1) nounwind uwtable readnone ssp { entry: %shuffle.i = shufflevector <16 x i16> %src1, <16 x i16> %src1, <16 x i32> ret <16 x i16> %shuffle.i } ; CHECK: vpshufb_test ; CHECK: vpshufb {{.*\(%r.*}}, %ymm ; CHECK: ret define <32 x i8> @vpshufb_test(<32 x i8> %a) nounwind { %S = shufflevector <32 x i8> %a, <32 x i8> undef, <32 x i32> ret <32 x i8>%S } ; CHECK: vpshufb1_test ; CHECK: vpshufb {{.*\(%r.*}}, %ymm ; CHECK: ret define <32 x i8> @vpshufb1_test(<32 x i8> %a) nounwind { %S = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8>%S } ; CHECK: vpshufb2_test ; CHECK: vpshufb {{.*\(%r.*}}, %ymm ; CHECK: ret define <32 x i8> @vpshufb2_test(<32 x i8> %a) nounwind { %S = shufflevector <32 x i8> zeroinitializer, <32 x i8> %a, <32 x i32> ret <32 x i8>%S }