; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX2 define ptr @test_mul(ptr %addr) { ; AVX2-LABEL: test_mul: ; AVX2: # %bb.0: # %entry ; AVX2-NEXT: vmovdqa {{.*#+}} xmm0 = [255,0,0,0] ; AVX2-NEXT: vpbroadcastb {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] ; AVX2-NEXT: vpblendvb %xmm0, (%rdi), %xmm1, %xmm0 ; AVX2-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero ; AVX2-NEXT: vmovdqu %ymm0, 0 ; AVX2-NEXT: xorl %eax, %eax ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq entry: %vec0 = load <32 x i8>, ptr %addr %vec1 = shufflevector <32 x i8> %vec0, <32 x i8> , <32 x i32> %0 = bitcast <32 x i8> %vec1 to <4 x i64> %shuffle = shufflevector <4 x i64> %0, <4 x i64> zeroinitializer, <2 x i32> %1 = bitcast <2 x i64> %shuffle to <16 x i8> %conv = zext <16 x i8> %1 to <16 x i16> store <16 x i16> %conv, ptr null, align 1 ret ptr null }