diff --git a/lib/Target/X86/X86InstrSSE.td b/lib/Target/X86/X86InstrSSE.td index 7cae485b24049..bac88f928c227 100644 --- a/lib/Target/X86/X86InstrSSE.td +++ b/lib/Target/X86/X86InstrSSE.td @@ -6965,7 +6965,7 @@ let Predicates = [HasAVX] in { let Predicates = [HasAVX2] in { def : Pat<(v32i8 (vselect (v32i8 VR256:$mask), (v32i8 VR256:$src1), (v32i8 VR256:$src2))), - (VPBLENDVBYrr VR256:$src1, VR256:$src2, VR256:$mask)>; + (VPBLENDVBYrr VR256:$src2, VR256:$src1, VR256:$mask)>; def : Pat<(v16i16 (X86Blendi (v16i16 VR256:$src1), (v16i16 VR256:$src2), (imm:$mask))), (VPBLENDWYrri VR256:$src1, VR256:$src2, imm:$mask)>; diff --git a/test/CodeGen/X86/pr17764.ll b/test/CodeGen/X86/pr17764.ll new file mode 100644 index 0000000000000..7a3fd6d1810bd --- /dev/null +++ b/test/CodeGen/X86/pr17764.ll @@ -0,0 +1,10 @@ +; RUN: llc < %s -mtriple=x86_64-linux -mcpu=core-avx2 | FileCheck %s + +define <16 x i16> @foo(<16 x i1> %mask, <16 x i16> %x, <16 x i16> %y) { + %ret = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %y + ret <16 x i16> %ret +} + +; CHECK: foo +; CHECK: vpblendvb %ymm0, %ymm1, %ymm2, %ymm0 +; CHECK: ret