brintos

brintos / llvm-project-archived public Read only

0
0
Text · 243.9 KiB · 0e37e5a Raw
5902 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2             | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.2           | FileCheck %s --check-prefixes=SSE,SSE424; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2             | FileCheck %s --check-prefixes=AVX25; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512f          | FileCheck %s --check-prefixes=AVX512,AVX512F6; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512f,avx512vl | FileCheck %s --check-prefixes=AVX512,AVX512VL7 8define <4 x float> @fadd_v4f32(<4 x i1> %b, <4 x float> noundef %x, <4 x float> noundef %y) {9; SSE2-LABEL: fadd_v4f32:10; SSE2:       # %bb.0:11; SSE2-NEXT:    pslld $31, %xmm012; SSE2-NEXT:    psrad $31, %xmm013; SSE2-NEXT:    pand %xmm0, %xmm214; SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm015; SSE2-NEXT:    por %xmm2, %xmm016; SSE2-NEXT:    addps %xmm1, %xmm017; SSE2-NEXT:    retq18;19; SSE42-LABEL: fadd_v4f32:20; SSE42:       # %bb.0:21; SSE42-NEXT:    pslld $31, %xmm022; SSE42-NEXT:    movaps {{.*#+}} xmm3 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]23; SSE42-NEXT:    blendvps %xmm0, %xmm2, %xmm324; SSE42-NEXT:    addps %xmm1, %xmm325; SSE42-NEXT:    movaps %xmm3, %xmm026; SSE42-NEXT:    retq27;28; AVX2-LABEL: fadd_v4f32:29; AVX2:       # %bb.0:30; AVX2-NEXT:    vpslld $31, %xmm0, %xmm031; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm3 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]32; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm3, %xmm033; AVX2-NEXT:    vaddps %xmm0, %xmm1, %xmm034; AVX2-NEXT:    retq35;36; AVX512F-LABEL: fadd_v4f32:37; AVX512F:       # %bb.0:38; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm239; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm040; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k141; AVX512F-NEXT:    vbroadcastss {{.*#+}} xmm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]42; AVX512F-NEXT:    vmovaps %zmm2, %zmm0 {%k1}43; AVX512F-NEXT:    vaddps %xmm0, %xmm1, %xmm044; AVX512F-NEXT:    vzeroupper45; AVX512F-NEXT:    retq46;47; AVX512VL-LABEL: fadd_v4f32:48; AVX512VL:       # %bb.0:49; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm050; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k151; AVX512VL-NEXT:    vaddps %xmm2, %xmm1, %xmm1 {%k1}52; AVX512VL-NEXT:    vmovaps %xmm1, %xmm053; AVX512VL-NEXT:    retq54  %s = select <4 x i1> %b, <4 x float> %y, <4 x float> <float -0.0, float -0.0, float -0.0, float -0.0>55  %r = fadd <4 x float> %x, %s56  ret <4 x float> %r57}58 59define <8 x float> @fadd_v8f32_commute(<8 x i1> %b, <8 x float> noundef %x, <8 x float> noundef %y) {60; SSE2-LABEL: fadd_v8f32_commute:61; SSE2:       # %bb.0:62; SSE2-NEXT:    movdqa %xmm0, %xmm563; SSE2-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]64; SSE2-NEXT:    pslld $31, %xmm565; SSE2-NEXT:    psrad $31, %xmm566; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]67; SSE2-NEXT:    pand %xmm5, %xmm468; SSE2-NEXT:    pandn %xmm6, %xmm569; SSE2-NEXT:    por %xmm4, %xmm570; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]71; SSE2-NEXT:    pslld $31, %xmm072; SSE2-NEXT:    psrad $31, %xmm073; SSE2-NEXT:    pand %xmm0, %xmm374; SSE2-NEXT:    pandn %xmm6, %xmm075; SSE2-NEXT:    por %xmm3, %xmm076; SSE2-NEXT:    addps %xmm1, %xmm077; SSE2-NEXT:    addps %xmm2, %xmm578; SSE2-NEXT:    movaps %xmm5, %xmm179; SSE2-NEXT:    retq80;81; SSE42-LABEL: fadd_v8f32_commute:82; SSE42:       # %bb.0:83; SSE42-NEXT:    movdqa %xmm0, %xmm584; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero85; SSE42-NEXT:    pslld $31, %xmm086; SSE42-NEXT:    movaps {{.*#+}} xmm6 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]87; SSE42-NEXT:    movaps %xmm6, %xmm788; SSE42-NEXT:    blendvps %xmm0, %xmm3, %xmm789; SSE42-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]90; SSE42-NEXT:    pslld $31, %xmm591; SSE42-NEXT:    movdqa %xmm5, %xmm092; SSE42-NEXT:    blendvps %xmm0, %xmm4, %xmm693; SSE42-NEXT:    addps %xmm1, %xmm794; SSE42-NEXT:    addps %xmm2, %xmm695; SSE42-NEXT:    movaps %xmm7, %xmm096; SSE42-NEXT:    movaps %xmm6, %xmm197; SSE42-NEXT:    retq98;99; AVX2-LABEL: fadd_v8f32_commute:100; AVX2:       # %bb.0:101; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero102; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0103; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]104; AVX2-NEXT:    vblendvps %ymm0, %ymm2, %ymm3, %ymm0105; AVX2-NEXT:    vaddps %ymm1, %ymm0, %ymm0106; AVX2-NEXT:    retq107;108; AVX512F-LABEL: fadd_v8f32_commute:109; AVX512F:       # %bb.0:110; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2111; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm0112; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm0113; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1114; AVX512F-NEXT:    vbroadcastss {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]115; AVX512F-NEXT:    vmovaps %zmm2, %zmm0 {%k1}116; AVX512F-NEXT:    vaddps %ymm1, %ymm0, %ymm0117; AVX512F-NEXT:    retq118;119; AVX512VL-LABEL: fadd_v8f32_commute:120; AVX512VL:       # %bb.0:121; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm0122; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm0123; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k1124; AVX512VL-NEXT:    vaddps %ymm2, %ymm1, %ymm1 {%k1}125; AVX512VL-NEXT:    vmovaps %ymm1, %ymm0126; AVX512VL-NEXT:    retq127  %s = select <8 x i1> %b, <8 x float> %y, <8 x float> <float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0>128  %r = fadd <8 x float> %s, %x129  ret <8 x float> %r130}131 132define <16 x float> @fadd_v16f32_swap(<16 x i1> %b, <16 x float> noundef %x, <16 x float> noundef %y) {133; SSE2-LABEL: fadd_v16f32_swap:134; SSE2:       # %bb.0:135; SSE2-NEXT:    movdqa %xmm0, %xmm10136; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]137; SSE2-NEXT:    movdqa %xmm10, %xmm8138; SSE2-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4,4,5,5,6,6,7,7]139; SSE2-NEXT:    pslld $31, %xmm8140; SSE2-NEXT:    movdqa %xmm8, %xmm9141; SSE2-NEXT:    psrad $31, %xmm9142; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm9143; SSE2-NEXT:    por %xmm8, %xmm9144; SSE2-NEXT:    punpcklwd {{.*#+}} xmm10 = xmm10[0,0,1,1,2,2,3,3]145; SSE2-NEXT:    pslld $31, %xmm10146; SSE2-NEXT:    movdqa %xmm10, %xmm8147; SSE2-NEXT:    psrad $31, %xmm8148; SSE2-NEXT:    pandn %xmm7, %xmm8149; SSE2-NEXT:    por %xmm10, %xmm8150; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]151; SSE2-NEXT:    movdqa %xmm0, %xmm10152; SSE2-NEXT:    punpckhwd {{.*#+}} xmm10 = xmm10[4,4,5,5,6,6,7,7]153; SSE2-NEXT:    pslld $31, %xmm10154; SSE2-NEXT:    movdqa %xmm10, %xmm7155; SSE2-NEXT:    psrad $31, %xmm7156; SSE2-NEXT:    pandn %xmm6, %xmm7157; SSE2-NEXT:    por %xmm10, %xmm7158; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]159; SSE2-NEXT:    pslld $31, %xmm0160; SSE2-NEXT:    movdqa %xmm0, %xmm6161; SSE2-NEXT:    psrad $31, %xmm6162; SSE2-NEXT:    pandn %xmm5, %xmm6163; SSE2-NEXT:    por %xmm6, %xmm0164; SSE2-NEXT:    addps %xmm1, %xmm0165; SSE2-NEXT:    addps %xmm2, %xmm7166; SSE2-NEXT:    addps %xmm3, %xmm8167; SSE2-NEXT:    addps %xmm4, %xmm9168; SSE2-NEXT:    movaps %xmm7, %xmm1169; SSE2-NEXT:    movaps %xmm8, %xmm2170; SSE2-NEXT:    movaps %xmm9, %xmm3171; SSE2-NEXT:    retq172;173; SSE42-LABEL: fadd_v16f32_swap:174; SSE42:       # %bb.0:175; SSE42-NEXT:    movaps %xmm3, %xmm8176; SSE42-NEXT:    movdqa %xmm0, %xmm9177; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm3178; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]179; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero180; SSE42-NEXT:    pslld $31, %xmm0181; SSE42-NEXT:    movaps {{.*#+}} xmm10 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]182; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm3183; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[2,3,2,3]184; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero185; SSE42-NEXT:    pslld $31, %xmm0186; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm7187; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[1,1,1,1]188; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero189; SSE42-NEXT:    pslld $31, %xmm0190; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm6191; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero192; SSE42-NEXT:    pslld $31, %xmm0193; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm5194; SSE42-NEXT:    addps %xmm1, %xmm5195; SSE42-NEXT:    addps %xmm2, %xmm6196; SSE42-NEXT:    addps %xmm8, %xmm7197; SSE42-NEXT:    addps %xmm4, %xmm3198; SSE42-NEXT:    movaps %xmm5, %xmm0199; SSE42-NEXT:    movaps %xmm6, %xmm1200; SSE42-NEXT:    movaps %xmm7, %xmm2201; SSE42-NEXT:    retq202;203; AVX2-LABEL: fadd_v16f32_swap:204; AVX2:       # %bb.0:205; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero206; AVX2-NEXT:    vpslld $31, %ymm5, %ymm5207; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm6 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]208; AVX2-NEXT:    vblendvps %ymm5, %ymm6, %ymm3, %ymm3209; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]210; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero211; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0212; AVX2-NEXT:    vblendvps %ymm0, %ymm6, %ymm4, %ymm4213; AVX2-NEXT:    vaddps %ymm3, %ymm1, %ymm0214; AVX2-NEXT:    vaddps %ymm4, %ymm2, %ymm1215; AVX2-NEXT:    retq216;217; AVX512-LABEL: fadd_v16f32_swap:218; AVX512:       # %bb.0:219; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0220; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0221; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k1222; AVX512-NEXT:    vaddps %zmm2, %zmm1, %zmm0223; AVX512-NEXT:    vmovaps %zmm1, %zmm0 {%k1}224; AVX512-NEXT:    retq225  %s = select <16 x i1> %b, <16 x float> <float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0>, <16 x float> %y226  %r = fadd <16 x float> %x, %s227  ret <16 x float> %r228}229 230define <16 x float> @fadd_v16f32_commute_swap(<16 x i1> %b, <16 x float> noundef %x, <16 x float> noundef %y) {231; SSE2-LABEL: fadd_v16f32_commute_swap:232; SSE2:       # %bb.0:233; SSE2-NEXT:    movdqa %xmm0, %xmm10234; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]235; SSE2-NEXT:    movdqa %xmm10, %xmm8236; SSE2-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4,4,5,5,6,6,7,7]237; SSE2-NEXT:    pslld $31, %xmm8238; SSE2-NEXT:    movdqa %xmm8, %xmm9239; SSE2-NEXT:    psrad $31, %xmm9240; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm9241; SSE2-NEXT:    por %xmm8, %xmm9242; SSE2-NEXT:    punpcklwd {{.*#+}} xmm10 = xmm10[0,0,1,1,2,2,3,3]243; SSE2-NEXT:    pslld $31, %xmm10244; SSE2-NEXT:    movdqa %xmm10, %xmm8245; SSE2-NEXT:    psrad $31, %xmm8246; SSE2-NEXT:    pandn %xmm7, %xmm8247; SSE2-NEXT:    por %xmm10, %xmm8248; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]249; SSE2-NEXT:    movdqa %xmm0, %xmm10250; SSE2-NEXT:    punpckhwd {{.*#+}} xmm10 = xmm10[4,4,5,5,6,6,7,7]251; SSE2-NEXT:    pslld $31, %xmm10252; SSE2-NEXT:    movdqa %xmm10, %xmm7253; SSE2-NEXT:    psrad $31, %xmm7254; SSE2-NEXT:    pandn %xmm6, %xmm7255; SSE2-NEXT:    por %xmm10, %xmm7256; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]257; SSE2-NEXT:    pslld $31, %xmm0258; SSE2-NEXT:    movdqa %xmm0, %xmm6259; SSE2-NEXT:    psrad $31, %xmm6260; SSE2-NEXT:    pandn %xmm5, %xmm6261; SSE2-NEXT:    por %xmm6, %xmm0262; SSE2-NEXT:    addps %xmm1, %xmm0263; SSE2-NEXT:    addps %xmm2, %xmm7264; SSE2-NEXT:    addps %xmm3, %xmm8265; SSE2-NEXT:    addps %xmm4, %xmm9266; SSE2-NEXT:    movaps %xmm7, %xmm1267; SSE2-NEXT:    movaps %xmm8, %xmm2268; SSE2-NEXT:    movaps %xmm9, %xmm3269; SSE2-NEXT:    retq270;271; SSE42-LABEL: fadd_v16f32_commute_swap:272; SSE42:       # %bb.0:273; SSE42-NEXT:    movaps %xmm3, %xmm8274; SSE42-NEXT:    movdqa %xmm0, %xmm9275; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm3276; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]277; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero278; SSE42-NEXT:    pslld $31, %xmm0279; SSE42-NEXT:    movaps {{.*#+}} xmm10 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]280; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm3281; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[2,3,2,3]282; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero283; SSE42-NEXT:    pslld $31, %xmm0284; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm7285; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[1,1,1,1]286; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero287; SSE42-NEXT:    pslld $31, %xmm0288; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm6289; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero290; SSE42-NEXT:    pslld $31, %xmm0291; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm5292; SSE42-NEXT:    addps %xmm1, %xmm5293; SSE42-NEXT:    addps %xmm2, %xmm6294; SSE42-NEXT:    addps %xmm8, %xmm7295; SSE42-NEXT:    addps %xmm4, %xmm3296; SSE42-NEXT:    movaps %xmm5, %xmm0297; SSE42-NEXT:    movaps %xmm6, %xmm1298; SSE42-NEXT:    movaps %xmm7, %xmm2299; SSE42-NEXT:    retq300;301; AVX2-LABEL: fadd_v16f32_commute_swap:302; AVX2:       # %bb.0:303; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero304; AVX2-NEXT:    vpslld $31, %ymm5, %ymm5305; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm6 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]306; AVX2-NEXT:    vblendvps %ymm5, %ymm6, %ymm3, %ymm3307; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]308; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero309; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0310; AVX2-NEXT:    vblendvps %ymm0, %ymm6, %ymm4, %ymm4311; AVX2-NEXT:    vaddps %ymm1, %ymm3, %ymm0312; AVX2-NEXT:    vaddps %ymm2, %ymm4, %ymm1313; AVX2-NEXT:    retq314;315; AVX512-LABEL: fadd_v16f32_commute_swap:316; AVX512:       # %bb.0:317; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0318; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0319; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k1320; AVX512-NEXT:    vaddps %zmm2, %zmm1, %zmm0321; AVX512-NEXT:    vmovaps %zmm1, %zmm0 {%k1}322; AVX512-NEXT:    retq323  %s = select <16 x i1> %b, <16 x float> <float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0>, <16 x float> %y324  %r = fadd <16 x float> %s, %x325  ret <16 x float> %r326}327 328define <4 x float> @fsub_v4f32(<4 x i1> %b, <4 x float> noundef %x, <4 x float> noundef %y) {329; SSE-LABEL: fsub_v4f32:330; SSE:       # %bb.0:331; SSE-NEXT:    pslld $31, %xmm0332; SSE-NEXT:    psrad $31, %xmm0333; SSE-NEXT:    pand %xmm2, %xmm0334; SSE-NEXT:    subps %xmm0, %xmm1335; SSE-NEXT:    movaps %xmm1, %xmm0336; SSE-NEXT:    retq337;338; AVX2-LABEL: fsub_v4f32:339; AVX2:       # %bb.0:340; AVX2-NEXT:    vpslld $31, %xmm0, %xmm0341; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm0342; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0343; AVX2-NEXT:    vsubps %xmm0, %xmm1, %xmm0344; AVX2-NEXT:    retq345;346; AVX512F-LABEL: fsub_v4f32:347; AVX512F:       # %bb.0:348; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2349; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm0350; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1351; AVX512F-NEXT:    vmovaps %zmm2, %zmm0 {%k1} {z}352; AVX512F-NEXT:    vsubps %xmm0, %xmm1, %xmm0353; AVX512F-NEXT:    vzeroupper354; AVX512F-NEXT:    retq355;356; AVX512VL-LABEL: fsub_v4f32:357; AVX512VL:       # %bb.0:358; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm0359; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k1360; AVX512VL-NEXT:    vsubps %xmm2, %xmm1, %xmm1 {%k1}361; AVX512VL-NEXT:    vmovaps %xmm1, %xmm0362; AVX512VL-NEXT:    retq363  %s = select <4 x i1> %b, <4 x float> %y, <4 x float> zeroinitializer364  %r = fsub <4 x float> %x, %s365  ret <4 x float> %r366}367 368; negative test - fsub is not commutative; there is no identity constant for operand 0369 370define <8 x float> @fsub_v8f32_commute(<8 x i1> %b, <8 x float> noundef %x, <8 x float> noundef %y) {371; SSE2-LABEL: fsub_v8f32_commute:372; SSE2:       # %bb.0:373; SSE2-NEXT:    movdqa %xmm0, %xmm5374; SSE2-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]375; SSE2-NEXT:    pslld $31, %xmm5376; SSE2-NEXT:    psrad $31, %xmm5377; SSE2-NEXT:    pand %xmm4, %xmm5378; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]379; SSE2-NEXT:    pslld $31, %xmm0380; SSE2-NEXT:    psrad $31, %xmm0381; SSE2-NEXT:    pand %xmm3, %xmm0382; SSE2-NEXT:    subps %xmm1, %xmm0383; SSE2-NEXT:    subps %xmm2, %xmm5384; SSE2-NEXT:    movaps %xmm5, %xmm1385; SSE2-NEXT:    retq386;387; SSE42-LABEL: fsub_v8f32_commute:388; SSE42:       # %bb.0:389; SSE42-NEXT:    movdqa %xmm0, %xmm5390; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero391; SSE42-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]392; SSE42-NEXT:    pslld $31, %xmm5393; SSE42-NEXT:    psrad $31, %xmm5394; SSE42-NEXT:    pand %xmm4, %xmm5395; SSE42-NEXT:    pslld $31, %xmm0396; SSE42-NEXT:    psrad $31, %xmm0397; SSE42-NEXT:    pand %xmm3, %xmm0398; SSE42-NEXT:    subps %xmm1, %xmm0399; SSE42-NEXT:    subps %xmm2, %xmm5400; SSE42-NEXT:    movaps %xmm5, %xmm1401; SSE42-NEXT:    retq402;403; AVX2-LABEL: fsub_v8f32_commute:404; AVX2:       # %bb.0:405; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero406; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0407; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm0408; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0409; AVX2-NEXT:    vsubps %ymm1, %ymm0, %ymm0410; AVX2-NEXT:    retq411;412; AVX512F-LABEL: fsub_v8f32_commute:413; AVX512F:       # %bb.0:414; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2415; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm0416; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm0417; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1418; AVX512F-NEXT:    vmovaps %zmm2, %zmm0 {%k1} {z}419; AVX512F-NEXT:    vsubps %ymm1, %ymm0, %ymm0420; AVX512F-NEXT:    retq421;422; AVX512VL-LABEL: fsub_v8f32_commute:423; AVX512VL:       # %bb.0:424; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm0425; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm0426; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k1427; AVX512VL-NEXT:    vmovaps %ymm2, %ymm0 {%k1} {z}428; AVX512VL-NEXT:    vsubps %ymm1, %ymm0, %ymm0429; AVX512VL-NEXT:    retq430  %s = select <8 x i1> %b, <8 x float> %y, <8 x float> zeroinitializer431  %r = fsub <8 x float> %s, %x432  ret <8 x float> %r433}434 435define <16 x float> @fsub_v16f32_swap(<16 x i1> %b, <16 x float> noundef %x, <16 x float> noundef %y) {436; SSE2-LABEL: fsub_v16f32_swap:437; SSE2:       # %bb.0:438; SSE2-NEXT:    movdqa %xmm0, %xmm9439; SSE2-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]440; SSE2-NEXT:    movdqa %xmm9, %xmm8441; SSE2-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4,4,5,5,6,6,7,7]442; SSE2-NEXT:    pslld $31, %xmm8443; SSE2-NEXT:    psrad $31, %xmm8444; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm8445; SSE2-NEXT:    punpcklwd {{.*#+}} xmm9 = xmm9[0,0,1,1,2,2,3,3]446; SSE2-NEXT:    pslld $31, %xmm9447; SSE2-NEXT:    psrad $31, %xmm9448; SSE2-NEXT:    pandn %xmm7, %xmm9449; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]450; SSE2-NEXT:    movdqa %xmm0, %xmm7451; SSE2-NEXT:    punpckhwd {{.*#+}} xmm7 = xmm7[4,4,5,5,6,6,7,7]452; SSE2-NEXT:    pslld $31, %xmm7453; SSE2-NEXT:    psrad $31, %xmm7454; SSE2-NEXT:    pandn %xmm6, %xmm7455; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]456; SSE2-NEXT:    pslld $31, %xmm0457; SSE2-NEXT:    psrad $31, %xmm0458; SSE2-NEXT:    pandn %xmm5, %xmm0459; SSE2-NEXT:    subps %xmm0, %xmm1460; SSE2-NEXT:    subps %xmm7, %xmm2461; SSE2-NEXT:    subps %xmm9, %xmm3462; SSE2-NEXT:    subps %xmm8, %xmm4463; SSE2-NEXT:    movaps %xmm1, %xmm0464; SSE2-NEXT:    movaps %xmm2, %xmm1465; SSE2-NEXT:    movaps %xmm3, %xmm2466; SSE2-NEXT:    movaps %xmm4, %xmm3467; SSE2-NEXT:    retq468;469; SSE42-LABEL: fsub_v16f32_swap:470; SSE42:       # %bb.0:471; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[3,3,3,3]472; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm8 = xmm8[0],zero,zero,zero,xmm8[1],zero,zero,zero,xmm8[2],zero,zero,zero,xmm8[3],zero,zero,zero473; SSE42-NEXT:    pslld $31, %xmm8474; SSE42-NEXT:    psrad $31, %xmm8475; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm8476; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[2,3,2,3]477; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm9 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero478; SSE42-NEXT:    pslld $31, %xmm9479; SSE42-NEXT:    psrad $31, %xmm9480; SSE42-NEXT:    pandn %xmm7, %xmm9481; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,1,1]482; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero483; SSE42-NEXT:    pslld $31, %xmm7484; SSE42-NEXT:    psrad $31, %xmm7485; SSE42-NEXT:    pandn %xmm6, %xmm7486; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero487; SSE42-NEXT:    pslld $31, %xmm0488; SSE42-NEXT:    psrad $31, %xmm0489; SSE42-NEXT:    pandn %xmm5, %xmm0490; SSE42-NEXT:    subps %xmm0, %xmm1491; SSE42-NEXT:    subps %xmm7, %xmm2492; SSE42-NEXT:    subps %xmm9, %xmm3493; SSE42-NEXT:    subps %xmm8, %xmm4494; SSE42-NEXT:    movaps %xmm1, %xmm0495; SSE42-NEXT:    movaps %xmm2, %xmm1496; SSE42-NEXT:    movaps %xmm3, %xmm2497; SSE42-NEXT:    movaps %xmm4, %xmm3498; SSE42-NEXT:    retq499;500; AVX2-LABEL: fsub_v16f32_swap:501; AVX2:       # %bb.0:502; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]503; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero504; AVX2-NEXT:    vpslld $31, %ymm5, %ymm5505; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm5506; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm4507; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero508; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0509; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm0510; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm0511; AVX2-NEXT:    vsubps %ymm0, %ymm1, %ymm0512; AVX2-NEXT:    vsubps %ymm4, %ymm2, %ymm1513; AVX2-NEXT:    retq514;515; AVX512-LABEL: fsub_v16f32_swap:516; AVX512:       # %bb.0:517; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0518; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0519; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k1520; AVX512-NEXT:    vsubps %zmm2, %zmm1, %zmm0521; AVX512-NEXT:    vmovaps %zmm1, %zmm0 {%k1}522; AVX512-NEXT:    retq523  %s = select <16 x i1> %b, <16 x float> zeroinitializer, <16 x float> %y524  %r = fsub <16 x float> %x, %s525  ret <16 x float> %r526}527 528; negative test - fsub is not commutative; there is no identity constant for operand 0529 530define <16 x float> @fsub_v16f32_commute_swap(<16 x i1> %b, <16 x float> noundef %x, <16 x float> noundef %y) {531; SSE2-LABEL: fsub_v16f32_commute_swap:532; SSE2:       # %bb.0:533; SSE2-NEXT:    movaps %xmm2, %xmm8534; SSE2-NEXT:    movdqa %xmm0, %xmm2535; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]536; SSE2-NEXT:    movdqa %xmm2, %xmm9537; SSE2-NEXT:    punpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]538; SSE2-NEXT:    pslld $31, %xmm9539; SSE2-NEXT:    psrad $31, %xmm9540; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm9541; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]542; SSE2-NEXT:    pslld $31, %xmm2543; SSE2-NEXT:    psrad $31, %xmm2544; SSE2-NEXT:    pandn %xmm7, %xmm2545; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]546; SSE2-NEXT:    movdqa %xmm0, %xmm7547; SSE2-NEXT:    punpckhwd {{.*#+}} xmm7 = xmm7[4,4,5,5,6,6,7,7]548; SSE2-NEXT:    pslld $31, %xmm7549; SSE2-NEXT:    psrad $31, %xmm7550; SSE2-NEXT:    pandn %xmm6, %xmm7551; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]552; SSE2-NEXT:    pslld $31, %xmm0553; SSE2-NEXT:    psrad $31, %xmm0554; SSE2-NEXT:    pandn %xmm5, %xmm0555; SSE2-NEXT:    subps %xmm1, %xmm0556; SSE2-NEXT:    subps %xmm8, %xmm7557; SSE2-NEXT:    subps %xmm3, %xmm2558; SSE2-NEXT:    subps %xmm4, %xmm9559; SSE2-NEXT:    movaps %xmm7, %xmm1560; SSE2-NEXT:    movaps %xmm9, %xmm3561; SSE2-NEXT:    retq562;563; SSE42-LABEL: fsub_v16f32_commute_swap:564; SSE42:       # %bb.0:565; SSE42-NEXT:    movaps %xmm3, %xmm8566; SSE42-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[3,3,3,3]567; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero568; SSE42-NEXT:    pslld $31, %xmm3569; SSE42-NEXT:    psrad $31, %xmm3570; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm3571; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[2,3,2,3]572; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm9 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero573; SSE42-NEXT:    pslld $31, %xmm9574; SSE42-NEXT:    psrad $31, %xmm9575; SSE42-NEXT:    pandn %xmm7, %xmm9576; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,1,1]577; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero578; SSE42-NEXT:    pslld $31, %xmm7579; SSE42-NEXT:    psrad $31, %xmm7580; SSE42-NEXT:    pandn %xmm6, %xmm7581; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero582; SSE42-NEXT:    pslld $31, %xmm0583; SSE42-NEXT:    psrad $31, %xmm0584; SSE42-NEXT:    pandn %xmm5, %xmm0585; SSE42-NEXT:    subps %xmm1, %xmm0586; SSE42-NEXT:    subps %xmm2, %xmm7587; SSE42-NEXT:    subps %xmm8, %xmm9588; SSE42-NEXT:    subps %xmm4, %xmm3589; SSE42-NEXT:    movaps %xmm7, %xmm1590; SSE42-NEXT:    movaps %xmm9, %xmm2591; SSE42-NEXT:    retq592;593; AVX2-LABEL: fsub_v16f32_commute_swap:594; AVX2:       # %bb.0:595; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]596; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero597; AVX2-NEXT:    vpslld $31, %ymm5, %ymm5598; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm5599; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm4600; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero601; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0602; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm0603; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm0604; AVX2-NEXT:    vsubps %ymm1, %ymm0, %ymm0605; AVX2-NEXT:    vsubps %ymm2, %ymm4, %ymm1606; AVX2-NEXT:    retq607;608; AVX512-LABEL: fsub_v16f32_commute_swap:609; AVX512:       # %bb.0:610; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0611; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0612; AVX512-NEXT:    vptestnmd %zmm0, %zmm0, %k1613; AVX512-NEXT:    vmovaps %zmm2, %zmm0 {%k1} {z}614; AVX512-NEXT:    vsubps %zmm1, %zmm0, %zmm0615; AVX512-NEXT:    retq616  %s = select <16 x i1> %b, <16 x float> zeroinitializer, <16 x float> %y617  %r = fsub <16 x float> %s, %x618  ret <16 x float> %r619}620 621define <4 x float> @fmul_v4f32(<4 x i1> %b, <4 x float> noundef %x, <4 x float> noundef %y) {622; SSE2-LABEL: fmul_v4f32:623; SSE2:       # %bb.0:624; SSE2-NEXT:    pslld $31, %xmm0625; SSE2-NEXT:    psrad $31, %xmm0626; SSE2-NEXT:    pand %xmm0, %xmm2627; SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0628; SSE2-NEXT:    por %xmm2, %xmm0629; SSE2-NEXT:    mulps %xmm1, %xmm0630; SSE2-NEXT:    retq631;632; SSE42-LABEL: fmul_v4f32:633; SSE42:       # %bb.0:634; SSE42-NEXT:    pslld $31, %xmm0635; SSE42-NEXT:    movaps {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]636; SSE42-NEXT:    blendvps %xmm0, %xmm2, %xmm3637; SSE42-NEXT:    mulps %xmm1, %xmm3638; SSE42-NEXT:    movaps %xmm3, %xmm0639; SSE42-NEXT:    retq640;641; AVX2-LABEL: fmul_v4f32:642; AVX2:       # %bb.0:643; AVX2-NEXT:    vpslld $31, %xmm0, %xmm0644; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]645; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm3, %xmm0646; AVX2-NEXT:    vmulps %xmm0, %xmm1, %xmm0647; AVX2-NEXT:    retq648;649; AVX512F-LABEL: fmul_v4f32:650; AVX512F:       # %bb.0:651; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2652; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm0653; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1654; AVX512F-NEXT:    vbroadcastss {{.*#+}} xmm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]655; AVX512F-NEXT:    vmovaps %zmm2, %zmm0 {%k1}656; AVX512F-NEXT:    vmulps %xmm0, %xmm1, %xmm0657; AVX512F-NEXT:    vzeroupper658; AVX512F-NEXT:    retq659;660; AVX512VL-LABEL: fmul_v4f32:661; AVX512VL:       # %bb.0:662; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm0663; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k1664; AVX512VL-NEXT:    vmulps %xmm2, %xmm1, %xmm1 {%k1}665; AVX512VL-NEXT:    vmovaps %xmm1, %xmm0666; AVX512VL-NEXT:    retq667  %s = select <4 x i1> %b, <4 x float> %y, <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>668  %r = fmul <4 x float> %x, %s669  ret <4 x float> %r670}671 672define <8 x float> @fmul_v8f32_commute(<8 x i1> %b, <8 x float> noundef %x, <8 x float> noundef %y) {673; SSE2-LABEL: fmul_v8f32_commute:674; SSE2:       # %bb.0:675; SSE2-NEXT:    movdqa %xmm0, %xmm5676; SSE2-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]677; SSE2-NEXT:    pslld $31, %xmm5678; SSE2-NEXT:    psrad $31, %xmm5679; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]680; SSE2-NEXT:    pand %xmm5, %xmm4681; SSE2-NEXT:    pandn %xmm6, %xmm5682; SSE2-NEXT:    por %xmm4, %xmm5683; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]684; SSE2-NEXT:    pslld $31, %xmm0685; SSE2-NEXT:    psrad $31, %xmm0686; SSE2-NEXT:    pand %xmm0, %xmm3687; SSE2-NEXT:    pandn %xmm6, %xmm0688; SSE2-NEXT:    por %xmm3, %xmm0689; SSE2-NEXT:    mulps %xmm1, %xmm0690; SSE2-NEXT:    mulps %xmm2, %xmm5691; SSE2-NEXT:    movaps %xmm5, %xmm1692; SSE2-NEXT:    retq693;694; SSE42-LABEL: fmul_v8f32_commute:695; SSE42:       # %bb.0:696; SSE42-NEXT:    movdqa %xmm0, %xmm5697; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero698; SSE42-NEXT:    pslld $31, %xmm0699; SSE42-NEXT:    movaps {{.*#+}} xmm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]700; SSE42-NEXT:    movaps %xmm6, %xmm7701; SSE42-NEXT:    blendvps %xmm0, %xmm3, %xmm7702; SSE42-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]703; SSE42-NEXT:    pslld $31, %xmm5704; SSE42-NEXT:    movdqa %xmm5, %xmm0705; SSE42-NEXT:    blendvps %xmm0, %xmm4, %xmm6706; SSE42-NEXT:    mulps %xmm1, %xmm7707; SSE42-NEXT:    mulps %xmm2, %xmm6708; SSE42-NEXT:    movaps %xmm7, %xmm0709; SSE42-NEXT:    movaps %xmm6, %xmm1710; SSE42-NEXT:    retq711;712; AVX2-LABEL: fmul_v8f32_commute:713; AVX2:       # %bb.0:714; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero715; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0716; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]717; AVX2-NEXT:    vblendvps %ymm0, %ymm2, %ymm3, %ymm0718; AVX2-NEXT:    vmulps %ymm1, %ymm0, %ymm0719; AVX2-NEXT:    retq720;721; AVX512F-LABEL: fmul_v8f32_commute:722; AVX512F:       # %bb.0:723; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2724; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm0725; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm0726; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1727; AVX512F-NEXT:    vbroadcastss {{.*#+}} ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]728; AVX512F-NEXT:    vmovaps %zmm2, %zmm0 {%k1}729; AVX512F-NEXT:    vmulps %ymm1, %ymm0, %ymm0730; AVX512F-NEXT:    retq731;732; AVX512VL-LABEL: fmul_v8f32_commute:733; AVX512VL:       # %bb.0:734; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm0735; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm0736; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k1737; AVX512VL-NEXT:    vmulps %ymm2, %ymm1, %ymm1 {%k1}738; AVX512VL-NEXT:    vmovaps %ymm1, %ymm0739; AVX512VL-NEXT:    retq740  %s = select <8 x i1> %b, <8 x float> %y, <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>741  %r = fmul <8 x float> %s, %x742  ret <8 x float> %r743}744 745define <16 x float> @fmul_v16f32_swap(<16 x i1> %b, <16 x float> noundef %x, <16 x float> noundef %y) {746; SSE2-LABEL: fmul_v16f32_swap:747; SSE2:       # %bb.0:748; SSE2-NEXT:    movaps %xmm2, %xmm8749; SSE2-NEXT:    movdqa %xmm0, %xmm2750; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]751; SSE2-NEXT:    movdqa %xmm2, %xmm10752; SSE2-NEXT:    punpckhwd {{.*#+}} xmm10 = xmm10[4,4,5,5,6,6,7,7]753; SSE2-NEXT:    pslld $31, %xmm10754; SSE2-NEXT:    psrad $31, %xmm10755; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]756; SSE2-NEXT:    movdqa %xmm11, %xmm9757; SSE2-NEXT:    pand %xmm10, %xmm9758; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm10759; SSE2-NEXT:    por %xmm9, %xmm10760; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]761; SSE2-NEXT:    pslld $31, %xmm2762; SSE2-NEXT:    psrad $31, %xmm2763; SSE2-NEXT:    movdqa %xmm11, %xmm9764; SSE2-NEXT:    pand %xmm2, %xmm9765; SSE2-NEXT:    pandn %xmm7, %xmm2766; SSE2-NEXT:    por %xmm9, %xmm2767; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]768; SSE2-NEXT:    movdqa %xmm0, %xmm9769; SSE2-NEXT:    punpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]770; SSE2-NEXT:    pslld $31, %xmm9771; SSE2-NEXT:    psrad $31, %xmm9772; SSE2-NEXT:    movdqa %xmm11, %xmm7773; SSE2-NEXT:    pand %xmm9, %xmm7774; SSE2-NEXT:    pandn %xmm6, %xmm9775; SSE2-NEXT:    por %xmm7, %xmm9776; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]777; SSE2-NEXT:    pslld $31, %xmm0778; SSE2-NEXT:    psrad $31, %xmm0779; SSE2-NEXT:    pand %xmm0, %xmm11780; SSE2-NEXT:    pandn %xmm5, %xmm0781; SSE2-NEXT:    por %xmm11, %xmm0782; SSE2-NEXT:    mulps %xmm1, %xmm0783; SSE2-NEXT:    mulps %xmm8, %xmm9784; SSE2-NEXT:    mulps %xmm3, %xmm2785; SSE2-NEXT:    mulps %xmm4, %xmm10786; SSE2-NEXT:    movaps %xmm9, %xmm1787; SSE2-NEXT:    movaps %xmm10, %xmm3788; SSE2-NEXT:    retq789;790; SSE42-LABEL: fmul_v16f32_swap:791; SSE42:       # %bb.0:792; SSE42-NEXT:    movaps %xmm3, %xmm8793; SSE42-NEXT:    movdqa %xmm0, %xmm9794; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm3795; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]796; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero797; SSE42-NEXT:    pslld $31, %xmm0798; SSE42-NEXT:    movaps {{.*#+}} xmm10 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]799; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm3800; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[2,3,2,3]801; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero802; SSE42-NEXT:    pslld $31, %xmm0803; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm7804; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[1,1,1,1]805; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero806; SSE42-NEXT:    pslld $31, %xmm0807; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm6808; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero809; SSE42-NEXT:    pslld $31, %xmm0810; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm5811; SSE42-NEXT:    mulps %xmm1, %xmm5812; SSE42-NEXT:    mulps %xmm2, %xmm6813; SSE42-NEXT:    mulps %xmm8, %xmm7814; SSE42-NEXT:    mulps %xmm4, %xmm3815; SSE42-NEXT:    movaps %xmm5, %xmm0816; SSE42-NEXT:    movaps %xmm6, %xmm1817; SSE42-NEXT:    movaps %xmm7, %xmm2818; SSE42-NEXT:    retq819;820; AVX2-LABEL: fmul_v16f32_swap:821; AVX2:       # %bb.0:822; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero823; AVX2-NEXT:    vpslld $31, %ymm5, %ymm5824; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]825; AVX2-NEXT:    vblendvps %ymm5, %ymm6, %ymm3, %ymm3826; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]827; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero828; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0829; AVX2-NEXT:    vblendvps %ymm0, %ymm6, %ymm4, %ymm4830; AVX2-NEXT:    vmulps %ymm3, %ymm1, %ymm0831; AVX2-NEXT:    vmulps %ymm4, %ymm2, %ymm1832; AVX2-NEXT:    retq833;834; AVX512-LABEL: fmul_v16f32_swap:835; AVX512:       # %bb.0:836; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0837; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0838; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k1839; AVX512-NEXT:    vmulps %zmm2, %zmm1, %zmm0840; AVX512-NEXT:    vmovaps %zmm1, %zmm0 {%k1}841; AVX512-NEXT:    retq842  %s = select <16 x i1> %b, <16 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, <16 x float> %y843  %r = fmul <16 x float> %x, %s844  ret <16 x float> %r845}846 847define <16 x float> @fmul_v16f32_commute_swap(<16 x i1> %b, <16 x float> noundef %x, <16 x float> noundef %y) {848; SSE2-LABEL: fmul_v16f32_commute_swap:849; SSE2:       # %bb.0:850; SSE2-NEXT:    movaps %xmm2, %xmm8851; SSE2-NEXT:    movdqa %xmm0, %xmm2852; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]853; SSE2-NEXT:    movdqa %xmm2, %xmm10854; SSE2-NEXT:    punpckhwd {{.*#+}} xmm10 = xmm10[4,4,5,5,6,6,7,7]855; SSE2-NEXT:    pslld $31, %xmm10856; SSE2-NEXT:    psrad $31, %xmm10857; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]858; SSE2-NEXT:    movdqa %xmm11, %xmm9859; SSE2-NEXT:    pand %xmm10, %xmm9860; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm10861; SSE2-NEXT:    por %xmm9, %xmm10862; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]863; SSE2-NEXT:    pslld $31, %xmm2864; SSE2-NEXT:    psrad $31, %xmm2865; SSE2-NEXT:    movdqa %xmm11, %xmm9866; SSE2-NEXT:    pand %xmm2, %xmm9867; SSE2-NEXT:    pandn %xmm7, %xmm2868; SSE2-NEXT:    por %xmm9, %xmm2869; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]870; SSE2-NEXT:    movdqa %xmm0, %xmm9871; SSE2-NEXT:    punpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]872; SSE2-NEXT:    pslld $31, %xmm9873; SSE2-NEXT:    psrad $31, %xmm9874; SSE2-NEXT:    movdqa %xmm11, %xmm7875; SSE2-NEXT:    pand %xmm9, %xmm7876; SSE2-NEXT:    pandn %xmm6, %xmm9877; SSE2-NEXT:    por %xmm7, %xmm9878; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]879; SSE2-NEXT:    pslld $31, %xmm0880; SSE2-NEXT:    psrad $31, %xmm0881; SSE2-NEXT:    pand %xmm0, %xmm11882; SSE2-NEXT:    pandn %xmm5, %xmm0883; SSE2-NEXT:    por %xmm11, %xmm0884; SSE2-NEXT:    mulps %xmm1, %xmm0885; SSE2-NEXT:    mulps %xmm8, %xmm9886; SSE2-NEXT:    mulps %xmm3, %xmm2887; SSE2-NEXT:    mulps %xmm4, %xmm10888; SSE2-NEXT:    movaps %xmm9, %xmm1889; SSE2-NEXT:    movaps %xmm10, %xmm3890; SSE2-NEXT:    retq891;892; SSE42-LABEL: fmul_v16f32_commute_swap:893; SSE42:       # %bb.0:894; SSE42-NEXT:    movaps %xmm3, %xmm8895; SSE42-NEXT:    movdqa %xmm0, %xmm9896; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm3897; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]898; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero899; SSE42-NEXT:    pslld $31, %xmm0900; SSE42-NEXT:    movaps {{.*#+}} xmm10 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]901; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm3902; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[2,3,2,3]903; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero904; SSE42-NEXT:    pslld $31, %xmm0905; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm7906; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[1,1,1,1]907; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero908; SSE42-NEXT:    pslld $31, %xmm0909; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm6910; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero911; SSE42-NEXT:    pslld $31, %xmm0912; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm5913; SSE42-NEXT:    mulps %xmm1, %xmm5914; SSE42-NEXT:    mulps %xmm2, %xmm6915; SSE42-NEXT:    mulps %xmm8, %xmm7916; SSE42-NEXT:    mulps %xmm4, %xmm3917; SSE42-NEXT:    movaps %xmm5, %xmm0918; SSE42-NEXT:    movaps %xmm6, %xmm1919; SSE42-NEXT:    movaps %xmm7, %xmm2920; SSE42-NEXT:    retq921;922; AVX2-LABEL: fmul_v16f32_commute_swap:923; AVX2:       # %bb.0:924; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero925; AVX2-NEXT:    vpslld $31, %ymm5, %ymm5926; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]927; AVX2-NEXT:    vblendvps %ymm5, %ymm6, %ymm3, %ymm3928; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]929; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero930; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0931; AVX2-NEXT:    vblendvps %ymm0, %ymm6, %ymm4, %ymm4932; AVX2-NEXT:    vmulps %ymm1, %ymm3, %ymm0933; AVX2-NEXT:    vmulps %ymm2, %ymm4, %ymm1934; AVX2-NEXT:    retq935;936; AVX512-LABEL: fmul_v16f32_commute_swap:937; AVX512:       # %bb.0:938; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0939; AVX512-NEXT:    vpslld $31, %zmm0, %zmm0940; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k1941; AVX512-NEXT:    vmulps %zmm2, %zmm1, %zmm0942; AVX512-NEXT:    vmovaps %zmm1, %zmm0 {%k1}943; AVX512-NEXT:    retq944  %s = select <16 x i1> %b, <16 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, <16 x float> %y945  %r = fmul <16 x float> %s, %x946  ret <16 x float> %r947}948 949define <4 x float> @fdiv_v4f32(<4 x i1> %b, <4 x float> noundef %x, <4 x float> noundef %y) {950; SSE2-LABEL: fdiv_v4f32:951; SSE2:       # %bb.0:952; SSE2-NEXT:    pslld $31, %xmm0953; SSE2-NEXT:    psrad $31, %xmm0954; SSE2-NEXT:    pand %xmm0, %xmm2955; SSE2-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0956; SSE2-NEXT:    por %xmm2, %xmm0957; SSE2-NEXT:    divps %xmm0, %xmm1958; SSE2-NEXT:    movaps %xmm1, %xmm0959; SSE2-NEXT:    retq960;961; SSE42-LABEL: fdiv_v4f32:962; SSE42:       # %bb.0:963; SSE42-NEXT:    pslld $31, %xmm0964; SSE42-NEXT:    movaps {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]965; SSE42-NEXT:    blendvps %xmm0, %xmm2, %xmm3966; SSE42-NEXT:    divps %xmm3, %xmm1967; SSE42-NEXT:    movaps %xmm1, %xmm0968; SSE42-NEXT:    retq969;970; AVX2-LABEL: fdiv_v4f32:971; AVX2:       # %bb.0:972; AVX2-NEXT:    vpslld $31, %xmm0, %xmm0973; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]974; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm3, %xmm0975; AVX2-NEXT:    vdivps %xmm0, %xmm1, %xmm0976; AVX2-NEXT:    retq977;978; AVX512F-LABEL: fdiv_v4f32:979; AVX512F:       # %bb.0:980; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2981; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm0982; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1983; AVX512F-NEXT:    vbroadcastss {{.*#+}} xmm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]984; AVX512F-NEXT:    vmovaps %zmm2, %zmm0 {%k1}985; AVX512F-NEXT:    vdivps %xmm0, %xmm1, %xmm0986; AVX512F-NEXT:    vzeroupper987; AVX512F-NEXT:    retq988;989; AVX512VL-LABEL: fdiv_v4f32:990; AVX512VL:       # %bb.0:991; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm0992; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k1993; AVX512VL-NEXT:    vdivps %xmm2, %xmm1, %xmm1 {%k1}994; AVX512VL-NEXT:    vmovaps %xmm1, %xmm0995; AVX512VL-NEXT:    retq996  %s = select <4 x i1> %b, <4 x float> %y, <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>997  %r = fdiv <4 x float> %x, %s998  ret <4 x float> %r999}1000 1001define <8 x float> @fdiv_v8f32_commute(<8 x i1> %b, <8 x float> noundef %x, <8 x float> noundef %y) {1002; SSE2-LABEL: fdiv_v8f32_commute:1003; SSE2:       # %bb.0:1004; SSE2-NEXT:    movdqa %xmm0, %xmm51005; SSE2-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]1006; SSE2-NEXT:    pslld $31, %xmm51007; SSE2-NEXT:    psrad $31, %xmm51008; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1009; SSE2-NEXT:    pand %xmm5, %xmm41010; SSE2-NEXT:    pandn %xmm6, %xmm51011; SSE2-NEXT:    por %xmm4, %xmm51012; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1013; SSE2-NEXT:    pslld $31, %xmm01014; SSE2-NEXT:    psrad $31, %xmm01015; SSE2-NEXT:    pand %xmm0, %xmm31016; SSE2-NEXT:    pandn %xmm6, %xmm01017; SSE2-NEXT:    por %xmm3, %xmm01018; SSE2-NEXT:    divps %xmm1, %xmm01019; SSE2-NEXT:    divps %xmm2, %xmm51020; SSE2-NEXT:    movaps %xmm5, %xmm11021; SSE2-NEXT:    retq1022;1023; SSE42-LABEL: fdiv_v8f32_commute:1024; SSE42:       # %bb.0:1025; SSE42-NEXT:    movdqa %xmm0, %xmm51026; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1027; SSE42-NEXT:    pslld $31, %xmm01028; SSE42-NEXT:    movaps {{.*#+}} xmm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1029; SSE42-NEXT:    movaps %xmm6, %xmm71030; SSE42-NEXT:    blendvps %xmm0, %xmm3, %xmm71031; SSE42-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]1032; SSE42-NEXT:    pslld $31, %xmm51033; SSE42-NEXT:    movdqa %xmm5, %xmm01034; SSE42-NEXT:    blendvps %xmm0, %xmm4, %xmm61035; SSE42-NEXT:    divps %xmm1, %xmm71036; SSE42-NEXT:    divps %xmm2, %xmm61037; SSE42-NEXT:    movaps %xmm7, %xmm01038; SSE42-NEXT:    movaps %xmm6, %xmm11039; SSE42-NEXT:    retq1040;1041; AVX2-LABEL: fdiv_v8f32_commute:1042; AVX2:       # %bb.0:1043; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1044; AVX2-NEXT:    vpslld $31, %ymm0, %ymm01045; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1046; AVX2-NEXT:    vblendvps %ymm0, %ymm2, %ymm3, %ymm01047; AVX2-NEXT:    vdivps %ymm1, %ymm0, %ymm01048; AVX2-NEXT:    retq1049;1050; AVX512F-LABEL: fdiv_v8f32_commute:1051; AVX512F:       # %bb.0:1052; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm21053; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm01054; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm01055; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k11056; AVX512F-NEXT:    vbroadcastss {{.*#+}} ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1057; AVX512F-NEXT:    vmovaps %zmm2, %zmm0 {%k1}1058; AVX512F-NEXT:    vdivps %ymm1, %ymm0, %ymm01059; AVX512F-NEXT:    retq1060;1061; AVX512VL-LABEL: fdiv_v8f32_commute:1062; AVX512VL:       # %bb.0:1063; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm01064; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm01065; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k11066; AVX512VL-NEXT:    vbroadcastss {{.*#+}} ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1067; AVX512VL-NEXT:    vmovaps %ymm2, %ymm0 {%k1}1068; AVX512VL-NEXT:    vdivps %ymm1, %ymm0, %ymm01069; AVX512VL-NEXT:    retq1070  %s = select <8 x i1> %b, <8 x float> %y, <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>1071  %r = fdiv <8 x float> %s, %x1072  ret <8 x float> %r1073}1074 1075define <16 x float> @fdiv_v16f32_swap(<16 x i1> %b, <16 x float> noundef %x, <16 x float> noundef %y) {1076; SSE2-LABEL: fdiv_v16f32_swap:1077; SSE2:       # %bb.0:1078; SSE2-NEXT:    movdqa %xmm0, %xmm91079; SSE2-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1080; SSE2-NEXT:    movdqa %xmm9, %xmm81081; SSE2-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4,4,5,5,6,6,7,7]1082; SSE2-NEXT:    pslld $31, %xmm81083; SSE2-NEXT:    psrad $31, %xmm81084; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1085; SSE2-NEXT:    movdqa %xmm10, %xmm111086; SSE2-NEXT:    pand %xmm8, %xmm111087; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm81088; SSE2-NEXT:    por %xmm11, %xmm81089; SSE2-NEXT:    punpcklwd {{.*#+}} xmm9 = xmm9[0,0,1,1,2,2,3,3]1090; SSE2-NEXT:    pslld $31, %xmm91091; SSE2-NEXT:    psrad $31, %xmm91092; SSE2-NEXT:    movdqa %xmm10, %xmm111093; SSE2-NEXT:    pand %xmm9, %xmm111094; SSE2-NEXT:    pandn %xmm7, %xmm91095; SSE2-NEXT:    por %xmm11, %xmm91096; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1097; SSE2-NEXT:    movdqa %xmm0, %xmm71098; SSE2-NEXT:    punpckhwd {{.*#+}} xmm7 = xmm7[4,4,5,5,6,6,7,7]1099; SSE2-NEXT:    pslld $31, %xmm71100; SSE2-NEXT:    psrad $31, %xmm71101; SSE2-NEXT:    movdqa %xmm10, %xmm111102; SSE2-NEXT:    pand %xmm7, %xmm111103; SSE2-NEXT:    pandn %xmm6, %xmm71104; SSE2-NEXT:    por %xmm11, %xmm71105; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1106; SSE2-NEXT:    pslld $31, %xmm01107; SSE2-NEXT:    psrad $31, %xmm01108; SSE2-NEXT:    pand %xmm0, %xmm101109; SSE2-NEXT:    pandn %xmm5, %xmm01110; SSE2-NEXT:    por %xmm10, %xmm01111; SSE2-NEXT:    divps %xmm0, %xmm11112; SSE2-NEXT:    divps %xmm7, %xmm21113; SSE2-NEXT:    divps %xmm9, %xmm31114; SSE2-NEXT:    divps %xmm8, %xmm41115; SSE2-NEXT:    movaps %xmm1, %xmm01116; SSE2-NEXT:    movaps %xmm2, %xmm11117; SSE2-NEXT:    movaps %xmm3, %xmm21118; SSE2-NEXT:    movaps %xmm4, %xmm31119; SSE2-NEXT:    retq1120;1121; SSE42-LABEL: fdiv_v16f32_swap:1122; SSE42:       # %bb.0:1123; SSE42-NEXT:    movdqa %xmm0, %xmm81124; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm91125; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]1126; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1127; SSE42-NEXT:    pslld $31, %xmm01128; SSE42-NEXT:    movaps {{.*#+}} xmm10 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1129; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm91130; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[2,3,2,3]1131; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1132; SSE42-NEXT:    pslld $31, %xmm01133; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm71134; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[1,1,1,1]1135; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1136; SSE42-NEXT:    pslld $31, %xmm01137; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm61138; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm8[0],zero,zero,zero,xmm8[1],zero,zero,zero,xmm8[2],zero,zero,zero,xmm8[3],zero,zero,zero1139; SSE42-NEXT:    pslld $31, %xmm01140; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm51141; SSE42-NEXT:    divps %xmm5, %xmm11142; SSE42-NEXT:    divps %xmm6, %xmm21143; SSE42-NEXT:    divps %xmm7, %xmm31144; SSE42-NEXT:    divps %xmm9, %xmm41145; SSE42-NEXT:    movaps %xmm1, %xmm01146; SSE42-NEXT:    movaps %xmm2, %xmm11147; SSE42-NEXT:    movaps %xmm3, %xmm21148; SSE42-NEXT:    movaps %xmm4, %xmm31149; SSE42-NEXT:    retq1150;1151; AVX2-LABEL: fdiv_v16f32_swap:1152; AVX2:       # %bb.0:1153; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero1154; AVX2-NEXT:    vpslld $31, %ymm5, %ymm51155; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1156; AVX2-NEXT:    vblendvps %ymm5, %ymm6, %ymm3, %ymm31157; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1158; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1159; AVX2-NEXT:    vpslld $31, %ymm0, %ymm01160; AVX2-NEXT:    vblendvps %ymm0, %ymm6, %ymm4, %ymm41161; AVX2-NEXT:    vdivps %ymm3, %ymm1, %ymm01162; AVX2-NEXT:    vdivps %ymm4, %ymm2, %ymm11163; AVX2-NEXT:    retq1164;1165; AVX512-LABEL: fdiv_v16f32_swap:1166; AVX512:       # %bb.0:1167; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm01168; AVX512-NEXT:    vpslld $31, %zmm0, %zmm01169; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k11170; AVX512-NEXT:    vdivps %zmm2, %zmm1, %zmm01171; AVX512-NEXT:    vmovaps %zmm1, %zmm0 {%k1}1172; AVX512-NEXT:    retq1173  %s = select <16 x i1> %b, <16 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, <16 x float> %y1174  %r = fdiv <16 x float> %x, %s1175  ret <16 x float> %r1176}1177 1178define <16 x float> @fdiv_v16f32_commute_swap(<16 x i1> %b, <16 x float> noundef %x, <16 x float> noundef %y) {1179; SSE2-LABEL: fdiv_v16f32_commute_swap:1180; SSE2:       # %bb.0:1181; SSE2-NEXT:    movaps %xmm2, %xmm81182; SSE2-NEXT:    movdqa %xmm0, %xmm21183; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1184; SSE2-NEXT:    movdqa %xmm2, %xmm101185; SSE2-NEXT:    punpckhwd {{.*#+}} xmm10 = xmm10[4,4,5,5,6,6,7,7]1186; SSE2-NEXT:    pslld $31, %xmm101187; SSE2-NEXT:    psrad $31, %xmm101188; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1189; SSE2-NEXT:    movdqa %xmm11, %xmm91190; SSE2-NEXT:    pand %xmm10, %xmm91191; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm101192; SSE2-NEXT:    por %xmm9, %xmm101193; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]1194; SSE2-NEXT:    pslld $31, %xmm21195; SSE2-NEXT:    psrad $31, %xmm21196; SSE2-NEXT:    movdqa %xmm11, %xmm91197; SSE2-NEXT:    pand %xmm2, %xmm91198; SSE2-NEXT:    pandn %xmm7, %xmm21199; SSE2-NEXT:    por %xmm9, %xmm21200; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1201; SSE2-NEXT:    movdqa %xmm0, %xmm91202; SSE2-NEXT:    punpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]1203; SSE2-NEXT:    pslld $31, %xmm91204; SSE2-NEXT:    psrad $31, %xmm91205; SSE2-NEXT:    movdqa %xmm11, %xmm71206; SSE2-NEXT:    pand %xmm9, %xmm71207; SSE2-NEXT:    pandn %xmm6, %xmm91208; SSE2-NEXT:    por %xmm7, %xmm91209; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1210; SSE2-NEXT:    pslld $31, %xmm01211; SSE2-NEXT:    psrad $31, %xmm01212; SSE2-NEXT:    pand %xmm0, %xmm111213; SSE2-NEXT:    pandn %xmm5, %xmm01214; SSE2-NEXT:    por %xmm11, %xmm01215; SSE2-NEXT:    divps %xmm1, %xmm01216; SSE2-NEXT:    divps %xmm8, %xmm91217; SSE2-NEXT:    divps %xmm3, %xmm21218; SSE2-NEXT:    divps %xmm4, %xmm101219; SSE2-NEXT:    movaps %xmm9, %xmm11220; SSE2-NEXT:    movaps %xmm10, %xmm31221; SSE2-NEXT:    retq1222;1223; SSE42-LABEL: fdiv_v16f32_commute_swap:1224; SSE42:       # %bb.0:1225; SSE42-NEXT:    movaps %xmm3, %xmm81226; SSE42-NEXT:    movdqa %xmm0, %xmm91227; SSE42-NEXT:    movaps {{[0-9]+}}(%rsp), %xmm31228; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]1229; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1230; SSE42-NEXT:    pslld $31, %xmm01231; SSE42-NEXT:    movaps {{.*#+}} xmm10 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1232; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm31233; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[2,3,2,3]1234; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1235; SSE42-NEXT:    pslld $31, %xmm01236; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm71237; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[1,1,1,1]1238; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1239; SSE42-NEXT:    pslld $31, %xmm01240; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm61241; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero1242; SSE42-NEXT:    pslld $31, %xmm01243; SSE42-NEXT:    blendvps %xmm0, %xmm10, %xmm51244; SSE42-NEXT:    divps %xmm1, %xmm51245; SSE42-NEXT:    divps %xmm2, %xmm61246; SSE42-NEXT:    divps %xmm8, %xmm71247; SSE42-NEXT:    divps %xmm4, %xmm31248; SSE42-NEXT:    movaps %xmm5, %xmm01249; SSE42-NEXT:    movaps %xmm6, %xmm11250; SSE42-NEXT:    movaps %xmm7, %xmm21251; SSE42-NEXT:    retq1252;1253; AVX2-LABEL: fdiv_v16f32_commute_swap:1254; AVX2:       # %bb.0:1255; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm5 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero1256; AVX2-NEXT:    vpslld $31, %ymm5, %ymm51257; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1258; AVX2-NEXT:    vblendvps %ymm5, %ymm6, %ymm3, %ymm31259; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]1260; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1261; AVX2-NEXT:    vpslld $31, %ymm0, %ymm01262; AVX2-NEXT:    vblendvps %ymm0, %ymm6, %ymm4, %ymm41263; AVX2-NEXT:    vdivps %ymm1, %ymm3, %ymm01264; AVX2-NEXT:    vdivps %ymm2, %ymm4, %ymm11265; AVX2-NEXT:    retq1266;1267; AVX512-LABEL: fdiv_v16f32_commute_swap:1268; AVX512:       # %bb.0:1269; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm01270; AVX512-NEXT:    vpslld $31, %zmm0, %zmm01271; AVX512-NEXT:    vptestmd %zmm0, %zmm0, %k11272; AVX512-NEXT:    vbroadcastss {{.*#+}} zmm2 {%k1} = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1273; AVX512-NEXT:    vdivps %zmm1, %zmm2, %zmm01274; AVX512-NEXT:    retq1275  %s = select <16 x i1> %b, <16 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, <16 x float> %y1276  %r = fdiv <16 x float> %s, %x1277  ret <16 x float> %r1278}1279 1280define <8 x float> @fadd_v8f32_cast_cond(i8 noundef zeroext %pb, <8 x float> noundef %x, <8 x float> noundef %y) {1281; SSE2-LABEL: fadd_v8f32_cast_cond:1282; SSE2:       # %bb.0:1283; SSE2-NEXT:    movd %edi, %xmm41284; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]1285; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [16,32,64,128]1286; SSE2-NEXT:    movdqa %xmm4, %xmm61287; SSE2-NEXT:    pand %xmm5, %xmm61288; SSE2-NEXT:    pcmpeqd %xmm5, %xmm61289; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1290; SSE2-NEXT:    pand %xmm6, %xmm31291; SSE2-NEXT:    pandn %xmm5, %xmm61292; SSE2-NEXT:    por %xmm3, %xmm61293; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,2,4,8]1294; SSE2-NEXT:    pand %xmm3, %xmm41295; SSE2-NEXT:    pcmpeqd %xmm3, %xmm41296; SSE2-NEXT:    pand %xmm4, %xmm21297; SSE2-NEXT:    pandn %xmm5, %xmm41298; SSE2-NEXT:    por %xmm2, %xmm41299; SSE2-NEXT:    addps %xmm4, %xmm01300; SSE2-NEXT:    addps %xmm6, %xmm11301; SSE2-NEXT:    retq1302;1303; SSE42-LABEL: fadd_v8f32_cast_cond:1304; SSE42:       # %bb.0:1305; SSE42-NEXT:    movaps %xmm0, %xmm41306; SSE42-NEXT:    movd %edi, %xmm01307; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,0,0]1308; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm6 = [16,32,64,128]1309; SSE42-NEXT:    movdqa %xmm5, %xmm01310; SSE42-NEXT:    pand %xmm6, %xmm01311; SSE42-NEXT:    pcmpeqd %xmm6, %xmm01312; SSE42-NEXT:    movaps {{.*#+}} xmm6 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1313; SSE42-NEXT:    movaps %xmm6, %xmm71314; SSE42-NEXT:    blendvps %xmm0, %xmm3, %xmm71315; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm0 = [1,2,4,8]1316; SSE42-NEXT:    pand %xmm0, %xmm51317; SSE42-NEXT:    pcmpeqd %xmm0, %xmm51318; SSE42-NEXT:    movdqa %xmm5, %xmm01319; SSE42-NEXT:    blendvps %xmm0, %xmm2, %xmm61320; SSE42-NEXT:    addps %xmm4, %xmm61321; SSE42-NEXT:    addps %xmm7, %xmm11322; SSE42-NEXT:    movaps %xmm6, %xmm01323; SSE42-NEXT:    retq1324;1325; AVX2-LABEL: fadd_v8f32_cast_cond:1326; AVX2:       # %bb.0:1327; AVX2-NEXT:    vmovd %edi, %xmm21328; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm21329; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]1330; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm21331; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm21332; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1333; AVX2-NEXT:    vblendvps %ymm2, %ymm1, %ymm3, %ymm11334; AVX2-NEXT:    vaddps %ymm1, %ymm0, %ymm01335; AVX2-NEXT:    retq1336;1337; AVX512F-LABEL: fadd_v8f32_cast_cond:1338; AVX512F:       # %bb.0:1339; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11340; AVX512F-NEXT:    kmovw %edi, %k11341; AVX512F-NEXT:    vbroadcastss {{.*#+}} ymm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1342; AVX512F-NEXT:    vmovaps %zmm1, %zmm2 {%k1}1343; AVX512F-NEXT:    vaddps %ymm2, %ymm0, %ymm01344; AVX512F-NEXT:    retq1345;1346; AVX512VL-LABEL: fadd_v8f32_cast_cond:1347; AVX512VL:       # %bb.0:1348; AVX512VL-NEXT:    kmovw %edi, %k11349; AVX512VL-NEXT:    vaddps %ymm1, %ymm0, %ymm0 {%k1}1350; AVX512VL-NEXT:    retq1351  %b = bitcast i8 %pb to <8 x i1>1352  %s = select <8 x i1> %b, <8 x float> %y, <8 x float> <float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0>1353  %r = fadd <8 x float> %x, %s1354  ret <8 x float> %r1355}1356 1357define <8 x double> @fadd_v8f64_cast_cond(i8 noundef zeroext %pb, <8 x double> noundef %x, <8 x double> noundef %y) {1358; SSE2-LABEL: fadd_v8f64_cast_cond:1359; SSE2:       # %bb.0:1360; SSE2-NEXT:    movd %edi, %xmm81361; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]1362; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [64,128]1363; SSE2-NEXT:    movdqa %xmm9, %xmm101364; SSE2-NEXT:    pand %xmm8, %xmm101365; SSE2-NEXT:    pcmpeqd %xmm8, %xmm101366; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,0,3,2]1367; SSE2-NEXT:    pand %xmm10, %xmm81368; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [-0.0E+0,-0.0E+0]1369; SSE2-NEXT:    pand %xmm8, %xmm71370; SSE2-NEXT:    pandn %xmm10, %xmm81371; SSE2-NEXT:    por %xmm7, %xmm81372; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [16,32]1373; SSE2-NEXT:    movdqa %xmm9, %xmm111374; SSE2-NEXT:    pand %xmm7, %xmm111375; SSE2-NEXT:    pcmpeqd %xmm7, %xmm111376; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm11[1,0,3,2]1377; SSE2-NEXT:    pand %xmm11, %xmm71378; SSE2-NEXT:    pand %xmm7, %xmm61379; SSE2-NEXT:    pandn %xmm10, %xmm71380; SSE2-NEXT:    por %xmm6, %xmm71381; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,8]1382; SSE2-NEXT:    movdqa %xmm9, %xmm111383; SSE2-NEXT:    pand %xmm6, %xmm111384; SSE2-NEXT:    pcmpeqd %xmm6, %xmm111385; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm11[1,0,3,2]1386; SSE2-NEXT:    pand %xmm11, %xmm61387; SSE2-NEXT:    pand %xmm6, %xmm51388; SSE2-NEXT:    pandn %xmm10, %xmm61389; SSE2-NEXT:    por %xmm5, %xmm61390; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1,2]1391; SSE2-NEXT:    pand %xmm5, %xmm91392; SSE2-NEXT:    pcmpeqd %xmm5, %xmm91393; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]1394; SSE2-NEXT:    pand %xmm9, %xmm51395; SSE2-NEXT:    pand %xmm5, %xmm41396; SSE2-NEXT:    pandn %xmm10, %xmm51397; SSE2-NEXT:    por %xmm4, %xmm51398; SSE2-NEXT:    addpd %xmm5, %xmm01399; SSE2-NEXT:    addpd %xmm6, %xmm11400; SSE2-NEXT:    addpd %xmm7, %xmm21401; SSE2-NEXT:    addpd %xmm8, %xmm31402; SSE2-NEXT:    retq1403;1404; SSE42-LABEL: fadd_v8f64_cast_cond:1405; SSE42:       # %bb.0:1406; SSE42-NEXT:    movapd %xmm0, %xmm91407; SSE42-NEXT:    movd %edi, %xmm01408; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[0,1,0,1]1409; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]1410; SSE42-NEXT:    movdqa %xmm8, %xmm01411; SSE42-NEXT:    pand %xmm10, %xmm01412; SSE42-NEXT:    pcmpeqq %xmm10, %xmm01413; SSE42-NEXT:    movapd {{.*#+}} xmm10 = [-0.0E+0,-0.0E+0]1414; SSE42-NEXT:    movapd %xmm10, %xmm111415; SSE42-NEXT:    blendvpd %xmm0, %xmm7, %xmm111416; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,32]1417; SSE42-NEXT:    movdqa %xmm8, %xmm01418; SSE42-NEXT:    pand %xmm7, %xmm01419; SSE42-NEXT:    pcmpeqq %xmm7, %xmm01420; SSE42-NEXT:    movapd %xmm10, %xmm71421; SSE42-NEXT:    blendvpd %xmm0, %xmm6, %xmm71422; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm6 = [4,8]1423; SSE42-NEXT:    movdqa %xmm8, %xmm01424; SSE42-NEXT:    pand %xmm6, %xmm01425; SSE42-NEXT:    pcmpeqq %xmm6, %xmm01426; SSE42-NEXT:    movapd %xmm10, %xmm61427; SSE42-NEXT:    blendvpd %xmm0, %xmm5, %xmm61428; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm0 = [1,2]1429; SSE42-NEXT:    pand %xmm0, %xmm81430; SSE42-NEXT:    pcmpeqq %xmm0, %xmm81431; SSE42-NEXT:    movdqa %xmm8, %xmm01432; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm101433; SSE42-NEXT:    addpd %xmm9, %xmm101434; SSE42-NEXT:    addpd %xmm6, %xmm11435; SSE42-NEXT:    addpd %xmm7, %xmm21436; SSE42-NEXT:    addpd %xmm11, %xmm31437; SSE42-NEXT:    movapd %xmm10, %xmm01438; SSE42-NEXT:    retq1439;1440; AVX2-LABEL: fadd_v8f64_cast_cond:1441; AVX2:       # %bb.0:1442; AVX2-NEXT:    vmovd %edi, %xmm41443; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm41444; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]1445; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm61446; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm51447; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm6 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]1448; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm6, %ymm31449; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]1450; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm41451; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm41452; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm6, %ymm21453; AVX2-NEXT:    vaddpd %ymm2, %ymm0, %ymm01454; AVX2-NEXT:    vaddpd %ymm3, %ymm1, %ymm11455; AVX2-NEXT:    retq1456;1457; AVX512-LABEL: fadd_v8f64_cast_cond:1458; AVX512:       # %bb.0:1459; AVX512-NEXT:    kmovw %edi, %k11460; AVX512-NEXT:    vaddpd %zmm1, %zmm0, %zmm0 {%k1}1461; AVX512-NEXT:    retq1462  %b = bitcast i8 %pb to <8 x i1>1463  %s = select <8 x i1> %b, <8 x double> %y, <8 x double> <double -0.0, double -0.0, double -0.0, double -0.0, double -0.0, double -0.0, double -0.0, double -0.0>1464  %r = fadd <8 x double> %x, %s1465  ret <8 x double> %r1466}1467 1468define <8 x float> @fsub_v8f32_cast_cond(i8 noundef zeroext %pb, <8 x float> noundef %x, <8 x float> noundef %y) {1469; SSE2-LABEL: fsub_v8f32_cast_cond:1470; SSE2:       # %bb.0:1471; SSE2-NEXT:    movd %edi, %xmm41472; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]1473; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [16,32,64,128]1474; SSE2-NEXT:    movdqa %xmm4, %xmm61475; SSE2-NEXT:    pand %xmm5, %xmm61476; SSE2-NEXT:    pcmpeqd %xmm5, %xmm61477; SSE2-NEXT:    pand %xmm3, %xmm61478; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,2,4,8]1479; SSE2-NEXT:    pand %xmm3, %xmm41480; SSE2-NEXT:    pcmpeqd %xmm3, %xmm41481; SSE2-NEXT:    pand %xmm2, %xmm41482; SSE2-NEXT:    subps %xmm4, %xmm01483; SSE2-NEXT:    subps %xmm6, %xmm11484; SSE2-NEXT:    retq1485;1486; SSE42-LABEL: fsub_v8f32_cast_cond:1487; SSE42:       # %bb.0:1488; SSE42-NEXT:    movd %edi, %xmm41489; SSE42-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]1490; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm5 = [16,32,64,128]1491; SSE42-NEXT:    movdqa %xmm4, %xmm61492; SSE42-NEXT:    pand %xmm5, %xmm61493; SSE42-NEXT:    pcmpeqd %xmm5, %xmm61494; SSE42-NEXT:    pand %xmm3, %xmm61495; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm3 = [1,2,4,8]1496; SSE42-NEXT:    pand %xmm3, %xmm41497; SSE42-NEXT:    pcmpeqd %xmm3, %xmm41498; SSE42-NEXT:    pand %xmm2, %xmm41499; SSE42-NEXT:    subps %xmm4, %xmm01500; SSE42-NEXT:    subps %xmm6, %xmm11501; SSE42-NEXT:    retq1502;1503; AVX2-LABEL: fsub_v8f32_cast_cond:1504; AVX2:       # %bb.0:1505; AVX2-NEXT:    vmovd %edi, %xmm21506; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm21507; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]1508; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm21509; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm21510; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm11511; AVX2-NEXT:    vsubps %ymm1, %ymm0, %ymm01512; AVX2-NEXT:    retq1513;1514; AVX512F-LABEL: fsub_v8f32_cast_cond:1515; AVX512F:       # %bb.0:1516; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11517; AVX512F-NEXT:    kmovw %edi, %k11518; AVX512F-NEXT:    vmovaps %zmm1, %zmm1 {%k1} {z}1519; AVX512F-NEXT:    vsubps %ymm1, %ymm0, %ymm01520; AVX512F-NEXT:    retq1521;1522; AVX512VL-LABEL: fsub_v8f32_cast_cond:1523; AVX512VL:       # %bb.0:1524; AVX512VL-NEXT:    kmovw %edi, %k11525; AVX512VL-NEXT:    vsubps %ymm1, %ymm0, %ymm0 {%k1}1526; AVX512VL-NEXT:    retq1527  %b = bitcast i8 %pb to <8 x i1>1528  %s = select <8 x i1> %b, <8 x float> %y, <8 x float> zeroinitializer1529  %r = fsub <8 x float> %x, %s1530  ret <8 x float> %r1531}1532 1533define <8 x double> @fsub_v8f64_cast_cond(i8 noundef zeroext %pb, <8 x double> noundef %x, <8 x double> noundef %y) {1534; SSE2-LABEL: fsub_v8f64_cast_cond:1535; SSE2:       # %bb.0:1536; SSE2-NEXT:    movd %edi, %xmm81537; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]1538; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,128]1539; SSE2-NEXT:    movdqa %xmm9, %xmm81540; SSE2-NEXT:    pand %xmm10, %xmm81541; SSE2-NEXT:    pcmpeqd %xmm10, %xmm81542; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm8[1,0,3,2]1543; SSE2-NEXT:    pand %xmm7, %xmm81544; SSE2-NEXT:    pand %xmm10, %xmm81545; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [16,32]1546; SSE2-NEXT:    movdqa %xmm9, %xmm71547; SSE2-NEXT:    pand %xmm10, %xmm71548; SSE2-NEXT:    pcmpeqd %xmm10, %xmm71549; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm7[1,0,3,2]1550; SSE2-NEXT:    pand %xmm6, %xmm71551; SSE2-NEXT:    pand %xmm10, %xmm71552; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,8]1553; SSE2-NEXT:    movdqa %xmm9, %xmm101554; SSE2-NEXT:    pand %xmm6, %xmm101555; SSE2-NEXT:    pcmpeqd %xmm6, %xmm101556; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm10[1,0,3,2]1557; SSE2-NEXT:    pand %xmm5, %xmm101558; SSE2-NEXT:    pand %xmm6, %xmm101559; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1,2]1560; SSE2-NEXT:    pand %xmm5, %xmm91561; SSE2-NEXT:    pcmpeqd %xmm5, %xmm91562; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]1563; SSE2-NEXT:    pand %xmm4, %xmm91564; SSE2-NEXT:    pand %xmm5, %xmm91565; SSE2-NEXT:    subpd %xmm9, %xmm01566; SSE2-NEXT:    subpd %xmm10, %xmm11567; SSE2-NEXT:    subpd %xmm7, %xmm21568; SSE2-NEXT:    subpd %xmm8, %xmm31569; SSE2-NEXT:    retq1570;1571; SSE42-LABEL: fsub_v8f64_cast_cond:1572; SSE42:       # %bb.0:1573; SSE42-NEXT:    movd %edi, %xmm81574; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]1575; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]1576; SSE42-NEXT:    movdqa %xmm9, %xmm81577; SSE42-NEXT:    pand %xmm10, %xmm81578; SSE42-NEXT:    pcmpeqq %xmm10, %xmm81579; SSE42-NEXT:    pand %xmm7, %xmm81580; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,32]1581; SSE42-NEXT:    movdqa %xmm9, %xmm101582; SSE42-NEXT:    pand %xmm7, %xmm101583; SSE42-NEXT:    pcmpeqq %xmm7, %xmm101584; SSE42-NEXT:    pand %xmm6, %xmm101585; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm6 = [4,8]1586; SSE42-NEXT:    movdqa %xmm9, %xmm71587; SSE42-NEXT:    pand %xmm6, %xmm71588; SSE42-NEXT:    pcmpeqq %xmm6, %xmm71589; SSE42-NEXT:    pand %xmm5, %xmm71590; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm5 = [1,2]1591; SSE42-NEXT:    pand %xmm5, %xmm91592; SSE42-NEXT:    pcmpeqq %xmm5, %xmm91593; SSE42-NEXT:    pand %xmm4, %xmm91594; SSE42-NEXT:    subpd %xmm9, %xmm01595; SSE42-NEXT:    subpd %xmm7, %xmm11596; SSE42-NEXT:    subpd %xmm10, %xmm21597; SSE42-NEXT:    subpd %xmm8, %xmm31598; SSE42-NEXT:    retq1599;1600; AVX2-LABEL: fsub_v8f64_cast_cond:1601; AVX2:       # %bb.0:1602; AVX2-NEXT:    vmovd %edi, %xmm41603; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm41604; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]1605; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm61606; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm51607; AVX2-NEXT:    vpand %ymm3, %ymm5, %ymm31608; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]1609; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm41610; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm41611; AVX2-NEXT:    vpand %ymm2, %ymm4, %ymm21612; AVX2-NEXT:    vsubpd %ymm2, %ymm0, %ymm01613; AVX2-NEXT:    vsubpd %ymm3, %ymm1, %ymm11614; AVX2-NEXT:    retq1615;1616; AVX512-LABEL: fsub_v8f64_cast_cond:1617; AVX512:       # %bb.0:1618; AVX512-NEXT:    kmovw %edi, %k11619; AVX512-NEXT:    vsubpd %zmm1, %zmm0, %zmm0 {%k1}1620; AVX512-NEXT:    retq1621  %b = bitcast i8 %pb to <8 x i1>1622  %s = select <8 x i1> %b, <8 x double> %y, <8 x double> zeroinitializer1623  %r = fsub <8 x double> %x, %s1624  ret <8 x double> %r1625}1626 1627define <8 x float> @fmul_v8f32_cast_cond(i8 noundef zeroext %pb, <8 x float> noundef %x, <8 x float> noundef %y) {1628; SSE2-LABEL: fmul_v8f32_cast_cond:1629; SSE2:       # %bb.0:1630; SSE2-NEXT:    movd %edi, %xmm41631; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]1632; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [16,32,64,128]1633; SSE2-NEXT:    movdqa %xmm4, %xmm61634; SSE2-NEXT:    pand %xmm5, %xmm61635; SSE2-NEXT:    pcmpeqd %xmm5, %xmm61636; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1637; SSE2-NEXT:    pand %xmm6, %xmm31638; SSE2-NEXT:    pandn %xmm5, %xmm61639; SSE2-NEXT:    por %xmm3, %xmm61640; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,2,4,8]1641; SSE2-NEXT:    pand %xmm3, %xmm41642; SSE2-NEXT:    pcmpeqd %xmm3, %xmm41643; SSE2-NEXT:    pand %xmm4, %xmm21644; SSE2-NEXT:    pandn %xmm5, %xmm41645; SSE2-NEXT:    por %xmm2, %xmm41646; SSE2-NEXT:    mulps %xmm4, %xmm01647; SSE2-NEXT:    mulps %xmm6, %xmm11648; SSE2-NEXT:    retq1649;1650; SSE42-LABEL: fmul_v8f32_cast_cond:1651; SSE42:       # %bb.0:1652; SSE42-NEXT:    movaps %xmm0, %xmm41653; SSE42-NEXT:    movd %edi, %xmm01654; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,0,0]1655; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm6 = [16,32,64,128]1656; SSE42-NEXT:    movdqa %xmm5, %xmm01657; SSE42-NEXT:    pand %xmm6, %xmm01658; SSE42-NEXT:    pcmpeqd %xmm6, %xmm01659; SSE42-NEXT:    movaps {{.*#+}} xmm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1660; SSE42-NEXT:    movaps %xmm6, %xmm71661; SSE42-NEXT:    blendvps %xmm0, %xmm3, %xmm71662; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm0 = [1,2,4,8]1663; SSE42-NEXT:    pand %xmm0, %xmm51664; SSE42-NEXT:    pcmpeqd %xmm0, %xmm51665; SSE42-NEXT:    movdqa %xmm5, %xmm01666; SSE42-NEXT:    blendvps %xmm0, %xmm2, %xmm61667; SSE42-NEXT:    mulps %xmm4, %xmm61668; SSE42-NEXT:    mulps %xmm7, %xmm11669; SSE42-NEXT:    movaps %xmm6, %xmm01670; SSE42-NEXT:    retq1671;1672; AVX2-LABEL: fmul_v8f32_cast_cond:1673; AVX2:       # %bb.0:1674; AVX2-NEXT:    vmovd %edi, %xmm21675; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm21676; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]1677; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm21678; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm21679; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1680; AVX2-NEXT:    vblendvps %ymm2, %ymm1, %ymm3, %ymm11681; AVX2-NEXT:    vmulps %ymm1, %ymm0, %ymm01682; AVX2-NEXT:    retq1683;1684; AVX512F-LABEL: fmul_v8f32_cast_cond:1685; AVX512F:       # %bb.0:1686; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11687; AVX512F-NEXT:    kmovw %edi, %k11688; AVX512F-NEXT:    vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1689; AVX512F-NEXT:    vmovaps %zmm1, %zmm2 {%k1}1690; AVX512F-NEXT:    vmulps %ymm2, %ymm0, %ymm01691; AVX512F-NEXT:    retq1692;1693; AVX512VL-LABEL: fmul_v8f32_cast_cond:1694; AVX512VL:       # %bb.0:1695; AVX512VL-NEXT:    kmovw %edi, %k11696; AVX512VL-NEXT:    vmulps %ymm1, %ymm0, %ymm0 {%k1}1697; AVX512VL-NEXT:    retq1698  %b = bitcast i8 %pb to <8 x i1>1699  %s = select <8 x i1> %b, <8 x float> %y, <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>1700  %r = fmul <8 x float> %x, %s1701  ret <8 x float> %r1702}1703 1704define <8 x double> @fmul_v8f64_cast_cond(i8 noundef zeroext %pb, <8 x double> noundef %x, <8 x double> noundef %y) {1705; SSE2-LABEL: fmul_v8f64_cast_cond:1706; SSE2:       # %bb.0:1707; SSE2-NEXT:    movd %edi, %xmm81708; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]1709; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [64,128]1710; SSE2-NEXT:    movdqa %xmm9, %xmm101711; SSE2-NEXT:    pand %xmm8, %xmm101712; SSE2-NEXT:    pcmpeqd %xmm8, %xmm101713; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,0,3,2]1714; SSE2-NEXT:    pand %xmm10, %xmm81715; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [1.0E+0,1.0E+0]1716; SSE2-NEXT:    pand %xmm8, %xmm71717; SSE2-NEXT:    pandn %xmm10, %xmm81718; SSE2-NEXT:    por %xmm7, %xmm81719; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [16,32]1720; SSE2-NEXT:    movdqa %xmm9, %xmm111721; SSE2-NEXT:    pand %xmm7, %xmm111722; SSE2-NEXT:    pcmpeqd %xmm7, %xmm111723; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm11[1,0,3,2]1724; SSE2-NEXT:    pand %xmm11, %xmm71725; SSE2-NEXT:    pand %xmm7, %xmm61726; SSE2-NEXT:    pandn %xmm10, %xmm71727; SSE2-NEXT:    por %xmm6, %xmm71728; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,8]1729; SSE2-NEXT:    movdqa %xmm9, %xmm111730; SSE2-NEXT:    pand %xmm6, %xmm111731; SSE2-NEXT:    pcmpeqd %xmm6, %xmm111732; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm11[1,0,3,2]1733; SSE2-NEXT:    pand %xmm11, %xmm61734; SSE2-NEXT:    pand %xmm6, %xmm51735; SSE2-NEXT:    pandn %xmm10, %xmm61736; SSE2-NEXT:    por %xmm5, %xmm61737; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1,2]1738; SSE2-NEXT:    pand %xmm5, %xmm91739; SSE2-NEXT:    pcmpeqd %xmm5, %xmm91740; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]1741; SSE2-NEXT:    pand %xmm9, %xmm51742; SSE2-NEXT:    pand %xmm5, %xmm41743; SSE2-NEXT:    pandn %xmm10, %xmm51744; SSE2-NEXT:    por %xmm4, %xmm51745; SSE2-NEXT:    mulpd %xmm5, %xmm01746; SSE2-NEXT:    mulpd %xmm6, %xmm11747; SSE2-NEXT:    mulpd %xmm7, %xmm21748; SSE2-NEXT:    mulpd %xmm8, %xmm31749; SSE2-NEXT:    retq1750;1751; SSE42-LABEL: fmul_v8f64_cast_cond:1752; SSE42:       # %bb.0:1753; SSE42-NEXT:    movapd %xmm0, %xmm91754; SSE42-NEXT:    movd %edi, %xmm01755; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[0,1,0,1]1756; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]1757; SSE42-NEXT:    movdqa %xmm8, %xmm01758; SSE42-NEXT:    pand %xmm10, %xmm01759; SSE42-NEXT:    pcmpeqq %xmm10, %xmm01760; SSE42-NEXT:    movapd {{.*#+}} xmm10 = [1.0E+0,1.0E+0]1761; SSE42-NEXT:    movapd %xmm10, %xmm111762; SSE42-NEXT:    blendvpd %xmm0, %xmm7, %xmm111763; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,32]1764; SSE42-NEXT:    movdqa %xmm8, %xmm01765; SSE42-NEXT:    pand %xmm7, %xmm01766; SSE42-NEXT:    pcmpeqq %xmm7, %xmm01767; SSE42-NEXT:    movapd %xmm10, %xmm71768; SSE42-NEXT:    blendvpd %xmm0, %xmm6, %xmm71769; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm6 = [4,8]1770; SSE42-NEXT:    movdqa %xmm8, %xmm01771; SSE42-NEXT:    pand %xmm6, %xmm01772; SSE42-NEXT:    pcmpeqq %xmm6, %xmm01773; SSE42-NEXT:    movapd %xmm10, %xmm61774; SSE42-NEXT:    blendvpd %xmm0, %xmm5, %xmm61775; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm0 = [1,2]1776; SSE42-NEXT:    pand %xmm0, %xmm81777; SSE42-NEXT:    pcmpeqq %xmm0, %xmm81778; SSE42-NEXT:    movdqa %xmm8, %xmm01779; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm101780; SSE42-NEXT:    mulpd %xmm9, %xmm101781; SSE42-NEXT:    mulpd %xmm6, %xmm11782; SSE42-NEXT:    mulpd %xmm7, %xmm21783; SSE42-NEXT:    mulpd %xmm11, %xmm31784; SSE42-NEXT:    movapd %xmm10, %xmm01785; SSE42-NEXT:    retq1786;1787; AVX2-LABEL: fmul_v8f64_cast_cond:1788; AVX2:       # %bb.0:1789; AVX2-NEXT:    vmovd %edi, %xmm41790; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm41791; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]1792; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm61793; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm51794; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1795; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm6, %ymm31796; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]1797; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm41798; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm41799; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm6, %ymm21800; AVX2-NEXT:    vmulpd %ymm2, %ymm0, %ymm01801; AVX2-NEXT:    vmulpd %ymm3, %ymm1, %ymm11802; AVX2-NEXT:    retq1803;1804; AVX512-LABEL: fmul_v8f64_cast_cond:1805; AVX512:       # %bb.0:1806; AVX512-NEXT:    kmovw %edi, %k11807; AVX512-NEXT:    vmulpd %zmm1, %zmm0, %zmm0 {%k1}1808; AVX512-NEXT:    retq1809  %b = bitcast i8 %pb to <8 x i1>1810  %s = select <8 x i1> %b, <8 x double> %y, <8 x double> <double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, double 1.0>1811  %r = fmul <8 x double> %x, %s1812  ret <8 x double> %r1813}1814 1815define <8 x float> @fdiv_v8f32_cast_cond(i8 noundef zeroext %pb, <8 x float> noundef %x, <8 x float> noundef %y) {1816; SSE2-LABEL: fdiv_v8f32_cast_cond:1817; SSE2:       # %bb.0:1818; SSE2-NEXT:    movd %edi, %xmm41819; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]1820; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [16,32,64,128]1821; SSE2-NEXT:    movdqa %xmm4, %xmm61822; SSE2-NEXT:    pand %xmm5, %xmm61823; SSE2-NEXT:    pcmpeqd %xmm5, %xmm61824; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1825; SSE2-NEXT:    pand %xmm6, %xmm31826; SSE2-NEXT:    pandn %xmm5, %xmm61827; SSE2-NEXT:    por %xmm3, %xmm61828; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,2,4,8]1829; SSE2-NEXT:    pand %xmm3, %xmm41830; SSE2-NEXT:    pcmpeqd %xmm3, %xmm41831; SSE2-NEXT:    pand %xmm4, %xmm21832; SSE2-NEXT:    pandn %xmm5, %xmm41833; SSE2-NEXT:    por %xmm2, %xmm41834; SSE2-NEXT:    divps %xmm4, %xmm01835; SSE2-NEXT:    divps %xmm6, %xmm11836; SSE2-NEXT:    retq1837;1838; SSE42-LABEL: fdiv_v8f32_cast_cond:1839; SSE42:       # %bb.0:1840; SSE42-NEXT:    movaps %xmm0, %xmm41841; SSE42-NEXT:    movd %edi, %xmm01842; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,0,0]1843; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm6 = [16,32,64,128]1844; SSE42-NEXT:    movdqa %xmm5, %xmm01845; SSE42-NEXT:    pand %xmm6, %xmm01846; SSE42-NEXT:    pcmpeqd %xmm6, %xmm01847; SSE42-NEXT:    movaps {{.*#+}} xmm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1848; SSE42-NEXT:    movaps %xmm6, %xmm71849; SSE42-NEXT:    blendvps %xmm0, %xmm3, %xmm71850; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm0 = [1,2,4,8]1851; SSE42-NEXT:    pand %xmm0, %xmm51852; SSE42-NEXT:    pcmpeqd %xmm0, %xmm51853; SSE42-NEXT:    movdqa %xmm5, %xmm01854; SSE42-NEXT:    blendvps %xmm0, %xmm2, %xmm61855; SSE42-NEXT:    divps %xmm6, %xmm41856; SSE42-NEXT:    divps %xmm7, %xmm11857; SSE42-NEXT:    movaps %xmm4, %xmm01858; SSE42-NEXT:    retq1859;1860; AVX2-LABEL: fdiv_v8f32_cast_cond:1861; AVX2:       # %bb.0:1862; AVX2-NEXT:    vmovd %edi, %xmm21863; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm21864; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]1865; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm21866; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm21867; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1868; AVX2-NEXT:    vblendvps %ymm2, %ymm1, %ymm3, %ymm11869; AVX2-NEXT:    vdivps %ymm1, %ymm0, %ymm01870; AVX2-NEXT:    retq1871;1872; AVX512F-LABEL: fdiv_v8f32_cast_cond:1873; AVX512F:       # %bb.0:1874; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11875; AVX512F-NEXT:    kmovw %edi, %k11876; AVX512F-NEXT:    vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1877; AVX512F-NEXT:    vmovaps %zmm1, %zmm2 {%k1}1878; AVX512F-NEXT:    vdivps %ymm2, %ymm0, %ymm01879; AVX512F-NEXT:    retq1880;1881; AVX512VL-LABEL: fdiv_v8f32_cast_cond:1882; AVX512VL:       # %bb.0:1883; AVX512VL-NEXT:    kmovw %edi, %k11884; AVX512VL-NEXT:    vdivps %ymm1, %ymm0, %ymm0 {%k1}1885; AVX512VL-NEXT:    retq1886  %b = bitcast i8 %pb to <8 x i1>1887  %s = select <8 x i1> %b, <8 x float> %y, <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>1888  %r = fdiv <8 x float> %x, %s1889  ret <8 x float> %r1890}1891 1892define <8 x double> @fdiv_v8f64_cast_cond(i8 noundef zeroext %pb, <8 x double> noundef %x, <8 x double> noundef %y) {1893; SSE2-LABEL: fdiv_v8f64_cast_cond:1894; SSE2:       # %bb.0:1895; SSE2-NEXT:    movd %edi, %xmm81896; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]1897; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [64,128]1898; SSE2-NEXT:    movdqa %xmm9, %xmm101899; SSE2-NEXT:    pand %xmm8, %xmm101900; SSE2-NEXT:    pcmpeqd %xmm8, %xmm101901; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,0,3,2]1902; SSE2-NEXT:    pand %xmm10, %xmm81903; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [1.0E+0,1.0E+0]1904; SSE2-NEXT:    pand %xmm8, %xmm71905; SSE2-NEXT:    pandn %xmm10, %xmm81906; SSE2-NEXT:    por %xmm7, %xmm81907; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [16,32]1908; SSE2-NEXT:    movdqa %xmm9, %xmm111909; SSE2-NEXT:    pand %xmm7, %xmm111910; SSE2-NEXT:    pcmpeqd %xmm7, %xmm111911; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm11[1,0,3,2]1912; SSE2-NEXT:    pand %xmm11, %xmm71913; SSE2-NEXT:    pand %xmm7, %xmm61914; SSE2-NEXT:    pandn %xmm10, %xmm71915; SSE2-NEXT:    por %xmm6, %xmm71916; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,8]1917; SSE2-NEXT:    movdqa %xmm9, %xmm111918; SSE2-NEXT:    pand %xmm6, %xmm111919; SSE2-NEXT:    pcmpeqd %xmm6, %xmm111920; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm11[1,0,3,2]1921; SSE2-NEXT:    pand %xmm11, %xmm61922; SSE2-NEXT:    pand %xmm6, %xmm51923; SSE2-NEXT:    pandn %xmm10, %xmm61924; SSE2-NEXT:    por %xmm5, %xmm61925; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1,2]1926; SSE2-NEXT:    pand %xmm5, %xmm91927; SSE2-NEXT:    pcmpeqd %xmm5, %xmm91928; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]1929; SSE2-NEXT:    pand %xmm9, %xmm51930; SSE2-NEXT:    pand %xmm5, %xmm41931; SSE2-NEXT:    pandn %xmm10, %xmm51932; SSE2-NEXT:    por %xmm4, %xmm51933; SSE2-NEXT:    divpd %xmm5, %xmm01934; SSE2-NEXT:    divpd %xmm6, %xmm11935; SSE2-NEXT:    divpd %xmm7, %xmm21936; SSE2-NEXT:    divpd %xmm8, %xmm31937; SSE2-NEXT:    retq1938;1939; SSE42-LABEL: fdiv_v8f64_cast_cond:1940; SSE42:       # %bb.0:1941; SSE42-NEXT:    movapd %xmm0, %xmm91942; SSE42-NEXT:    movd %edi, %xmm01943; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[0,1,0,1]1944; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]1945; SSE42-NEXT:    movdqa %xmm8, %xmm01946; SSE42-NEXT:    pand %xmm10, %xmm01947; SSE42-NEXT:    pcmpeqq %xmm10, %xmm01948; SSE42-NEXT:    movapd {{.*#+}} xmm11 = [1.0E+0,1.0E+0]1949; SSE42-NEXT:    movapd %xmm11, %xmm101950; SSE42-NEXT:    blendvpd %xmm0, %xmm7, %xmm101951; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,32]1952; SSE42-NEXT:    movdqa %xmm8, %xmm01953; SSE42-NEXT:    pand %xmm7, %xmm01954; SSE42-NEXT:    pcmpeqq %xmm7, %xmm01955; SSE42-NEXT:    movapd %xmm11, %xmm71956; SSE42-NEXT:    blendvpd %xmm0, %xmm6, %xmm71957; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm6 = [4,8]1958; SSE42-NEXT:    movdqa %xmm8, %xmm01959; SSE42-NEXT:    pand %xmm6, %xmm01960; SSE42-NEXT:    pcmpeqq %xmm6, %xmm01961; SSE42-NEXT:    movapd %xmm11, %xmm61962; SSE42-NEXT:    blendvpd %xmm0, %xmm5, %xmm61963; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm0 = [1,2]1964; SSE42-NEXT:    pand %xmm0, %xmm81965; SSE42-NEXT:    pcmpeqq %xmm0, %xmm81966; SSE42-NEXT:    movdqa %xmm8, %xmm01967; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm111968; SSE42-NEXT:    divpd %xmm11, %xmm91969; SSE42-NEXT:    divpd %xmm6, %xmm11970; SSE42-NEXT:    divpd %xmm7, %xmm21971; SSE42-NEXT:    divpd %xmm10, %xmm31972; SSE42-NEXT:    movapd %xmm9, %xmm01973; SSE42-NEXT:    retq1974;1975; AVX2-LABEL: fdiv_v8f64_cast_cond:1976; AVX2:       # %bb.0:1977; AVX2-NEXT:    vmovd %edi, %xmm41978; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm41979; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]1980; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm61981; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm51982; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1983; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm6, %ymm31984; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]1985; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm41986; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm41987; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm6, %ymm21988; AVX2-NEXT:    vdivpd %ymm2, %ymm0, %ymm01989; AVX2-NEXT:    vdivpd %ymm3, %ymm1, %ymm11990; AVX2-NEXT:    retq1991;1992; AVX512-LABEL: fdiv_v8f64_cast_cond:1993; AVX512:       # %bb.0:1994; AVX512-NEXT:    kmovw %edi, %k11995; AVX512-NEXT:    vdivpd %zmm1, %zmm0, %zmm0 {%k1}1996; AVX512-NEXT:    retq1997  %b = bitcast i8 %pb to <8 x i1>1998  %s = select <8 x i1> %b, <8 x double> %y, <8 x double> <double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, double 1.0, double 1.0>1999  %r = fdiv <8 x double> %x, %s2000  ret <8 x double> %r2001}2002 2003define <4 x i32> @add_v4i32(<4 x i1> %b, <4 x i32> noundef %x, <4 x i32> noundef %y) {2004; SSE-LABEL: add_v4i32:2005; SSE:       # %bb.0:2006; SSE-NEXT:    pslld $31, %xmm02007; SSE-NEXT:    psrad $31, %xmm02008; SSE-NEXT:    pand %xmm2, %xmm02009; SSE-NEXT:    paddd %xmm1, %xmm02010; SSE-NEXT:    retq2011;2012; AVX2-LABEL: add_v4i32:2013; AVX2:       # %bb.0:2014; AVX2-NEXT:    vpslld $31, %xmm0, %xmm02015; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm02016; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm02017; AVX2-NEXT:    vpaddd %xmm0, %xmm1, %xmm02018; AVX2-NEXT:    retq2019;2020; AVX512F-LABEL: add_v4i32:2021; AVX512F:       # %bb.0:2022; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm22023; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm02024; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k12025; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}2026; AVX512F-NEXT:    vpaddd %xmm0, %xmm1, %xmm02027; AVX512F-NEXT:    vzeroupper2028; AVX512F-NEXT:    retq2029;2030; AVX512VL-LABEL: add_v4i32:2031; AVX512VL:       # %bb.0:2032; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm02033; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k12034; AVX512VL-NEXT:    vpaddd %xmm2, %xmm1, %xmm1 {%k1}2035; AVX512VL-NEXT:    vmovdqa %xmm1, %xmm02036; AVX512VL-NEXT:    retq2037  %s = select <4 x i1> %b, <4 x i32> %y, <4 x i32> zeroinitializer2038  %r = add <4 x i32> %x, %s2039  ret <4 x i32> %r2040}2041 2042define <8 x i32> @add_v8i32_commute(<8 x i1> %b, <8 x i32> noundef %x, <8 x i32> noundef %y) {2043; SSE2-LABEL: add_v8i32_commute:2044; SSE2:       # %bb.0:2045; SSE2-NEXT:    movdqa %xmm0, %xmm52046; SSE2-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]2047; SSE2-NEXT:    pslld $31, %xmm52048; SSE2-NEXT:    psrad $31, %xmm52049; SSE2-NEXT:    pand %xmm4, %xmm52050; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]2051; SSE2-NEXT:    pslld $31, %xmm02052; SSE2-NEXT:    psrad $31, %xmm02053; SSE2-NEXT:    pand %xmm3, %xmm02054; SSE2-NEXT:    paddd %xmm1, %xmm02055; SSE2-NEXT:    paddd %xmm2, %xmm52056; SSE2-NEXT:    movdqa %xmm5, %xmm12057; SSE2-NEXT:    retq2058;2059; SSE42-LABEL: add_v8i32_commute:2060; SSE42:       # %bb.0:2061; SSE42-NEXT:    movdqa %xmm0, %xmm52062; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2063; SSE42-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]2064; SSE42-NEXT:    pslld $31, %xmm52065; SSE42-NEXT:    psrad $31, %xmm52066; SSE42-NEXT:    pand %xmm4, %xmm52067; SSE42-NEXT:    pslld $31, %xmm02068; SSE42-NEXT:    psrad $31, %xmm02069; SSE42-NEXT:    pand %xmm3, %xmm02070; SSE42-NEXT:    paddd %xmm1, %xmm02071; SSE42-NEXT:    paddd %xmm2, %xmm52072; SSE42-NEXT:    movdqa %xmm5, %xmm12073; SSE42-NEXT:    retq2074;2075; AVX2-LABEL: add_v8i32_commute:2076; AVX2:       # %bb.0:2077; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero2078; AVX2-NEXT:    vpslld $31, %ymm0, %ymm02079; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm02080; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm02081; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm02082; AVX2-NEXT:    retq2083;2084; AVX512F-LABEL: add_v8i32_commute:2085; AVX512F:       # %bb.0:2086; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm22087; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm02088; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm02089; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k12090; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}2091; AVX512F-NEXT:    vpaddd %ymm1, %ymm0, %ymm02092; AVX512F-NEXT:    retq2093;2094; AVX512VL-LABEL: add_v8i32_commute:2095; AVX512VL:       # %bb.0:2096; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm02097; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm02098; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k12099; AVX512VL-NEXT:    vpaddd %ymm2, %ymm1, %ymm1 {%k1}2100; AVX512VL-NEXT:    vmovdqa %ymm1, %ymm02101; AVX512VL-NEXT:    retq2102  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer2103  %r = add <8 x i32> %s, %x2104  ret <8 x i32> %r2105}2106 2107define <8 x i32> @add_v8i32_cast_cond(i8 noundef zeroext %pb, <8 x i32> noundef %x, <8 x i32> noundef %y) {2108; SSE2-LABEL: add_v8i32_cast_cond:2109; SSE2:       # %bb.0:2110; SSE2-NEXT:    movd %edi, %xmm42111; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]2112; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [16,32,64,128]2113; SSE2-NEXT:    movdqa %xmm4, %xmm62114; SSE2-NEXT:    pand %xmm5, %xmm62115; SSE2-NEXT:    pcmpeqd %xmm5, %xmm62116; SSE2-NEXT:    pand %xmm3, %xmm62117; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,2,4,8]2118; SSE2-NEXT:    pand %xmm3, %xmm42119; SSE2-NEXT:    pcmpeqd %xmm3, %xmm42120; SSE2-NEXT:    pand %xmm2, %xmm42121; SSE2-NEXT:    paddd %xmm4, %xmm02122; SSE2-NEXT:    paddd %xmm6, %xmm12123; SSE2-NEXT:    retq2124;2125; SSE42-LABEL: add_v8i32_cast_cond:2126; SSE42:       # %bb.0:2127; SSE42-NEXT:    movd %edi, %xmm42128; SSE42-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]2129; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm5 = [16,32,64,128]2130; SSE42-NEXT:    movdqa %xmm4, %xmm62131; SSE42-NEXT:    pand %xmm5, %xmm62132; SSE42-NEXT:    pcmpeqd %xmm5, %xmm62133; SSE42-NEXT:    pand %xmm3, %xmm62134; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm3 = [1,2,4,8]2135; SSE42-NEXT:    pand %xmm3, %xmm42136; SSE42-NEXT:    pcmpeqd %xmm3, %xmm42137; SSE42-NEXT:    pand %xmm2, %xmm42138; SSE42-NEXT:    paddd %xmm4, %xmm02139; SSE42-NEXT:    paddd %xmm6, %xmm12140; SSE42-NEXT:    retq2141;2142; AVX2-LABEL: add_v8i32_cast_cond:2143; AVX2:       # %bb.0:2144; AVX2-NEXT:    vmovd %edi, %xmm22145; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm22146; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]2147; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm22148; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm22149; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm12150; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm02151; AVX2-NEXT:    retq2152;2153; AVX512F-LABEL: add_v8i32_cast_cond:2154; AVX512F:       # %bb.0:2155; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12156; AVX512F-NEXT:    kmovw %edi, %k12157; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm1 {%k1} {z}2158; AVX512F-NEXT:    vpaddd %ymm1, %ymm0, %ymm02159; AVX512F-NEXT:    retq2160;2161; AVX512VL-LABEL: add_v8i32_cast_cond:2162; AVX512VL:       # %bb.0:2163; AVX512VL-NEXT:    kmovw %edi, %k12164; AVX512VL-NEXT:    vpaddd %ymm1, %ymm0, %ymm0 {%k1}2165; AVX512VL-NEXT:    retq2166  %b = bitcast i8 %pb to <8 x i1>2167  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer2168  %r = add <8 x i32> %x, %s2169  ret <8 x i32> %r2170}2171 2172define <8 x i64> @add_v8i64_cast_cond(i8 noundef zeroext %pb, <8 x i64> noundef %x, <8 x i64> noundef %y) {2173; SSE2-LABEL: add_v8i64_cast_cond:2174; SSE2:       # %bb.0:2175; SSE2-NEXT:    movd %edi, %xmm82176; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]2177; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,128]2178; SSE2-NEXT:    movdqa %xmm9, %xmm82179; SSE2-NEXT:    pand %xmm10, %xmm82180; SSE2-NEXT:    pcmpeqd %xmm10, %xmm82181; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm8[1,0,3,2]2182; SSE2-NEXT:    pand %xmm7, %xmm82183; SSE2-NEXT:    pand %xmm10, %xmm82184; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [16,32]2185; SSE2-NEXT:    movdqa %xmm9, %xmm72186; SSE2-NEXT:    pand %xmm10, %xmm72187; SSE2-NEXT:    pcmpeqd %xmm10, %xmm72188; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm7[1,0,3,2]2189; SSE2-NEXT:    pand %xmm6, %xmm72190; SSE2-NEXT:    pand %xmm10, %xmm72191; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,8]2192; SSE2-NEXT:    movdqa %xmm9, %xmm102193; SSE2-NEXT:    pand %xmm6, %xmm102194; SSE2-NEXT:    pcmpeqd %xmm6, %xmm102195; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm10[1,0,3,2]2196; SSE2-NEXT:    pand %xmm5, %xmm102197; SSE2-NEXT:    pand %xmm6, %xmm102198; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1,2]2199; SSE2-NEXT:    pand %xmm5, %xmm92200; SSE2-NEXT:    pcmpeqd %xmm5, %xmm92201; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]2202; SSE2-NEXT:    pand %xmm4, %xmm92203; SSE2-NEXT:    pand %xmm5, %xmm92204; SSE2-NEXT:    paddq %xmm9, %xmm02205; SSE2-NEXT:    paddq %xmm10, %xmm12206; SSE2-NEXT:    paddq %xmm7, %xmm22207; SSE2-NEXT:    paddq %xmm8, %xmm32208; SSE2-NEXT:    retq2209;2210; SSE42-LABEL: add_v8i64_cast_cond:2211; SSE42:       # %bb.0:2212; SSE42-NEXT:    movd %edi, %xmm82213; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]2214; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]2215; SSE42-NEXT:    movdqa %xmm9, %xmm82216; SSE42-NEXT:    pand %xmm10, %xmm82217; SSE42-NEXT:    pcmpeqq %xmm10, %xmm82218; SSE42-NEXT:    pand %xmm7, %xmm82219; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,32]2220; SSE42-NEXT:    movdqa %xmm9, %xmm102221; SSE42-NEXT:    pand %xmm7, %xmm102222; SSE42-NEXT:    pcmpeqq %xmm7, %xmm102223; SSE42-NEXT:    pand %xmm6, %xmm102224; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm6 = [4,8]2225; SSE42-NEXT:    movdqa %xmm9, %xmm72226; SSE42-NEXT:    pand %xmm6, %xmm72227; SSE42-NEXT:    pcmpeqq %xmm6, %xmm72228; SSE42-NEXT:    pand %xmm5, %xmm72229; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm5 = [1,2]2230; SSE42-NEXT:    pand %xmm5, %xmm92231; SSE42-NEXT:    pcmpeqq %xmm5, %xmm92232; SSE42-NEXT:    pand %xmm4, %xmm92233; SSE42-NEXT:    paddq %xmm9, %xmm02234; SSE42-NEXT:    paddq %xmm7, %xmm12235; SSE42-NEXT:    paddq %xmm10, %xmm22236; SSE42-NEXT:    paddq %xmm8, %xmm32237; SSE42-NEXT:    retq2238;2239; AVX2-LABEL: add_v8i64_cast_cond:2240; AVX2:       # %bb.0:2241; AVX2-NEXT:    vmovd %edi, %xmm42242; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm42243; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]2244; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm62245; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm52246; AVX2-NEXT:    vpand %ymm3, %ymm5, %ymm32247; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]2248; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm42249; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm42250; AVX2-NEXT:    vpand %ymm2, %ymm4, %ymm22251; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm02252; AVX2-NEXT:    vpaddq %ymm3, %ymm1, %ymm12253; AVX2-NEXT:    retq2254;2255; AVX512-LABEL: add_v8i64_cast_cond:2256; AVX512:       # %bb.0:2257; AVX512-NEXT:    kmovw %edi, %k12258; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm0 {%k1}2259; AVX512-NEXT:    retq2260  %b = bitcast i8 %pb to <8 x i1>2261  %s = select <8 x i1> %b, <8 x i64> %y, <8 x i64> zeroinitializer2262  %r = add <8 x i64> %x, %s2263  ret <8 x i64> %r2264}2265 2266define <4 x i32> @sub_v4i32(<4 x i1> %b, <4 x i32> noundef %x, <4 x i32> noundef %y) {2267; SSE-LABEL: sub_v4i32:2268; SSE:       # %bb.0:2269; SSE-NEXT:    pslld $31, %xmm02270; SSE-NEXT:    psrad $31, %xmm02271; SSE-NEXT:    pand %xmm2, %xmm02272; SSE-NEXT:    psubd %xmm0, %xmm12273; SSE-NEXT:    movdqa %xmm1, %xmm02274; SSE-NEXT:    retq2275;2276; AVX2-LABEL: sub_v4i32:2277; AVX2:       # %bb.0:2278; AVX2-NEXT:    vpslld $31, %xmm0, %xmm02279; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm02280; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm02281; AVX2-NEXT:    vpsubd %xmm0, %xmm1, %xmm02282; AVX2-NEXT:    retq2283;2284; AVX512F-LABEL: sub_v4i32:2285; AVX512F:       # %bb.0:2286; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm22287; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm02288; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k12289; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}2290; AVX512F-NEXT:    vpsubd %xmm0, %xmm1, %xmm02291; AVX512F-NEXT:    vzeroupper2292; AVX512F-NEXT:    retq2293;2294; AVX512VL-LABEL: sub_v4i32:2295; AVX512VL:       # %bb.0:2296; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm02297; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k12298; AVX512VL-NEXT:    vpsubd %xmm2, %xmm1, %xmm1 {%k1}2299; AVX512VL-NEXT:    vmovdqa %xmm1, %xmm02300; AVX512VL-NEXT:    retq2301  %s = select <4 x i1> %b, <4 x i32> %y, <4 x i32> zeroinitializer2302  %r = sub <4 x i32> %x, %s2303  ret <4 x i32> %r2304}2305 2306; negative test - sub is not commutative; there is no identity constant for operand 02307 2308define <8 x i32> @sub_v8i32_commute(<8 x i1> %b, <8 x i32> noundef %x, <8 x i32> noundef %y) {2309; SSE2-LABEL: sub_v8i32_commute:2310; SSE2:       # %bb.0:2311; SSE2-NEXT:    movdqa %xmm0, %xmm52312; SSE2-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]2313; SSE2-NEXT:    pslld $31, %xmm52314; SSE2-NEXT:    psrad $31, %xmm52315; SSE2-NEXT:    pand %xmm4, %xmm52316; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]2317; SSE2-NEXT:    pslld $31, %xmm02318; SSE2-NEXT:    psrad $31, %xmm02319; SSE2-NEXT:    pand %xmm3, %xmm02320; SSE2-NEXT:    psubd %xmm1, %xmm02321; SSE2-NEXT:    psubd %xmm2, %xmm52322; SSE2-NEXT:    movdqa %xmm5, %xmm12323; SSE2-NEXT:    retq2324;2325; SSE42-LABEL: sub_v8i32_commute:2326; SSE42:       # %bb.0:2327; SSE42-NEXT:    movdqa %xmm0, %xmm52328; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2329; SSE42-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]2330; SSE42-NEXT:    pslld $31, %xmm52331; SSE42-NEXT:    psrad $31, %xmm52332; SSE42-NEXT:    pand %xmm4, %xmm52333; SSE42-NEXT:    pslld $31, %xmm02334; SSE42-NEXT:    psrad $31, %xmm02335; SSE42-NEXT:    pand %xmm3, %xmm02336; SSE42-NEXT:    psubd %xmm1, %xmm02337; SSE42-NEXT:    psubd %xmm2, %xmm52338; SSE42-NEXT:    movdqa %xmm5, %xmm12339; SSE42-NEXT:    retq2340;2341; AVX2-LABEL: sub_v8i32_commute:2342; AVX2:       # %bb.0:2343; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero2344; AVX2-NEXT:    vpslld $31, %ymm0, %ymm02345; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm02346; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm02347; AVX2-NEXT:    vpsubd %ymm1, %ymm0, %ymm02348; AVX2-NEXT:    retq2349;2350; AVX512F-LABEL: sub_v8i32_commute:2351; AVX512F:       # %bb.0:2352; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm22353; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm02354; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm02355; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k12356; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}2357; AVX512F-NEXT:    vpsubd %ymm1, %ymm0, %ymm02358; AVX512F-NEXT:    retq2359;2360; AVX512VL-LABEL: sub_v8i32_commute:2361; AVX512VL:       # %bb.0:2362; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm02363; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm02364; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k12365; AVX512VL-NEXT:    vmovdqa32 %ymm2, %ymm0 {%k1} {z}2366; AVX512VL-NEXT:    vpsubd %ymm1, %ymm0, %ymm02367; AVX512VL-NEXT:    retq2368  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer2369  %r = sub <8 x i32> %s, %x2370  ret <8 x i32> %r2371}2372 2373define <16 x i32> @sub_v16i32_swap(<16 x i1> %b, <16 x i32> noundef %x, <16 x i32> noundef %y) {2374; SSE2-LABEL: sub_v16i32_swap:2375; SSE2:       # %bb.0:2376; SSE2-NEXT:    movdqa %xmm0, %xmm92377; SSE2-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2378; SSE2-NEXT:    movdqa %xmm9, %xmm82379; SSE2-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4,4,5,5,6,6,7,7]2380; SSE2-NEXT:    pslld $31, %xmm82381; SSE2-NEXT:    psrad $31, %xmm82382; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm82383; SSE2-NEXT:    punpcklwd {{.*#+}} xmm9 = xmm9[0,0,1,1,2,2,3,3]2384; SSE2-NEXT:    pslld $31, %xmm92385; SSE2-NEXT:    psrad $31, %xmm92386; SSE2-NEXT:    pandn %xmm7, %xmm92387; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2388; SSE2-NEXT:    movdqa %xmm0, %xmm72389; SSE2-NEXT:    punpckhwd {{.*#+}} xmm7 = xmm7[4,4,5,5,6,6,7,7]2390; SSE2-NEXT:    pslld $31, %xmm72391; SSE2-NEXT:    psrad $31, %xmm72392; SSE2-NEXT:    pandn %xmm6, %xmm72393; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]2394; SSE2-NEXT:    pslld $31, %xmm02395; SSE2-NEXT:    psrad $31, %xmm02396; SSE2-NEXT:    pandn %xmm5, %xmm02397; SSE2-NEXT:    psubd %xmm0, %xmm12398; SSE2-NEXT:    psubd %xmm7, %xmm22399; SSE2-NEXT:    psubd %xmm9, %xmm32400; SSE2-NEXT:    psubd %xmm8, %xmm42401; SSE2-NEXT:    movdqa %xmm1, %xmm02402; SSE2-NEXT:    movdqa %xmm2, %xmm12403; SSE2-NEXT:    movdqa %xmm3, %xmm22404; SSE2-NEXT:    movdqa %xmm4, %xmm32405; SSE2-NEXT:    retq2406;2407; SSE42-LABEL: sub_v16i32_swap:2408; SSE42:       # %bb.0:2409; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[3,3,3,3]2410; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm8 = xmm8[0],zero,zero,zero,xmm8[1],zero,zero,zero,xmm8[2],zero,zero,zero,xmm8[3],zero,zero,zero2411; SSE42-NEXT:    pslld $31, %xmm82412; SSE42-NEXT:    psrad $31, %xmm82413; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm82414; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[2,3,2,3]2415; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm9 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero2416; SSE42-NEXT:    pslld $31, %xmm92417; SSE42-NEXT:    psrad $31, %xmm92418; SSE42-NEXT:    pandn %xmm7, %xmm92419; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,1,1]2420; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero2421; SSE42-NEXT:    pslld $31, %xmm72422; SSE42-NEXT:    psrad $31, %xmm72423; SSE42-NEXT:    pandn %xmm6, %xmm72424; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2425; SSE42-NEXT:    pslld $31, %xmm02426; SSE42-NEXT:    psrad $31, %xmm02427; SSE42-NEXT:    pandn %xmm5, %xmm02428; SSE42-NEXT:    psubd %xmm0, %xmm12429; SSE42-NEXT:    psubd %xmm7, %xmm22430; SSE42-NEXT:    psubd %xmm9, %xmm32431; SSE42-NEXT:    psubd %xmm8, %xmm42432; SSE42-NEXT:    movdqa %xmm1, %xmm02433; SSE42-NEXT:    movdqa %xmm2, %xmm12434; SSE42-NEXT:    movdqa %xmm3, %xmm22435; SSE42-NEXT:    movdqa %xmm4, %xmm32436; SSE42-NEXT:    retq2437;2438; AVX2-LABEL: sub_v16i32_swap:2439; AVX2:       # %bb.0:2440; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2441; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero2442; AVX2-NEXT:    vpslld $31, %ymm5, %ymm52443; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm52444; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm42445; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero2446; AVX2-NEXT:    vpslld $31, %ymm0, %ymm02447; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm02448; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm02449; AVX2-NEXT:    vpsubd %ymm0, %ymm1, %ymm02450; AVX2-NEXT:    vpsubd %ymm4, %ymm2, %ymm12451; AVX2-NEXT:    retq2452;2453; AVX512-LABEL: sub_v16i32_swap:2454; AVX512:       # %bb.0:2455; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm02456; AVX512-NEXT:    vpslld $31, %zmm0, %zmm02457; AVX512-NEXT:    vptestnmd %zmm0, %zmm0, %k12458; AVX512-NEXT:    vpsubd %zmm2, %zmm1, %zmm1 {%k1}2459; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm02460; AVX512-NEXT:    retq2461  %s = select <16 x i1> %b, <16 x i32> zeroinitializer, <16 x i32> %y2462  %r = sub <16 x i32> %x, %s2463  ret <16 x i32> %r2464}2465 2466; negative test - sub is not commutative; there is no identity constant for operand 02467 2468define <16 x i32> @sub_v16i32_commute_swap(<16 x i1> %b, <16 x i32> noundef %x, <16 x i32> noundef %y) {2469; SSE2-LABEL: sub_v16i32_commute_swap:2470; SSE2:       # %bb.0:2471; SSE2-NEXT:    movdqa %xmm2, %xmm82472; SSE2-NEXT:    movdqa %xmm0, %xmm22473; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2474; SSE2-NEXT:    movdqa %xmm2, %xmm92475; SSE2-NEXT:    punpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]2476; SSE2-NEXT:    pslld $31, %xmm92477; SSE2-NEXT:    psrad $31, %xmm92478; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm92479; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]2480; SSE2-NEXT:    pslld $31, %xmm22481; SSE2-NEXT:    psrad $31, %xmm22482; SSE2-NEXT:    pandn %xmm7, %xmm22483; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2484; SSE2-NEXT:    movdqa %xmm0, %xmm72485; SSE2-NEXT:    punpckhwd {{.*#+}} xmm7 = xmm7[4,4,5,5,6,6,7,7]2486; SSE2-NEXT:    pslld $31, %xmm72487; SSE2-NEXT:    psrad $31, %xmm72488; SSE2-NEXT:    pandn %xmm6, %xmm72489; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]2490; SSE2-NEXT:    pslld $31, %xmm02491; SSE2-NEXT:    psrad $31, %xmm02492; SSE2-NEXT:    pandn %xmm5, %xmm02493; SSE2-NEXT:    psubd %xmm1, %xmm02494; SSE2-NEXT:    psubd %xmm8, %xmm72495; SSE2-NEXT:    psubd %xmm3, %xmm22496; SSE2-NEXT:    psubd %xmm4, %xmm92497; SSE2-NEXT:    movdqa %xmm7, %xmm12498; SSE2-NEXT:    movdqa %xmm9, %xmm32499; SSE2-NEXT:    retq2500;2501; SSE42-LABEL: sub_v16i32_commute_swap:2502; SSE42:       # %bb.0:2503; SSE42-NEXT:    movdqa %xmm3, %xmm82504; SSE42-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[3,3,3,3]2505; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero2506; SSE42-NEXT:    pslld $31, %xmm32507; SSE42-NEXT:    psrad $31, %xmm32508; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm32509; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[2,3,2,3]2510; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm9 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero2511; SSE42-NEXT:    pslld $31, %xmm92512; SSE42-NEXT:    psrad $31, %xmm92513; SSE42-NEXT:    pandn %xmm7, %xmm92514; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,1,1]2515; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero2516; SSE42-NEXT:    pslld $31, %xmm72517; SSE42-NEXT:    psrad $31, %xmm72518; SSE42-NEXT:    pandn %xmm6, %xmm72519; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2520; SSE42-NEXT:    pslld $31, %xmm02521; SSE42-NEXT:    psrad $31, %xmm02522; SSE42-NEXT:    pandn %xmm5, %xmm02523; SSE42-NEXT:    psubd %xmm1, %xmm02524; SSE42-NEXT:    psubd %xmm2, %xmm72525; SSE42-NEXT:    psubd %xmm8, %xmm92526; SSE42-NEXT:    psubd %xmm4, %xmm32527; SSE42-NEXT:    movdqa %xmm7, %xmm12528; SSE42-NEXT:    movdqa %xmm9, %xmm22529; SSE42-NEXT:    retq2530;2531; AVX2-LABEL: sub_v16i32_commute_swap:2532; AVX2:       # %bb.0:2533; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2534; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero2535; AVX2-NEXT:    vpslld $31, %ymm5, %ymm52536; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm52537; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm42538; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero2539; AVX2-NEXT:    vpslld $31, %ymm0, %ymm02540; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm02541; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm02542; AVX2-NEXT:    vpsubd %ymm1, %ymm0, %ymm02543; AVX2-NEXT:    vpsubd %ymm2, %ymm4, %ymm12544; AVX2-NEXT:    retq2545;2546; AVX512-LABEL: sub_v16i32_commute_swap:2547; AVX512:       # %bb.0:2548; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm02549; AVX512-NEXT:    vpslld $31, %zmm0, %zmm02550; AVX512-NEXT:    vptestnmd %zmm0, %zmm0, %k12551; AVX512-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}2552; AVX512-NEXT:    vpsubd %zmm1, %zmm0, %zmm02553; AVX512-NEXT:    retq2554  %s = select <16 x i1> %b, <16 x i32> zeroinitializer, <16 x i32> %y2555  %r = sub <16 x i32> %s, %x2556  ret <16 x i32> %r2557}2558 2559define <8 x i32> @sub_v8i32_cast_cond(i8 noundef zeroext %pb, <8 x i32> noundef %x, <8 x i32> noundef %y) {2560; SSE2-LABEL: sub_v8i32_cast_cond:2561; SSE2:       # %bb.0:2562; SSE2-NEXT:    movd %edi, %xmm42563; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]2564; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [16,32,64,128]2565; SSE2-NEXT:    movdqa %xmm4, %xmm62566; SSE2-NEXT:    pand %xmm5, %xmm62567; SSE2-NEXT:    pcmpeqd %xmm5, %xmm62568; SSE2-NEXT:    pand %xmm3, %xmm62569; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,2,4,8]2570; SSE2-NEXT:    pand %xmm3, %xmm42571; SSE2-NEXT:    pcmpeqd %xmm3, %xmm42572; SSE2-NEXT:    pand %xmm2, %xmm42573; SSE2-NEXT:    psubd %xmm4, %xmm02574; SSE2-NEXT:    psubd %xmm6, %xmm12575; SSE2-NEXT:    retq2576;2577; SSE42-LABEL: sub_v8i32_cast_cond:2578; SSE42:       # %bb.0:2579; SSE42-NEXT:    movd %edi, %xmm42580; SSE42-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]2581; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm5 = [16,32,64,128]2582; SSE42-NEXT:    movdqa %xmm4, %xmm62583; SSE42-NEXT:    pand %xmm5, %xmm62584; SSE42-NEXT:    pcmpeqd %xmm5, %xmm62585; SSE42-NEXT:    pand %xmm3, %xmm62586; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm3 = [1,2,4,8]2587; SSE42-NEXT:    pand %xmm3, %xmm42588; SSE42-NEXT:    pcmpeqd %xmm3, %xmm42589; SSE42-NEXT:    pand %xmm2, %xmm42590; SSE42-NEXT:    psubd %xmm4, %xmm02591; SSE42-NEXT:    psubd %xmm6, %xmm12592; SSE42-NEXT:    retq2593;2594; AVX2-LABEL: sub_v8i32_cast_cond:2595; AVX2:       # %bb.0:2596; AVX2-NEXT:    vmovd %edi, %xmm22597; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm22598; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]2599; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm22600; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm22601; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm12602; AVX2-NEXT:    vpsubd %ymm1, %ymm0, %ymm02603; AVX2-NEXT:    retq2604;2605; AVX512F-LABEL: sub_v8i32_cast_cond:2606; AVX512F:       # %bb.0:2607; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12608; AVX512F-NEXT:    kmovw %edi, %k12609; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm1 {%k1} {z}2610; AVX512F-NEXT:    vpsubd %ymm1, %ymm0, %ymm02611; AVX512F-NEXT:    retq2612;2613; AVX512VL-LABEL: sub_v8i32_cast_cond:2614; AVX512VL:       # %bb.0:2615; AVX512VL-NEXT:    kmovw %edi, %k12616; AVX512VL-NEXT:    vpsubd %ymm1, %ymm0, %ymm0 {%k1}2617; AVX512VL-NEXT:    retq2618  %b = bitcast i8 %pb to <8 x i1>2619  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer2620  %r = sub <8 x i32> %x, %s2621  ret <8 x i32> %r2622}2623 2624define <8 x i64> @sub_v8i64_cast_cond(i8 noundef zeroext %pb, <8 x i64> noundef %x, <8 x i64> noundef %y) {2625; SSE2-LABEL: sub_v8i64_cast_cond:2626; SSE2:       # %bb.0:2627; SSE2-NEXT:    movd %edi, %xmm82628; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]2629; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,128]2630; SSE2-NEXT:    movdqa %xmm9, %xmm82631; SSE2-NEXT:    pand %xmm10, %xmm82632; SSE2-NEXT:    pcmpeqd %xmm10, %xmm82633; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm8[1,0,3,2]2634; SSE2-NEXT:    pand %xmm7, %xmm82635; SSE2-NEXT:    pand %xmm10, %xmm82636; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [16,32]2637; SSE2-NEXT:    movdqa %xmm9, %xmm72638; SSE2-NEXT:    pand %xmm10, %xmm72639; SSE2-NEXT:    pcmpeqd %xmm10, %xmm72640; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm7[1,0,3,2]2641; SSE2-NEXT:    pand %xmm6, %xmm72642; SSE2-NEXT:    pand %xmm10, %xmm72643; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,8]2644; SSE2-NEXT:    movdqa %xmm9, %xmm102645; SSE2-NEXT:    pand %xmm6, %xmm102646; SSE2-NEXT:    pcmpeqd %xmm6, %xmm102647; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm10[1,0,3,2]2648; SSE2-NEXT:    pand %xmm5, %xmm102649; SSE2-NEXT:    pand %xmm6, %xmm102650; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1,2]2651; SSE2-NEXT:    pand %xmm5, %xmm92652; SSE2-NEXT:    pcmpeqd %xmm5, %xmm92653; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]2654; SSE2-NEXT:    pand %xmm4, %xmm92655; SSE2-NEXT:    pand %xmm5, %xmm92656; SSE2-NEXT:    psubq %xmm9, %xmm02657; SSE2-NEXT:    psubq %xmm10, %xmm12658; SSE2-NEXT:    psubq %xmm7, %xmm22659; SSE2-NEXT:    psubq %xmm8, %xmm32660; SSE2-NEXT:    retq2661;2662; SSE42-LABEL: sub_v8i64_cast_cond:2663; SSE42:       # %bb.0:2664; SSE42-NEXT:    movd %edi, %xmm82665; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]2666; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]2667; SSE42-NEXT:    movdqa %xmm9, %xmm82668; SSE42-NEXT:    pand %xmm10, %xmm82669; SSE42-NEXT:    pcmpeqq %xmm10, %xmm82670; SSE42-NEXT:    pand %xmm7, %xmm82671; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,32]2672; SSE42-NEXT:    movdqa %xmm9, %xmm102673; SSE42-NEXT:    pand %xmm7, %xmm102674; SSE42-NEXT:    pcmpeqq %xmm7, %xmm102675; SSE42-NEXT:    pand %xmm6, %xmm102676; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm6 = [4,8]2677; SSE42-NEXT:    movdqa %xmm9, %xmm72678; SSE42-NEXT:    pand %xmm6, %xmm72679; SSE42-NEXT:    pcmpeqq %xmm6, %xmm72680; SSE42-NEXT:    pand %xmm5, %xmm72681; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm5 = [1,2]2682; SSE42-NEXT:    pand %xmm5, %xmm92683; SSE42-NEXT:    pcmpeqq %xmm5, %xmm92684; SSE42-NEXT:    pand %xmm4, %xmm92685; SSE42-NEXT:    psubq %xmm9, %xmm02686; SSE42-NEXT:    psubq %xmm7, %xmm12687; SSE42-NEXT:    psubq %xmm10, %xmm22688; SSE42-NEXT:    psubq %xmm8, %xmm32689; SSE42-NEXT:    retq2690;2691; AVX2-LABEL: sub_v8i64_cast_cond:2692; AVX2:       # %bb.0:2693; AVX2-NEXT:    vmovd %edi, %xmm42694; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm42695; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]2696; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm62697; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm52698; AVX2-NEXT:    vpand %ymm3, %ymm5, %ymm32699; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]2700; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm42701; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm42702; AVX2-NEXT:    vpand %ymm2, %ymm4, %ymm22703; AVX2-NEXT:    vpsubq %ymm2, %ymm0, %ymm02704; AVX2-NEXT:    vpsubq %ymm3, %ymm1, %ymm12705; AVX2-NEXT:    retq2706;2707; AVX512-LABEL: sub_v8i64_cast_cond:2708; AVX512:       # %bb.0:2709; AVX512-NEXT:    kmovw %edi, %k12710; AVX512-NEXT:    vpsubq %zmm1, %zmm0, %zmm0 {%k1}2711; AVX512-NEXT:    retq2712  %b = bitcast i8 %pb to <8 x i1>2713  %s = select <8 x i1> %b, <8 x i64> %y, <8 x i64> zeroinitializer2714  %r = sub <8 x i64> %x, %s2715  ret <8 x i64> %r2716}2717 2718define <4 x i32> @mul_v4i32(<4 x i1> %b, <4 x i32> noundef %x, <4 x i32> noundef %y) {2719; SSE2-LABEL: mul_v4i32:2720; SSE2:       # %bb.0:2721; SSE2-NEXT:    pslld $31, %xmm02722; SSE2-NEXT:    psrad $31, %xmm02723; SSE2-NEXT:    pand %xmm0, %xmm22724; SSE2-NEXT:    paddd %xmm0, %xmm22725; SSE2-NEXT:    pcmpeqd %xmm0, %xmm02726; SSE2-NEXT:    psubd %xmm0, %xmm22727; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3]2728; SSE2-NEXT:    pmuludq %xmm2, %xmm12729; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]2730; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]2731; SSE2-NEXT:    pmuludq %xmm3, %xmm12732; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]2733; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2734; SSE2-NEXT:    retq2735;2736; SSE42-LABEL: mul_v4i32:2737; SSE42:       # %bb.0:2738; SSE42-NEXT:    pslld $31, %xmm02739; SSE42-NEXT:    movaps {{.*#+}} xmm3 = [1,1,1,1]2740; SSE42-NEXT:    blendvps %xmm0, %xmm2, %xmm32741; SSE42-NEXT:    pmulld %xmm1, %xmm32742; SSE42-NEXT:    movdqa %xmm3, %xmm02743; SSE42-NEXT:    retq2744;2745; AVX2-LABEL: mul_v4i32:2746; AVX2:       # %bb.0:2747; AVX2-NEXT:    vpslld $31, %xmm0, %xmm02748; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1,1,1,1]2749; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm3, %xmm02750; AVX2-NEXT:    vpmulld %xmm0, %xmm1, %xmm02751; AVX2-NEXT:    retq2752;2753; AVX512F-LABEL: mul_v4i32:2754; AVX512F:       # %bb.0:2755; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm22756; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm02757; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k12758; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm0 = [1,1,1,1]2759; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1}2760; AVX512F-NEXT:    vpmulld %xmm0, %xmm1, %xmm02761; AVX512F-NEXT:    vzeroupper2762; AVX512F-NEXT:    retq2763;2764; AVX512VL-LABEL: mul_v4i32:2765; AVX512VL:       # %bb.0:2766; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm02767; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k12768; AVX512VL-NEXT:    vpmulld %xmm2, %xmm1, %xmm1 {%k1}2769; AVX512VL-NEXT:    vmovdqa %xmm1, %xmm02770; AVX512VL-NEXT:    retq2771  %s = select <4 x i1> %b, <4 x i32> %y, <4 x i32> <i32 1, i32 1, i32 1, i32 1>2772  %r = mul <4 x i32> %x, %s2773  ret <4 x i32> %r2774}2775 2776define <8 x i32> @mul_v8i32_commute(<8 x i1> %b, <8 x i32> noundef %x, <8 x i32> noundef %y) {2777; SSE2-LABEL: mul_v8i32_commute:2778; SSE2:       # %bb.0:2779; SSE2-NEXT:    movdqa %xmm0, %xmm52780; SSE2-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]2781; SSE2-NEXT:    pslld $31, %xmm52782; SSE2-NEXT:    psrad $31, %xmm52783; SSE2-NEXT:    pand %xmm5, %xmm42784; SSE2-NEXT:    paddd %xmm5, %xmm42785; SSE2-NEXT:    pcmpeqd %xmm5, %xmm52786; SSE2-NEXT:    psubd %xmm5, %xmm42787; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]2788; SSE2-NEXT:    pslld $31, %xmm02789; SSE2-NEXT:    psrad $31, %xmm02790; SSE2-NEXT:    pand %xmm0, %xmm32791; SSE2-NEXT:    paddd %xmm0, %xmm32792; SSE2-NEXT:    psubd %xmm5, %xmm32793; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3]2794; SSE2-NEXT:    pmuludq %xmm1, %xmm32795; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]2796; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]2797; SSE2-NEXT:    pmuludq %xmm5, %xmm12798; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]2799; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2800; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]2801; SSE2-NEXT:    pmuludq %xmm2, %xmm42802; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[0,2,2,3]2803; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]2804; SSE2-NEXT:    pmuludq %xmm3, %xmm22805; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]2806; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]2807; SSE2-NEXT:    retq2808;2809; SSE42-LABEL: mul_v8i32_commute:2810; SSE42:       # %bb.0:2811; SSE42-NEXT:    movdqa %xmm0, %xmm52812; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2813; SSE42-NEXT:    pslld $31, %xmm02814; SSE42-NEXT:    movaps {{.*#+}} xmm6 = [1,1,1,1]2815; SSE42-NEXT:    movaps %xmm6, %xmm72816; SSE42-NEXT:    blendvps %xmm0, %xmm3, %xmm72817; SSE42-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]2818; SSE42-NEXT:    pslld $31, %xmm52819; SSE42-NEXT:    movdqa %xmm5, %xmm02820; SSE42-NEXT:    blendvps %xmm0, %xmm4, %xmm62821; SSE42-NEXT:    pmulld %xmm1, %xmm72822; SSE42-NEXT:    pmulld %xmm2, %xmm62823; SSE42-NEXT:    movdqa %xmm7, %xmm02824; SSE42-NEXT:    movdqa %xmm6, %xmm12825; SSE42-NEXT:    retq2826;2827; AVX2-LABEL: mul_v8i32_commute:2828; AVX2:       # %bb.0:2829; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero2830; AVX2-NEXT:    vpslld $31, %ymm0, %ymm02831; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [1,1,1,1,1,1,1,1]2832; AVX2-NEXT:    vblendvps %ymm0, %ymm2, %ymm3, %ymm02833; AVX2-NEXT:    vpmulld %ymm1, %ymm0, %ymm02834; AVX2-NEXT:    retq2835;2836; AVX512F-LABEL: mul_v8i32_commute:2837; AVX512F:       # %bb.0:2838; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm22839; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm02840; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm02841; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k12842; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm0 = [1,1,1,1,1,1,1,1]2843; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1}2844; AVX512F-NEXT:    vpmulld %ymm1, %ymm0, %ymm02845; AVX512F-NEXT:    retq2846;2847; AVX512VL-LABEL: mul_v8i32_commute:2848; AVX512VL:       # %bb.0:2849; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm02850; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm02851; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k12852; AVX512VL-NEXT:    vpmulld %ymm2, %ymm1, %ymm1 {%k1}2853; AVX512VL-NEXT:    vmovdqa %ymm1, %ymm02854; AVX512VL-NEXT:    retq2855  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>2856  %r = mul <8 x i32> %s, %x2857  ret <8 x i32> %r2858}2859 2860define <8 x i32> @mul_v8i32_cast_cond(i8 noundef zeroext %pb, <8 x i32> noundef %x, <8 x i32> noundef %y) {2861; SSE2-LABEL: mul_v8i32_cast_cond:2862; SSE2:       # %bb.0:2863; SSE2-NEXT:    movd %edi, %xmm42864; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]2865; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [16,32,64,128]2866; SSE2-NEXT:    movdqa %xmm4, %xmm62867; SSE2-NEXT:    pand %xmm5, %xmm62868; SSE2-NEXT:    pcmpeqd %xmm5, %xmm62869; SSE2-NEXT:    pand %xmm6, %xmm32870; SSE2-NEXT:    paddd %xmm6, %xmm32871; SSE2-NEXT:    pcmpeqd %xmm5, %xmm52872; SSE2-NEXT:    psubd %xmm5, %xmm32873; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [1,2,4,8]2874; SSE2-NEXT:    pand %xmm6, %xmm42875; SSE2-NEXT:    pcmpeqd %xmm6, %xmm42876; SSE2-NEXT:    pand %xmm4, %xmm22877; SSE2-NEXT:    paddd %xmm4, %xmm22878; SSE2-NEXT:    psubd %xmm5, %xmm22879; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]2880; SSE2-NEXT:    pmuludq %xmm2, %xmm02881; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]2882; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]2883; SSE2-NEXT:    pmuludq %xmm4, %xmm22884; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]2885; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]2886; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]2887; SSE2-NEXT:    pmuludq %xmm3, %xmm12888; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]2889; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]2890; SSE2-NEXT:    pmuludq %xmm2, %xmm32891; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[0,2,2,3]2892; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]2893; SSE2-NEXT:    retq2894;2895; SSE42-LABEL: mul_v8i32_cast_cond:2896; SSE42:       # %bb.0:2897; SSE42-NEXT:    movdqa %xmm0, %xmm42898; SSE42-NEXT:    movd %edi, %xmm02899; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,0,0]2900; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm6 = [16,32,64,128]2901; SSE42-NEXT:    movdqa %xmm5, %xmm02902; SSE42-NEXT:    pand %xmm6, %xmm02903; SSE42-NEXT:    pcmpeqd %xmm6, %xmm02904; SSE42-NEXT:    movaps {{.*#+}} xmm6 = [1,1,1,1]2905; SSE42-NEXT:    movaps %xmm6, %xmm72906; SSE42-NEXT:    blendvps %xmm0, %xmm3, %xmm72907; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm0 = [1,2,4,8]2908; SSE42-NEXT:    pand %xmm0, %xmm52909; SSE42-NEXT:    pcmpeqd %xmm0, %xmm52910; SSE42-NEXT:    movdqa %xmm5, %xmm02911; SSE42-NEXT:    blendvps %xmm0, %xmm2, %xmm62912; SSE42-NEXT:    pmulld %xmm4, %xmm62913; SSE42-NEXT:    pmulld %xmm7, %xmm12914; SSE42-NEXT:    movdqa %xmm6, %xmm02915; SSE42-NEXT:    retq2916;2917; AVX2-LABEL: mul_v8i32_cast_cond:2918; AVX2:       # %bb.0:2919; AVX2-NEXT:    vmovd %edi, %xmm22920; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm22921; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]2922; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm22923; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm22924; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [1,1,1,1,1,1,1,1]2925; AVX2-NEXT:    vblendvps %ymm2, %ymm1, %ymm3, %ymm12926; AVX2-NEXT:    vpmulld %ymm1, %ymm0, %ymm02927; AVX2-NEXT:    retq2928;2929; AVX512F-LABEL: mul_v8i32_cast_cond:2930; AVX512F:       # %bb.0:2931; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12932; AVX512F-NEXT:    kmovw %edi, %k12933; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [1,1,1,1,1,1,1,1]2934; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm2 {%k1}2935; AVX512F-NEXT:    vpmulld %ymm2, %ymm0, %ymm02936; AVX512F-NEXT:    retq2937;2938; AVX512VL-LABEL: mul_v8i32_cast_cond:2939; AVX512VL:       # %bb.0:2940; AVX512VL-NEXT:    kmovw %edi, %k12941; AVX512VL-NEXT:    vpmulld %ymm1, %ymm0, %ymm0 {%k1}2942; AVX512VL-NEXT:    retq2943  %b = bitcast i8 %pb to <8 x i1>2944  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>2945  %r = mul <8 x i32> %x, %s2946  ret <8 x i32> %r2947}2948 2949define <8 x i64> @mul_v8i64_cast_cond(i8 noundef zeroext %pb, <8 x i64> noundef %x, <8 x i64> noundef %y) {2950; SSE2-LABEL: mul_v8i64_cast_cond:2951; SSE2:       # %bb.0:2952; SSE2-NEXT:    movd %edi, %xmm82953; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm8[0,1,0,1]2954; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [64,128]2955; SSE2-NEXT:    movdqa %xmm10, %xmm92956; SSE2-NEXT:    pand %xmm8, %xmm92957; SSE2-NEXT:    pcmpeqd %xmm8, %xmm92958; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm9[1,0,3,2]2959; SSE2-NEXT:    pand %xmm9, %xmm82960; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [1,1]2961; SSE2-NEXT:    pand %xmm8, %xmm72962; SSE2-NEXT:    pandn %xmm11, %xmm82963; SSE2-NEXT:    por %xmm7, %xmm82964; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [16,32]2965; SSE2-NEXT:    movdqa %xmm10, %xmm122966; SSE2-NEXT:    pand %xmm9, %xmm122967; SSE2-NEXT:    pcmpeqd %xmm9, %xmm122968; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,0,3,2]2969; SSE2-NEXT:    pand %xmm12, %xmm92970; SSE2-NEXT:    pand %xmm9, %xmm62971; SSE2-NEXT:    pandn %xmm11, %xmm92972; SSE2-NEXT:    por %xmm6, %xmm92973; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [4,8]2974; SSE2-NEXT:    movdqa %xmm10, %xmm132975; SSE2-NEXT:    pand %xmm12, %xmm132976; SSE2-NEXT:    pcmpeqd %xmm12, %xmm132977; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,0,3,2]2978; SSE2-NEXT:    pand %xmm13, %xmm122979; SSE2-NEXT:    pand %xmm12, %xmm52980; SSE2-NEXT:    pandn %xmm11, %xmm122981; SSE2-NEXT:    por %xmm5, %xmm122982; SSE2-NEXT:    movdqa {{.*#+}} xmm13 = [1,2]2983; SSE2-NEXT:    pand %xmm13, %xmm102984; SSE2-NEXT:    pcmpeqd %xmm13, %xmm102985; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm10[1,0,3,2]2986; SSE2-NEXT:    pand %xmm10, %xmm132987; SSE2-NEXT:    pand %xmm13, %xmm42988; SSE2-NEXT:    pandn %xmm11, %xmm132989; SSE2-NEXT:    por %xmm4, %xmm132990; SSE2-NEXT:    movdqa %xmm0, %xmm102991; SSE2-NEXT:    pmuludq %xmm13, %xmm102992; SSE2-NEXT:    movdqa %xmm0, %xmm112993; SSE2-NEXT:    psrlq $32, %xmm112994; SSE2-NEXT:    pmuludq %xmm13, %xmm112995; SSE2-NEXT:    psrlq $32, %xmm42996; SSE2-NEXT:    pmuludq %xmm4, %xmm02997; SSE2-NEXT:    paddq %xmm11, %xmm02998; SSE2-NEXT:    psllq $32, %xmm02999; SSE2-NEXT:    paddq %xmm10, %xmm03000; SSE2-NEXT:    movdqa %xmm1, %xmm43001; SSE2-NEXT:    pmuludq %xmm12, %xmm43002; SSE2-NEXT:    movdqa %xmm1, %xmm103003; SSE2-NEXT:    psrlq $32, %xmm103004; SSE2-NEXT:    pmuludq %xmm12, %xmm103005; SSE2-NEXT:    psrlq $32, %xmm53006; SSE2-NEXT:    pmuludq %xmm5, %xmm13007; SSE2-NEXT:    paddq %xmm10, %xmm13008; SSE2-NEXT:    psllq $32, %xmm13009; SSE2-NEXT:    paddq %xmm4, %xmm13010; SSE2-NEXT:    movdqa %xmm2, %xmm43011; SSE2-NEXT:    pmuludq %xmm9, %xmm43012; SSE2-NEXT:    movdqa %xmm2, %xmm53013; SSE2-NEXT:    psrlq $32, %xmm53014; SSE2-NEXT:    pmuludq %xmm9, %xmm53015; SSE2-NEXT:    psrlq $32, %xmm63016; SSE2-NEXT:    pmuludq %xmm6, %xmm23017; SSE2-NEXT:    paddq %xmm5, %xmm23018; SSE2-NEXT:    psllq $32, %xmm23019; SSE2-NEXT:    paddq %xmm4, %xmm23020; SSE2-NEXT:    movdqa %xmm3, %xmm43021; SSE2-NEXT:    pmuludq %xmm8, %xmm43022; SSE2-NEXT:    movdqa %xmm3, %xmm53023; SSE2-NEXT:    psrlq $32, %xmm53024; SSE2-NEXT:    pmuludq %xmm8, %xmm53025; SSE2-NEXT:    psrlq $32, %xmm73026; SSE2-NEXT:    pmuludq %xmm7, %xmm33027; SSE2-NEXT:    paddq %xmm5, %xmm33028; SSE2-NEXT:    psllq $32, %xmm33029; SSE2-NEXT:    paddq %xmm4, %xmm33030; SSE2-NEXT:    retq3031;3032; SSE42-LABEL: mul_v8i64_cast_cond:3033; SSE42:       # %bb.0:3034; SSE42-NEXT:    movdqa %xmm0, %xmm93035; SSE42-NEXT:    movd %edi, %xmm03036; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[0,1,0,1]3037; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]3038; SSE42-NEXT:    movdqa %xmm8, %xmm03039; SSE42-NEXT:    pand %xmm10, %xmm03040; SSE42-NEXT:    pcmpeqq %xmm10, %xmm03041; SSE42-NEXT:    movapd {{.*#+}} xmm10 = [1,1]3042; SSE42-NEXT:    movapd %xmm10, %xmm113043; SSE42-NEXT:    blendvpd %xmm0, %xmm7, %xmm113044; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm7 = [16,32]3045; SSE42-NEXT:    movdqa %xmm8, %xmm03046; SSE42-NEXT:    pand %xmm7, %xmm03047; SSE42-NEXT:    pcmpeqq %xmm7, %xmm03048; SSE42-NEXT:    movapd %xmm10, %xmm73049; SSE42-NEXT:    blendvpd %xmm0, %xmm6, %xmm73050; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm6 = [4,8]3051; SSE42-NEXT:    movdqa %xmm8, %xmm03052; SSE42-NEXT:    pand %xmm6, %xmm03053; SSE42-NEXT:    pcmpeqq %xmm6, %xmm03054; SSE42-NEXT:    movapd %xmm10, %xmm63055; SSE42-NEXT:    blendvpd %xmm0, %xmm5, %xmm63056; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm0 = [1,2]3057; SSE42-NEXT:    pand %xmm0, %xmm83058; SSE42-NEXT:    pcmpeqq %xmm0, %xmm83059; SSE42-NEXT:    movdqa %xmm8, %xmm03060; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm103061; SSE42-NEXT:    movdqa %xmm9, %xmm03062; SSE42-NEXT:    psrlq $32, %xmm03063; SSE42-NEXT:    pmuludq %xmm10, %xmm03064; SSE42-NEXT:    movdqa %xmm10, %xmm43065; SSE42-NEXT:    psrlq $32, %xmm43066; SSE42-NEXT:    pmuludq %xmm9, %xmm43067; SSE42-NEXT:    paddq %xmm0, %xmm43068; SSE42-NEXT:    psllq $32, %xmm43069; SSE42-NEXT:    pmuludq %xmm9, %xmm103070; SSE42-NEXT:    paddq %xmm4, %xmm103071; SSE42-NEXT:    movdqa %xmm1, %xmm03072; SSE42-NEXT:    psrlq $32, %xmm03073; SSE42-NEXT:    pmuludq %xmm6, %xmm03074; SSE42-NEXT:    movdqa %xmm6, %xmm43075; SSE42-NEXT:    psrlq $32, %xmm43076; SSE42-NEXT:    pmuludq %xmm1, %xmm43077; SSE42-NEXT:    paddq %xmm0, %xmm43078; SSE42-NEXT:    psllq $32, %xmm43079; SSE42-NEXT:    pmuludq %xmm6, %xmm13080; SSE42-NEXT:    paddq %xmm4, %xmm13081; SSE42-NEXT:    movdqa %xmm2, %xmm03082; SSE42-NEXT:    psrlq $32, %xmm03083; SSE42-NEXT:    pmuludq %xmm7, %xmm03084; SSE42-NEXT:    movdqa %xmm7, %xmm43085; SSE42-NEXT:    psrlq $32, %xmm43086; SSE42-NEXT:    pmuludq %xmm2, %xmm43087; SSE42-NEXT:    paddq %xmm0, %xmm43088; SSE42-NEXT:    psllq $32, %xmm43089; SSE42-NEXT:    pmuludq %xmm7, %xmm23090; SSE42-NEXT:    paddq %xmm4, %xmm23091; SSE42-NEXT:    movdqa %xmm3, %xmm03092; SSE42-NEXT:    psrlq $32, %xmm03093; SSE42-NEXT:    pmuludq %xmm11, %xmm03094; SSE42-NEXT:    movdqa %xmm11, %xmm43095; SSE42-NEXT:    psrlq $32, %xmm43096; SSE42-NEXT:    pmuludq %xmm3, %xmm43097; SSE42-NEXT:    paddq %xmm0, %xmm43098; SSE42-NEXT:    psllq $32, %xmm43099; SSE42-NEXT:    pmuludq %xmm11, %xmm33100; SSE42-NEXT:    paddq %xmm4, %xmm33101; SSE42-NEXT:    movdqa %xmm10, %xmm03102; SSE42-NEXT:    retq3103;3104; AVX2-LABEL: mul_v8i64_cast_cond:3105; AVX2:       # %bb.0:3106; AVX2-NEXT:    vmovd %edi, %xmm43107; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm43108; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]3109; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm63110; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm53111; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm6 = [1,1,1,1]3112; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm6, %ymm33113; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]3114; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm43115; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm43116; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm6, %ymm23117; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm43118; AVX2-NEXT:    vpmuludq %ymm2, %ymm4, %ymm43119; AVX2-NEXT:    vpsrlq $32, %ymm2, %ymm53120; AVX2-NEXT:    vpmuludq %ymm5, %ymm0, %ymm53121; AVX2-NEXT:    vpaddq %ymm4, %ymm5, %ymm43122; AVX2-NEXT:    vpsllq $32, %ymm4, %ymm43123; AVX2-NEXT:    vpmuludq %ymm2, %ymm0, %ymm03124; AVX2-NEXT:    vpaddq %ymm4, %ymm0, %ymm03125; AVX2-NEXT:    vpsrlq $32, %ymm1, %ymm23126; AVX2-NEXT:    vpmuludq %ymm3, %ymm2, %ymm23127; AVX2-NEXT:    vpsrlq $32, %ymm3, %ymm43128; AVX2-NEXT:    vpmuludq %ymm4, %ymm1, %ymm43129; AVX2-NEXT:    vpaddq %ymm2, %ymm4, %ymm23130; AVX2-NEXT:    vpsllq $32, %ymm2, %ymm23131; AVX2-NEXT:    vpmuludq %ymm3, %ymm1, %ymm13132; AVX2-NEXT:    vpaddq %ymm2, %ymm1, %ymm13133; AVX2-NEXT:    retq3134;3135; AVX512-LABEL: mul_v8i64_cast_cond:3136; AVX512:       # %bb.0:3137; AVX512-NEXT:    kmovw %edi, %k13138; AVX512-NEXT:    vpsrlq $32, %zmm0, %zmm23139; AVX512-NEXT:    vpmuludq %zmm1, %zmm2, %zmm23140; AVX512-NEXT:    vpsrlq $32, %zmm1, %zmm33141; AVX512-NEXT:    vpmuludq %zmm3, %zmm0, %zmm33142; AVX512-NEXT:    vpaddq %zmm2, %zmm3, %zmm23143; AVX512-NEXT:    vpsllq $32, %zmm2, %zmm23144; AVX512-NEXT:    vpmuludq %zmm1, %zmm0, %zmm13145; AVX512-NEXT:    vpaddq %zmm2, %zmm1, %zmm0 {%k1}3146; AVX512-NEXT:    retq3147  %b = bitcast i8 %pb to <8 x i1>3148  %s = select <8 x i1> %b, <8 x i64> %y, <8 x i64> <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>3149  %r = mul <8 x i64> %x, %s3150  ret <8 x i64> %r3151}3152 3153define <4 x i32> @shl_v4i32(<4 x i1> %b, <4 x i32> noundef %x, <4 x i32> noundef %y) {3154; SSE2-LABEL: shl_v4i32:3155; SSE2:       # %bb.0:3156; SSE2-NEXT:    pslld $31, %xmm03157; SSE2-NEXT:    psrad $31, %xmm03158; SSE2-NEXT:    pand %xmm2, %xmm03159; SSE2-NEXT:    pslld $23, %xmm03160; SSE2-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03161; SSE2-NEXT:    cvttps2dq %xmm0, %xmm23162; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3]3163; SSE2-NEXT:    pmuludq %xmm2, %xmm13164; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]3165; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]3166; SSE2-NEXT:    pmuludq %xmm3, %xmm13167; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]3168; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3169; SSE2-NEXT:    retq3170;3171; SSE42-LABEL: shl_v4i32:3172; SSE42:       # %bb.0:3173; SSE42-NEXT:    pslld $31, %xmm03174; SSE42-NEXT:    psrad $31, %xmm03175; SSE42-NEXT:    pand %xmm2, %xmm03176; SSE42-NEXT:    pslld $23, %xmm03177; SSE42-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03178; SSE42-NEXT:    cvttps2dq %xmm0, %xmm03179; SSE42-NEXT:    pmulld %xmm1, %xmm03180; SSE42-NEXT:    retq3181;3182; AVX2-LABEL: shl_v4i32:3183; AVX2:       # %bb.0:3184; AVX2-NEXT:    vpslld $31, %xmm0, %xmm03185; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm03186; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm03187; AVX2-NEXT:    vpsllvd %xmm0, %xmm1, %xmm03188; AVX2-NEXT:    retq3189;3190; AVX512F-LABEL: shl_v4i32:3191; AVX512F:       # %bb.0:3192; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm23193; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm03194; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k13195; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}3196; AVX512F-NEXT:    vpsllvd %xmm0, %xmm1, %xmm03197; AVX512F-NEXT:    vzeroupper3198; AVX512F-NEXT:    retq3199;3200; AVX512VL-LABEL: shl_v4i32:3201; AVX512VL:       # %bb.0:3202; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm03203; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k13204; AVX512VL-NEXT:    vpsllvd %xmm2, %xmm1, %xmm1 {%k1}3205; AVX512VL-NEXT:    vmovdqa %xmm1, %xmm03206; AVX512VL-NEXT:    retq3207  %s = select <4 x i1> %b, <4 x i32> %y, <4 x i32> zeroinitializer3208  %r = shl <4 x i32> %x, %s3209  ret <4 x i32> %r3210}3211 3212; negative test - shl is not commutative; there is no identity constant for operand 03213 3214define <8 x i32> @shl_v8i32_commute(<8 x i1> %b, <8 x i32> noundef %x, <8 x i32> noundef %y) {3215; SSE2-LABEL: shl_v8i32_commute:3216; SSE2:       # %bb.0:3217; SSE2-NEXT:    movdqa %xmm0, %xmm53218; SSE2-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]3219; SSE2-NEXT:    pslld $31, %xmm53220; SSE2-NEXT:    psrad $31, %xmm53221; SSE2-NEXT:    pand %xmm4, %xmm53222; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]3223; SSE2-NEXT:    pslld $31, %xmm03224; SSE2-NEXT:    psrad $31, %xmm03225; SSE2-NEXT:    pand %xmm3, %xmm03226; SSE2-NEXT:    pslld $23, %xmm13227; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1065353216,1065353216,1065353216,1065353216]3228; SSE2-NEXT:    paddd %xmm3, %xmm13229; SSE2-NEXT:    cvttps2dq %xmm1, %xmm13230; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]3231; SSE2-NEXT:    pmuludq %xmm1, %xmm03232; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]3233; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]3234; SSE2-NEXT:    pmuludq %xmm4, %xmm13235; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]3236; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3237; SSE2-NEXT:    pslld $23, %xmm23238; SSE2-NEXT:    paddd %xmm3, %xmm23239; SSE2-NEXT:    cvttps2dq %xmm2, %xmm23240; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[1,1,3,3]3241; SSE2-NEXT:    pmuludq %xmm2, %xmm53242; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[0,2,2,3]3243; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]3244; SSE2-NEXT:    pmuludq %xmm3, %xmm23245; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]3246; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]3247; SSE2-NEXT:    retq3248;3249; SSE42-LABEL: shl_v8i32_commute:3250; SSE42:       # %bb.0:3251; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm5 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero3252; SSE42-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]3253; SSE42-NEXT:    pslld $31, %xmm03254; SSE42-NEXT:    psrad $31, %xmm03255; SSE42-NEXT:    pand %xmm4, %xmm03256; SSE42-NEXT:    pslld $31, %xmm53257; SSE42-NEXT:    psrad $31, %xmm53258; SSE42-NEXT:    pand %xmm3, %xmm53259; SSE42-NEXT:    pslld $23, %xmm13260; SSE42-NEXT:    movdqa {{.*#+}} xmm4 = [1065353216,1065353216,1065353216,1065353216]3261; SSE42-NEXT:    paddd %xmm4, %xmm13262; SSE42-NEXT:    cvttps2dq %xmm1, %xmm33263; SSE42-NEXT:    pmulld %xmm5, %xmm33264; SSE42-NEXT:    pslld $23, %xmm23265; SSE42-NEXT:    paddd %xmm4, %xmm23266; SSE42-NEXT:    cvttps2dq %xmm2, %xmm13267; SSE42-NEXT:    pmulld %xmm0, %xmm13268; SSE42-NEXT:    movdqa %xmm3, %xmm03269; SSE42-NEXT:    retq3270;3271; AVX2-LABEL: shl_v8i32_commute:3272; AVX2:       # %bb.0:3273; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero3274; AVX2-NEXT:    vpslld $31, %ymm0, %ymm03275; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm03276; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm03277; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm03278; AVX2-NEXT:    retq3279;3280; AVX512F-LABEL: shl_v8i32_commute:3281; AVX512F:       # %bb.0:3282; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm23283; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm03284; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm03285; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k13286; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}3287; AVX512F-NEXT:    vpsllvd %ymm1, %ymm0, %ymm03288; AVX512F-NEXT:    retq3289;3290; AVX512VL-LABEL: shl_v8i32_commute:3291; AVX512VL:       # %bb.0:3292; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm03293; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm03294; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k13295; AVX512VL-NEXT:    vmovdqa32 %ymm2, %ymm0 {%k1} {z}3296; AVX512VL-NEXT:    vpsllvd %ymm1, %ymm0, %ymm03297; AVX512VL-NEXT:    retq3298  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer3299  %r = shl <8 x i32> %s, %x3300  ret <8 x i32> %r3301}3302 3303define <16 x i32> @shl_v16i32_swap(<16 x i1> %b, <16 x i32> noundef %x, <16 x i32> noundef %y) {3304; SSE2-LABEL: shl_v16i32_swap:3305; SSE2:       # %bb.0:3306; SSE2-NEXT:    movdqa %xmm0, %xmm93307; SSE2-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]3308; SSE2-NEXT:    movdqa %xmm9, %xmm83309; SSE2-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4,4,5,5,6,6,7,7]3310; SSE2-NEXT:    pslld $31, %xmm83311; SSE2-NEXT:    psrad $31, %xmm83312; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm83313; SSE2-NEXT:    punpcklwd {{.*#+}} xmm9 = xmm9[0,0,1,1,2,2,3,3]3314; SSE2-NEXT:    pslld $31, %xmm93315; SSE2-NEXT:    psrad $31, %xmm93316; SSE2-NEXT:    pandn %xmm7, %xmm93317; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]3318; SSE2-NEXT:    movdqa %xmm0, %xmm73319; SSE2-NEXT:    punpckhwd {{.*#+}} xmm7 = xmm7[4,4,5,5,6,6,7,7]3320; SSE2-NEXT:    pslld $31, %xmm73321; SSE2-NEXT:    psrad $31, %xmm73322; SSE2-NEXT:    pandn %xmm6, %xmm73323; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]3324; SSE2-NEXT:    pslld $31, %xmm03325; SSE2-NEXT:    psrad $31, %xmm03326; SSE2-NEXT:    pandn %xmm5, %xmm03327; SSE2-NEXT:    pslld $23, %xmm03328; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1065353216,1065353216,1065353216,1065353216]3329; SSE2-NEXT:    paddd %xmm5, %xmm03330; SSE2-NEXT:    cvttps2dq %xmm0, %xmm63331; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm1[1,1,3,3]3332; SSE2-NEXT:    pmuludq %xmm6, %xmm13333; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]3334; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm6[1,1,3,3]3335; SSE2-NEXT:    pmuludq %xmm10, %xmm13336; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]3337; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3338; SSE2-NEXT:    pslld $23, %xmm73339; SSE2-NEXT:    paddd %xmm5, %xmm73340; SSE2-NEXT:    cvttps2dq %xmm7, %xmm63341; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]3342; SSE2-NEXT:    pmuludq %xmm6, %xmm23343; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]3344; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]3345; SSE2-NEXT:    pmuludq %xmm7, %xmm23346; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]3347; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]3348; SSE2-NEXT:    pslld $23, %xmm93349; SSE2-NEXT:    paddd %xmm5, %xmm93350; SSE2-NEXT:    cvttps2dq %xmm9, %xmm63351; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]3352; SSE2-NEXT:    pmuludq %xmm6, %xmm33353; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[0,2,2,3]3354; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]3355; SSE2-NEXT:    pmuludq %xmm7, %xmm33356; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]3357; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]3358; SSE2-NEXT:    pslld $23, %xmm83359; SSE2-NEXT:    paddd %xmm5, %xmm83360; SSE2-NEXT:    cvttps2dq %xmm8, %xmm53361; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]3362; SSE2-NEXT:    pmuludq %xmm5, %xmm43363; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3]3364; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]3365; SSE2-NEXT:    pmuludq %xmm6, %xmm43366; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]3367; SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]3368; SSE2-NEXT:    retq3369;3370; SSE42-LABEL: shl_v16i32_swap:3371; SSE42:       # %bb.0:3372; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[3,3,3,3]3373; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm8 = xmm8[0],zero,zero,zero,xmm8[1],zero,zero,zero,xmm8[2],zero,zero,zero,xmm8[3],zero,zero,zero3374; SSE42-NEXT:    pslld $31, %xmm83375; SSE42-NEXT:    psrad $31, %xmm83376; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm83377; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[2,3,2,3]3378; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm9 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero3379; SSE42-NEXT:    pslld $31, %xmm93380; SSE42-NEXT:    psrad $31, %xmm93381; SSE42-NEXT:    pandn %xmm7, %xmm93382; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,1,1]3383; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero3384; SSE42-NEXT:    pslld $31, %xmm73385; SSE42-NEXT:    psrad $31, %xmm73386; SSE42-NEXT:    pandn %xmm6, %xmm73387; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero3388; SSE42-NEXT:    pslld $31, %xmm03389; SSE42-NEXT:    psrad $31, %xmm03390; SSE42-NEXT:    pandn %xmm5, %xmm03391; SSE42-NEXT:    pslld $23, %xmm03392; SSE42-NEXT:    movdqa {{.*#+}} xmm5 = [1065353216,1065353216,1065353216,1065353216]3393; SSE42-NEXT:    paddd %xmm5, %xmm03394; SSE42-NEXT:    cvttps2dq %xmm0, %xmm03395; SSE42-NEXT:    pmulld %xmm1, %xmm03396; SSE42-NEXT:    pslld $23, %xmm73397; SSE42-NEXT:    paddd %xmm5, %xmm73398; SSE42-NEXT:    cvttps2dq %xmm7, %xmm13399; SSE42-NEXT:    pmulld %xmm2, %xmm13400; SSE42-NEXT:    pslld $23, %xmm93401; SSE42-NEXT:    paddd %xmm5, %xmm93402; SSE42-NEXT:    cvttps2dq %xmm9, %xmm23403; SSE42-NEXT:    pmulld %xmm3, %xmm23404; SSE42-NEXT:    pslld $23, %xmm83405; SSE42-NEXT:    paddd %xmm5, %xmm83406; SSE42-NEXT:    cvttps2dq %xmm8, %xmm33407; SSE42-NEXT:    pmulld %xmm4, %xmm33408; SSE42-NEXT:    retq3409;3410; AVX2-LABEL: shl_v16i32_swap:3411; AVX2:       # %bb.0:3412; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]3413; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero3414; AVX2-NEXT:    vpslld $31, %ymm5, %ymm53415; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm53416; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm43417; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero3418; AVX2-NEXT:    vpslld $31, %ymm0, %ymm03419; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm03420; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm03421; AVX2-NEXT:    vpsllvd %ymm0, %ymm1, %ymm03422; AVX2-NEXT:    vpsllvd %ymm4, %ymm2, %ymm13423; AVX2-NEXT:    retq3424;3425; AVX512-LABEL: shl_v16i32_swap:3426; AVX512:       # %bb.0:3427; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm03428; AVX512-NEXT:    vpslld $31, %zmm0, %zmm03429; AVX512-NEXT:    vptestnmd %zmm0, %zmm0, %k13430; AVX512-NEXT:    vpsllvd %zmm2, %zmm1, %zmm1 {%k1}3431; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm03432; AVX512-NEXT:    retq3433  %s = select <16 x i1> %b, <16 x i32> zeroinitializer, <16 x i32> %y3434  %r = shl <16 x i32> %x, %s3435  ret <16 x i32> %r3436}3437 3438; negative test - shl is not commutative; there is no identity constant for operand 03439 3440define <16 x i32> @shl_v16i32_commute_swap(<16 x i1> %b, <16 x i32> noundef %x, <16 x i32> noundef %y) {3441; SSE2-LABEL: shl_v16i32_commute_swap:3442; SSE2:       # %bb.0:3443; SSE2-NEXT:    movdqa %xmm0, %xmm93444; SSE2-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]3445; SSE2-NEXT:    movdqa %xmm9, %xmm83446; SSE2-NEXT:    punpckhwd {{.*#+}} xmm8 = xmm8[4,4,5,5,6,6,7,7]3447; SSE2-NEXT:    pslld $31, %xmm83448; SSE2-NEXT:    psrad $31, %xmm83449; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm83450; SSE2-NEXT:    punpcklwd {{.*#+}} xmm9 = xmm9[0,0,1,1,2,2,3,3]3451; SSE2-NEXT:    pslld $31, %xmm93452; SSE2-NEXT:    psrad $31, %xmm93453; SSE2-NEXT:    pandn %xmm7, %xmm93454; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]3455; SSE2-NEXT:    movdqa %xmm0, %xmm73456; SSE2-NEXT:    punpckhwd {{.*#+}} xmm7 = xmm7[4,4,5,5,6,6,7,7]3457; SSE2-NEXT:    pslld $31, %xmm73458; SSE2-NEXT:    psrad $31, %xmm73459; SSE2-NEXT:    pandn %xmm6, %xmm73460; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]3461; SSE2-NEXT:    pslld $31, %xmm03462; SSE2-NEXT:    psrad $31, %xmm03463; SSE2-NEXT:    pandn %xmm5, %xmm03464; SSE2-NEXT:    pslld $23, %xmm13465; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1065353216,1065353216,1065353216,1065353216]3466; SSE2-NEXT:    paddd %xmm5, %xmm13467; SSE2-NEXT:    cvttps2dq %xmm1, %xmm13468; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]3469; SSE2-NEXT:    pmuludq %xmm1, %xmm03470; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]3471; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]3472; SSE2-NEXT:    pmuludq %xmm6, %xmm13473; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]3474; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3475; SSE2-NEXT:    pslld $23, %xmm23476; SSE2-NEXT:    paddd %xmm5, %xmm23477; SSE2-NEXT:    cvttps2dq %xmm2, %xmm23478; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]3479; SSE2-NEXT:    pmuludq %xmm2, %xmm73480; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,2,2,3]3481; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]3482; SSE2-NEXT:    pmuludq %xmm6, %xmm23483; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]3484; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]3485; SSE2-NEXT:    pslld $23, %xmm33486; SSE2-NEXT:    paddd %xmm5, %xmm33487; SSE2-NEXT:    cvttps2dq %xmm3, %xmm33488; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm9[1,1,3,3]3489; SSE2-NEXT:    pmuludq %xmm3, %xmm93490; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm9[0,2,2,3]3491; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]3492; SSE2-NEXT:    pmuludq %xmm6, %xmm33493; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]3494; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]3495; SSE2-NEXT:    pslld $23, %xmm43496; SSE2-NEXT:    paddd %xmm5, %xmm43497; SSE2-NEXT:    cvttps2dq %xmm4, %xmm43498; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3]3499; SSE2-NEXT:    pmuludq %xmm4, %xmm83500; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm8[0,2,2,3]3501; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]3502; SSE2-NEXT:    pmuludq %xmm5, %xmm43503; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]3504; SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]3505; SSE2-NEXT:    retq3506;3507; SSE42-LABEL: shl_v16i32_commute_swap:3508; SSE42:       # %bb.0:3509; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[3,3,3,3]3510; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm8 = xmm8[0],zero,zero,zero,xmm8[1],zero,zero,zero,xmm8[2],zero,zero,zero,xmm8[3],zero,zero,zero3511; SSE42-NEXT:    pslld $31, %xmm83512; SSE42-NEXT:    psrad $31, %xmm83513; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm83514; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[2,3,2,3]3515; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm9 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero3516; SSE42-NEXT:    pslld $31, %xmm93517; SSE42-NEXT:    psrad $31, %xmm93518; SSE42-NEXT:    pandn %xmm7, %xmm93519; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,1,1]3520; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero3521; SSE42-NEXT:    pslld $31, %xmm73522; SSE42-NEXT:    psrad $31, %xmm73523; SSE42-NEXT:    pandn %xmm6, %xmm73524; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm6 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero3525; SSE42-NEXT:    pslld $31, %xmm63526; SSE42-NEXT:    psrad $31, %xmm63527; SSE42-NEXT:    pandn %xmm5, %xmm63528; SSE42-NEXT:    pslld $23, %xmm13529; SSE42-NEXT:    movdqa {{.*#+}} xmm5 = [1065353216,1065353216,1065353216,1065353216]3530; SSE42-NEXT:    paddd %xmm5, %xmm13531; SSE42-NEXT:    cvttps2dq %xmm1, %xmm03532; SSE42-NEXT:    pmulld %xmm6, %xmm03533; SSE42-NEXT:    pslld $23, %xmm23534; SSE42-NEXT:    paddd %xmm5, %xmm23535; SSE42-NEXT:    cvttps2dq %xmm2, %xmm13536; SSE42-NEXT:    pmulld %xmm7, %xmm13537; SSE42-NEXT:    pslld $23, %xmm33538; SSE42-NEXT:    paddd %xmm5, %xmm33539; SSE42-NEXT:    cvttps2dq %xmm3, %xmm23540; SSE42-NEXT:    pmulld %xmm9, %xmm23541; SSE42-NEXT:    pslld $23, %xmm43542; SSE42-NEXT:    paddd %xmm5, %xmm43543; SSE42-NEXT:    cvttps2dq %xmm4, %xmm33544; SSE42-NEXT:    pmulld %xmm8, %xmm33545; SSE42-NEXT:    retq3546;3547; AVX2-LABEL: shl_v16i32_commute_swap:3548; AVX2:       # %bb.0:3549; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]3550; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero3551; AVX2-NEXT:    vpslld $31, %ymm5, %ymm53552; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm53553; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm43554; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero3555; AVX2-NEXT:    vpslld $31, %ymm0, %ymm03556; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm03557; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm03558; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm03559; AVX2-NEXT:    vpsllvd %ymm2, %ymm4, %ymm13560; AVX2-NEXT:    retq3561;3562; AVX512-LABEL: shl_v16i32_commute_swap:3563; AVX512:       # %bb.0:3564; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm03565; AVX512-NEXT:    vpslld $31, %zmm0, %zmm03566; AVX512-NEXT:    vptestnmd %zmm0, %zmm0, %k13567; AVX512-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}3568; AVX512-NEXT:    vpsllvd %zmm1, %zmm0, %zmm03569; AVX512-NEXT:    retq3570  %s = select <16 x i1> %b, <16 x i32> zeroinitializer, <16 x i32> %y3571  %r = shl <16 x i32> %s, %x3572  ret <16 x i32> %r3573}3574 3575define <8 x i32> @shl_v8i32_cast_cond(i8 noundef zeroext %pb, <8 x i32> noundef %x, <8 x i32> noundef %y) {3576; SSE2-LABEL: shl_v8i32_cast_cond:3577; SSE2:       # %bb.0:3578; SSE2-NEXT:    movd %edi, %xmm43579; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,0,0]3580; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [16,32,64,128]3581; SSE2-NEXT:    movdqa %xmm5, %xmm43582; SSE2-NEXT:    pand %xmm6, %xmm43583; SSE2-NEXT:    pcmpeqd %xmm6, %xmm43584; SSE2-NEXT:    pand %xmm3, %xmm43585; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,2,4,8]3586; SSE2-NEXT:    pand %xmm3, %xmm53587; SSE2-NEXT:    pcmpeqd %xmm3, %xmm53588; SSE2-NEXT:    pand %xmm2, %xmm53589; SSE2-NEXT:    pslld $23, %xmm53590; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [1065353216,1065353216,1065353216,1065353216]3591; SSE2-NEXT:    paddd %xmm2, %xmm53592; SSE2-NEXT:    cvttps2dq %xmm5, %xmm33593; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]3594; SSE2-NEXT:    pmuludq %xmm3, %xmm03595; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]3596; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]3597; SSE2-NEXT:    pmuludq %xmm5, %xmm33598; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]3599; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]3600; SSE2-NEXT:    pslld $23, %xmm43601; SSE2-NEXT:    paddd %xmm2, %xmm43602; SSE2-NEXT:    cvttps2dq %xmm4, %xmm23603; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3]3604; SSE2-NEXT:    pmuludq %xmm2, %xmm13605; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]3606; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]3607; SSE2-NEXT:    pmuludq %xmm3, %xmm23608; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]3609; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]3610; SSE2-NEXT:    retq3611;3612; SSE42-LABEL: shl_v8i32_cast_cond:3613; SSE42:       # %bb.0:3614; SSE42-NEXT:    movd %edi, %xmm43615; SSE42-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]3616; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm5 = [16,32,64,128]3617; SSE42-NEXT:    movdqa %xmm4, %xmm63618; SSE42-NEXT:    pand %xmm5, %xmm63619; SSE42-NEXT:    pcmpeqd %xmm5, %xmm63620; SSE42-NEXT:    pand %xmm3, %xmm63621; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm3 = [1,2,4,8]3622; SSE42-NEXT:    pand %xmm3, %xmm43623; SSE42-NEXT:    pcmpeqd %xmm3, %xmm43624; SSE42-NEXT:    pand %xmm2, %xmm43625; SSE42-NEXT:    pslld $23, %xmm43626; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [1065353216,1065353216,1065353216,1065353216]3627; SSE42-NEXT:    paddd %xmm2, %xmm43628; SSE42-NEXT:    cvttps2dq %xmm4, %xmm33629; SSE42-NEXT:    pmulld %xmm3, %xmm03630; SSE42-NEXT:    pslld $23, %xmm63631; SSE42-NEXT:    paddd %xmm2, %xmm63632; SSE42-NEXT:    cvttps2dq %xmm6, %xmm23633; SSE42-NEXT:    pmulld %xmm2, %xmm13634; SSE42-NEXT:    retq3635;3636; AVX2-LABEL: shl_v8i32_cast_cond:3637; AVX2:       # %bb.0:3638; AVX2-NEXT:    vmovd %edi, %xmm23639; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm23640; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]3641; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm23642; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm23643; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm13644; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm03645; AVX2-NEXT:    retq3646;3647; AVX512F-LABEL: shl_v8i32_cast_cond:3648; AVX512F:       # %bb.0:3649; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm13650; AVX512F-NEXT:    kmovw %edi, %k13651; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm1 {%k1} {z}3652; AVX512F-NEXT:    vpsllvd %ymm1, %ymm0, %ymm03653; AVX512F-NEXT:    retq3654;3655; AVX512VL-LABEL: shl_v8i32_cast_cond:3656; AVX512VL:       # %bb.0:3657; AVX512VL-NEXT:    kmovw %edi, %k13658; AVX512VL-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0 {%k1}3659; AVX512VL-NEXT:    retq3660  %b = bitcast i8 %pb to <8 x i1>3661  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer3662  %r = shl <8 x i32> %x, %s3663  ret <8 x i32> %r3664}3665 3666define <8 x i64> @shl_v8i64_cast_cond(i8 noundef zeroext %pb, <8 x i64> noundef %x, <8 x i64> noundef %y) {3667; SSE2-LABEL: shl_v8i64_cast_cond:3668; SSE2:       # %bb.0:3669; SSE2-NEXT:    movd %edi, %xmm83670; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]3671; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,128]3672; SSE2-NEXT:    movdqa %xmm9, %xmm83673; SSE2-NEXT:    pand %xmm10, %xmm83674; SSE2-NEXT:    pcmpeqd %xmm10, %xmm83675; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm8[1,0,3,2]3676; SSE2-NEXT:    pand %xmm7, %xmm83677; SSE2-NEXT:    pand %xmm10, %xmm83678; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [16,32]3679; SSE2-NEXT:    movdqa %xmm9, %xmm73680; SSE2-NEXT:    pand %xmm10, %xmm73681; SSE2-NEXT:    pcmpeqd %xmm10, %xmm73682; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm7[1,0,3,2]3683; SSE2-NEXT:    pand %xmm6, %xmm73684; SSE2-NEXT:    pand %xmm10, %xmm73685; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,8]3686; SSE2-NEXT:    movdqa %xmm9, %xmm103687; SSE2-NEXT:    pand %xmm6, %xmm103688; SSE2-NEXT:    pcmpeqd %xmm6, %xmm103689; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm10[1,0,3,2]3690; SSE2-NEXT:    pand %xmm5, %xmm103691; SSE2-NEXT:    pand %xmm6, %xmm103692; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1,2]3693; SSE2-NEXT:    pand %xmm5, %xmm93694; SSE2-NEXT:    pcmpeqd %xmm5, %xmm93695; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]3696; SSE2-NEXT:    pand %xmm4, %xmm93697; SSE2-NEXT:    pand %xmm5, %xmm93698; SSE2-NEXT:    movdqa %xmm0, %xmm43699; SSE2-NEXT:    psllq %xmm9, %xmm43700; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]3701; SSE2-NEXT:    psllq %xmm5, %xmm03702; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm4[0],xmm0[1]3703; SSE2-NEXT:    movdqa %xmm1, %xmm43704; SSE2-NEXT:    psllq %xmm10, %xmm43705; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]3706; SSE2-NEXT:    psllq %xmm5, %xmm13707; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm4[0],xmm1[1]3708; SSE2-NEXT:    movdqa %xmm2, %xmm43709; SSE2-NEXT:    psllq %xmm7, %xmm43710; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[2,3,2,3]3711; SSE2-NEXT:    psllq %xmm5, %xmm23712; SSE2-NEXT:    movsd {{.*#+}} xmm2 = xmm4[0],xmm2[1]3713; SSE2-NEXT:    movdqa %xmm3, %xmm43714; SSE2-NEXT:    psllq %xmm8, %xmm43715; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]3716; SSE2-NEXT:    psllq %xmm5, %xmm33717; SSE2-NEXT:    movsd {{.*#+}} xmm3 = xmm4[0],xmm3[1]3718; SSE2-NEXT:    retq3719;3720; SSE42-LABEL: shl_v8i64_cast_cond:3721; SSE42:       # %bb.0:3722; SSE42-NEXT:    movd %edi, %xmm83723; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]3724; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]3725; SSE42-NEXT:    movdqa %xmm9, %xmm83726; SSE42-NEXT:    pand %xmm10, %xmm83727; SSE42-NEXT:    pcmpeqq %xmm10, %xmm83728; SSE42-NEXT:    pand %xmm7, %xmm83729; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm10 = [16,32]3730; SSE42-NEXT:    movdqa %xmm9, %xmm73731; SSE42-NEXT:    pand %xmm10, %xmm73732; SSE42-NEXT:    pcmpeqq %xmm10, %xmm73733; SSE42-NEXT:    pand %xmm6, %xmm73734; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm6 = [4,8]3735; SSE42-NEXT:    movdqa %xmm9, %xmm103736; SSE42-NEXT:    pand %xmm6, %xmm103737; SSE42-NEXT:    pcmpeqq %xmm6, %xmm103738; SSE42-NEXT:    pand %xmm5, %xmm103739; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm5 = [1,2]3740; SSE42-NEXT:    pand %xmm5, %xmm93741; SSE42-NEXT:    pcmpeqq %xmm5, %xmm93742; SSE42-NEXT:    pand %xmm4, %xmm93743; SSE42-NEXT:    movdqa %xmm0, %xmm43744; SSE42-NEXT:    psllq %xmm9, %xmm43745; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]3746; SSE42-NEXT:    psllq %xmm5, %xmm03747; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm4[0,1,2,3],xmm0[4,5,6,7]3748; SSE42-NEXT:    movdqa %xmm1, %xmm43749; SSE42-NEXT:    psllq %xmm10, %xmm43750; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]3751; SSE42-NEXT:    psllq %xmm5, %xmm13752; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm4[0,1,2,3],xmm1[4,5,6,7]3753; SSE42-NEXT:    movdqa %xmm2, %xmm43754; SSE42-NEXT:    psllq %xmm7, %xmm43755; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[2,3,2,3]3756; SSE42-NEXT:    psllq %xmm5, %xmm23757; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]3758; SSE42-NEXT:    movdqa %xmm3, %xmm43759; SSE42-NEXT:    psllq %xmm8, %xmm43760; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]3761; SSE42-NEXT:    psllq %xmm5, %xmm33762; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]3763; SSE42-NEXT:    retq3764;3765; AVX2-LABEL: shl_v8i64_cast_cond:3766; AVX2:       # %bb.0:3767; AVX2-NEXT:    vmovd %edi, %xmm43768; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm43769; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]3770; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm63771; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm53772; AVX2-NEXT:    vpand %ymm3, %ymm5, %ymm33773; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]3774; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm43775; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm43776; AVX2-NEXT:    vpand %ymm2, %ymm4, %ymm23777; AVX2-NEXT:    vpsllvq %ymm2, %ymm0, %ymm03778; AVX2-NEXT:    vpsllvq %ymm3, %ymm1, %ymm13779; AVX2-NEXT:    retq3780;3781; AVX512-LABEL: shl_v8i64_cast_cond:3782; AVX512:       # %bb.0:3783; AVX512-NEXT:    kmovw %edi, %k13784; AVX512-NEXT:    vpsllvq %zmm1, %zmm0, %zmm0 {%k1}3785; AVX512-NEXT:    retq3786  %b = bitcast i8 %pb to <8 x i1>3787  %s = select <8 x i1> %b, <8 x i64> %y, <8 x i64> zeroinitializer3788  %r = shl <8 x i64> %x, %s3789  ret <8 x i64> %r3790}3791 3792define <4 x i32> @lshr_v4i32(<4 x i1> %b, <4 x i32> noundef %x, <4 x i32> noundef %y) {3793; SSE2-LABEL: lshr_v4i32:3794; SSE2:       # %bb.0:3795; SSE2-NEXT:    pslld $31, %xmm03796; SSE2-NEXT:    psrad $31, %xmm03797; SSE2-NEXT:    pand %xmm2, %xmm03798; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm0[2,3,3,3,4,5,6,7]3799; SSE2-NEXT:    movdqa %xmm1, %xmm33800; SSE2-NEXT:    psrld %xmm2, %xmm33801; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm0[0,1,1,1,4,5,6,7]3802; SSE2-NEXT:    movdqa %xmm1, %xmm23803; SSE2-NEXT:    psrld %xmm4, %xmm23804; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]3805; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]3806; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[2,3,3,3,4,5,6,7]3807; SSE2-NEXT:    movdqa %xmm1, %xmm43808; SSE2-NEXT:    psrld %xmm3, %xmm43809; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,1,4,5,6,7]3810; SSE2-NEXT:    psrld %xmm0, %xmm13811; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm4[1]3812; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,3],xmm1[0,3]3813; SSE2-NEXT:    movaps %xmm2, %xmm03814; SSE2-NEXT:    retq3815;3816; SSE42-LABEL: lshr_v4i32:3817; SSE42:       # %bb.0:3818; SSE42-NEXT:    pslld $31, %xmm03819; SSE42-NEXT:    psrad $31, %xmm03820; SSE42-NEXT:    pand %xmm2, %xmm03821; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm0[2,3,3,3,4,5,6,7]3822; SSE42-NEXT:    movdqa %xmm1, %xmm33823; SSE42-NEXT:    psrld %xmm2, %xmm33824; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]3825; SSE42-NEXT:    pshuflw {{.*#+}} xmm4 = xmm2[2,3,3,3,4,5,6,7]3826; SSE42-NEXT:    movdqa %xmm1, %xmm53827; SSE42-NEXT:    psrld %xmm4, %xmm53828; SSE42-NEXT:    pblendw {{.*#+}} xmm5 = xmm3[0,1,2,3],xmm5[4,5,6,7]3829; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[0,1,1,1,4,5,6,7]3830; SSE42-NEXT:    movdqa %xmm1, %xmm03831; SSE42-NEXT:    psrld %xmm3, %xmm03832; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]3833; SSE42-NEXT:    psrld %xmm2, %xmm13834; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]3835; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm5[2,3],xmm0[4,5],xmm5[6,7]3836; SSE42-NEXT:    retq3837;3838; AVX2-LABEL: lshr_v4i32:3839; AVX2:       # %bb.0:3840; AVX2-NEXT:    vpslld $31, %xmm0, %xmm03841; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm03842; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm03843; AVX2-NEXT:    vpsrlvd %xmm0, %xmm1, %xmm03844; AVX2-NEXT:    retq3845;3846; AVX512F-LABEL: lshr_v4i32:3847; AVX512F:       # %bb.0:3848; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm23849; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm03850; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k13851; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}3852; AVX512F-NEXT:    vpsrlvd %xmm0, %xmm1, %xmm03853; AVX512F-NEXT:    vzeroupper3854; AVX512F-NEXT:    retq3855;3856; AVX512VL-LABEL: lshr_v4i32:3857; AVX512VL:       # %bb.0:3858; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm03859; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k13860; AVX512VL-NEXT:    vpsrlvd %xmm2, %xmm1, %xmm1 {%k1}3861; AVX512VL-NEXT:    vmovdqa %xmm1, %xmm03862; AVX512VL-NEXT:    retq3863  %s = select <4 x i1> %b, <4 x i32> %y, <4 x i32> zeroinitializer3864  %r = lshr <4 x i32> %x, %s3865  ret <4 x i32> %r3866}3867 3868; negative test - lshr is not commutative; there is no identity constant for operand 03869 3870define <8 x i32> @lshr_v8i32_commute(<8 x i1> %b, <8 x i32> noundef %x, <8 x i32> noundef %y) {3871; SSE2-LABEL: lshr_v8i32_commute:3872; SSE2:       # %bb.0:3873; SSE2-NEXT:    movdqa %xmm1, %xmm53874; SSE2-NEXT:    movdqa %xmm0, %xmm13875; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]3876; SSE2-NEXT:    pslld $31, %xmm13877; SSE2-NEXT:    psrad $31, %xmm13878; SSE2-NEXT:    pand %xmm4, %xmm13879; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]3880; SSE2-NEXT:    pslld $31, %xmm03881; SSE2-NEXT:    psrad $31, %xmm03882; SSE2-NEXT:    pand %xmm3, %xmm03883; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[2,3,2,3]3884; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm3[2,3,3,3,4,5,6,7]3885; SSE2-NEXT:    movdqa %xmm0, %xmm63886; SSE2-NEXT:    psrld %xmm4, %xmm63887; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,1,4,5,6,7]3888; SSE2-NEXT:    movdqa %xmm0, %xmm43889; SSE2-NEXT:    psrld %xmm3, %xmm43890; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm4 = xmm4[1],xmm6[1]3891; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[2,3,3,3,4,5,6,7]3892; SSE2-NEXT:    movdqa %xmm0, %xmm63893; SSE2-NEXT:    psrld %xmm3, %xmm63894; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[0,1,1,1,4,5,6,7]3895; SSE2-NEXT:    psrld %xmm3, %xmm03896; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]3897; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm4[0,3]3898; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[2,3,2,3]3899; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm3[2,3,3,3,4,5,6,7]3900; SSE2-NEXT:    movdqa %xmm1, %xmm53901; SSE2-NEXT:    psrld %xmm4, %xmm53902; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,1,4,5,6,7]3903; SSE2-NEXT:    movdqa %xmm1, %xmm43904; SSE2-NEXT:    psrld %xmm3, %xmm43905; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm4 = xmm4[1],xmm5[1]3906; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm2[2,3,3,3,4,5,6,7]3907; SSE2-NEXT:    movdqa %xmm1, %xmm53908; SSE2-NEXT:    psrld %xmm3, %xmm53909; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]3910; SSE2-NEXT:    psrld %xmm2, %xmm13911; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]3912; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm4[0,3]3913; SSE2-NEXT:    retq3914;3915; SSE42-LABEL: lshr_v8i32_commute:3916; SSE42:       # %bb.0:3917; SSE42-NEXT:    movdqa %xmm0, %xmm53918; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero3919; SSE42-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]3920; SSE42-NEXT:    pslld $31, %xmm53921; SSE42-NEXT:    psrad $31, %xmm53922; SSE42-NEXT:    pand %xmm4, %xmm53923; SSE42-NEXT:    pslld $31, %xmm03924; SSE42-NEXT:    psrad $31, %xmm03925; SSE42-NEXT:    pand %xmm3, %xmm03926; SSE42-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[2,3,2,3]3927; SSE42-NEXT:    pshuflw {{.*#+}} xmm4 = xmm3[2,3,3,3,4,5,6,7]3928; SSE42-NEXT:    movdqa %xmm0, %xmm63929; SSE42-NEXT:    psrld %xmm4, %xmm63930; SSE42-NEXT:    pshuflw {{.*#+}} xmm4 = xmm1[2,3,3,3,4,5,6,7]3931; SSE42-NEXT:    movdqa %xmm0, %xmm73932; SSE42-NEXT:    psrld %xmm4, %xmm73933; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm7[0,1,2,3],xmm6[4,5,6,7]3934; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,1,4,5,6,7]3935; SSE42-NEXT:    movdqa %xmm0, %xmm43936; SSE42-NEXT:    psrld %xmm3, %xmm43937; SSE42-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,1,1,1,4,5,6,7]3938; SSE42-NEXT:    psrld %xmm1, %xmm03939; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm4[4,5,6,7]3940; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm7[2,3],xmm0[4,5],xmm7[6,7]3941; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[2,3,2,3]3942; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm1[2,3,3,3,4,5,6,7]3943; SSE42-NEXT:    movdqa %xmm5, %xmm43944; SSE42-NEXT:    psrld %xmm3, %xmm43945; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm2[2,3,3,3,4,5,6,7]3946; SSE42-NEXT:    movdqa %xmm5, %xmm63947; SSE42-NEXT:    psrld %xmm3, %xmm63948; SSE42-NEXT:    pblendw {{.*#+}} xmm6 = xmm6[0,1,2,3],xmm4[4,5,6,7]3949; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm1[0,1,1,1,4,5,6,7]3950; SSE42-NEXT:    movdqa %xmm5, %xmm13951; SSE42-NEXT:    psrld %xmm3, %xmm13952; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]3953; SSE42-NEXT:    psrld %xmm2, %xmm53954; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm5[0,1,2,3],xmm1[4,5,6,7]3955; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm6[2,3],xmm1[4,5],xmm6[6,7]3956; SSE42-NEXT:    retq3957;3958; AVX2-LABEL: lshr_v8i32_commute:3959; AVX2:       # %bb.0:3960; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero3961; AVX2-NEXT:    vpslld $31, %ymm0, %ymm03962; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm03963; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm03964; AVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm03965; AVX2-NEXT:    retq3966;3967; AVX512F-LABEL: lshr_v8i32_commute:3968; AVX512F:       # %bb.0:3969; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm23970; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm03971; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm03972; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k13973; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}3974; AVX512F-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm03975; AVX512F-NEXT:    retq3976;3977; AVX512VL-LABEL: lshr_v8i32_commute:3978; AVX512VL:       # %bb.0:3979; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm03980; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm03981; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k13982; AVX512VL-NEXT:    vmovdqa32 %ymm2, %ymm0 {%k1} {z}3983; AVX512VL-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm03984; AVX512VL-NEXT:    retq3985  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer3986  %r = lshr <8 x i32> %s, %x3987  ret <8 x i32> %r3988}3989 3990define <16 x i32> @lshr_v16i32_swap(<16 x i1> %b, <16 x i32> noundef %x, <16 x i32> noundef %y) {3991; SSE2-LABEL: lshr_v16i32_swap:3992; SSE2:       # %bb.0:3993; SSE2-NEXT:    movdqa %xmm0, %xmm83994; SSE2-NEXT:    movdqa %xmm0, %xmm103995; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]3996; SSE2-NEXT:    movdqa %xmm10, %xmm93997; SSE2-NEXT:    punpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]3998; SSE2-NEXT:    pslld $31, %xmm93999; SSE2-NEXT:    psrad $31, %xmm94000; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm94001; SSE2-NEXT:    punpcklwd {{.*#+}} xmm10 = xmm10[0,0,1,1,2,2,3,3]4002; SSE2-NEXT:    pslld $31, %xmm104003; SSE2-NEXT:    psrad $31, %xmm104004; SSE2-NEXT:    pandn %xmm7, %xmm104005; SSE2-NEXT:    punpcklbw {{.*#+}} xmm8 = xmm8[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]4006; SSE2-NEXT:    movdqa %xmm8, %xmm74007; SSE2-NEXT:    punpckhwd {{.*#+}} xmm7 = xmm7[4,4,5,5,6,6,7,7]4008; SSE2-NEXT:    pslld $31, %xmm74009; SSE2-NEXT:    psrad $31, %xmm74010; SSE2-NEXT:    pandn %xmm6, %xmm74011; SSE2-NEXT:    punpcklwd {{.*#+}} xmm8 = xmm8[0,0,1,1,2,2,3,3]4012; SSE2-NEXT:    pslld $31, %xmm84013; SSE2-NEXT:    psrad $31, %xmm84014; SSE2-NEXT:    pandn %xmm5, %xmm84015; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm8[2,3,3,3,4,5,6,7]4016; SSE2-NEXT:    movdqa %xmm1, %xmm54017; SSE2-NEXT:    psrld %xmm0, %xmm54018; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm8[0,1,1,1,4,5,6,7]4019; SSE2-NEXT:    movdqa %xmm1, %xmm04020; SSE2-NEXT:    psrld %xmm6, %xmm04021; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]4022; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]4023; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4024; SSE2-NEXT:    movdqa %xmm1, %xmm84025; SSE2-NEXT:    psrld %xmm6, %xmm84026; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4027; SSE2-NEXT:    psrld %xmm5, %xmm14028; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm8[1]4029; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm1[0,3]4030; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm7[2,3,3,3,4,5,6,7]4031; SSE2-NEXT:    movdqa %xmm2, %xmm54032; SSE2-NEXT:    psrld %xmm1, %xmm54033; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm7[0,1,1,1,4,5,6,7]4034; SSE2-NEXT:    movdqa %xmm2, %xmm14035; SSE2-NEXT:    psrld %xmm6, %xmm14036; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]4037; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[2,3,2,3]4038; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4039; SSE2-NEXT:    movdqa %xmm2, %xmm74040; SSE2-NEXT:    psrld %xmm6, %xmm74041; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4042; SSE2-NEXT:    psrld %xmm5, %xmm24043; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm2 = xmm2[1],xmm7[1]4044; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm2[0,3]4045; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm10[2,3,3,3,4,5,6,7]4046; SSE2-NEXT:    movdqa %xmm3, %xmm54047; SSE2-NEXT:    psrld %xmm2, %xmm54048; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm10[0,1,1,1,4,5,6,7]4049; SSE2-NEXT:    movdqa %xmm3, %xmm24050; SSE2-NEXT:    psrld %xmm6, %xmm24051; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]4052; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]4053; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4054; SSE2-NEXT:    movdqa %xmm3, %xmm74055; SSE2-NEXT:    psrld %xmm6, %xmm74056; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4057; SSE2-NEXT:    psrld %xmm5, %xmm34058; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm3 = xmm3[1],xmm7[1]4059; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,3],xmm3[0,3]4060; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm9[2,3,3,3,4,5,6,7]4061; SSE2-NEXT:    movdqa %xmm4, %xmm54062; SSE2-NEXT:    psrld %xmm3, %xmm54063; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm9[0,1,1,1,4,5,6,7]4064; SSE2-NEXT:    movdqa %xmm4, %xmm34065; SSE2-NEXT:    psrld %xmm6, %xmm34066; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]4067; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]4068; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4069; SSE2-NEXT:    movdqa %xmm4, %xmm74070; SSE2-NEXT:    psrld %xmm6, %xmm74071; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4072; SSE2-NEXT:    psrld %xmm5, %xmm44073; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm4 = xmm4[1],xmm7[1]4074; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm4[0,3]4075; SSE2-NEXT:    retq4076;4077; SSE42-LABEL: lshr_v16i32_swap:4078; SSE42:       # %bb.0:4079; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[3,3,3,3]4080; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm8 = xmm8[0],zero,zero,zero,xmm8[1],zero,zero,zero,xmm8[2],zero,zero,zero,xmm8[3],zero,zero,zero4081; SSE42-NEXT:    pslld $31, %xmm84082; SSE42-NEXT:    psrad $31, %xmm84083; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm84084; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[2,3,2,3]4085; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm9 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero4086; SSE42-NEXT:    pslld $31, %xmm94087; SSE42-NEXT:    psrad $31, %xmm94088; SSE42-NEXT:    pandn %xmm7, %xmm94089; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,1,1]4090; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero4091; SSE42-NEXT:    pslld $31, %xmm74092; SSE42-NEXT:    psrad $31, %xmm74093; SSE42-NEXT:    pandn %xmm6, %xmm74094; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero4095; SSE42-NEXT:    pslld $31, %xmm04096; SSE42-NEXT:    psrad $31, %xmm04097; SSE42-NEXT:    pandn %xmm5, %xmm04098; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm0[2,3,3,3,4,5,6,7]4099; SSE42-NEXT:    movdqa %xmm1, %xmm64100; SSE42-NEXT:    psrld %xmm5, %xmm64101; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[2,3,2,3]4102; SSE42-NEXT:    pshuflw {{.*#+}} xmm10 = xmm5[2,3,3,3,4,5,6,7]4103; SSE42-NEXT:    movdqa %xmm1, %xmm114104; SSE42-NEXT:    psrld %xmm10, %xmm114105; SSE42-NEXT:    pblendw {{.*#+}} xmm11 = xmm6[0,1,2,3],xmm11[4,5,6,7]4106; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm0[0,1,1,1,4,5,6,7]4107; SSE42-NEXT:    movdqa %xmm1, %xmm04108; SSE42-NEXT:    psrld %xmm6, %xmm04109; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4110; SSE42-NEXT:    psrld %xmm5, %xmm14111; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]4112; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm11[2,3],xmm0[4,5],xmm11[6,7]4113; SSE42-NEXT:    pshuflw {{.*#+}} xmm1 = xmm7[2,3,3,3,4,5,6,7]4114; SSE42-NEXT:    movdqa %xmm2, %xmm54115; SSE42-NEXT:    psrld %xmm1, %xmm54116; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[2,3,2,3]4117; SSE42-NEXT:    pshuflw {{.*#+}} xmm1 = xmm6[2,3,3,3,4,5,6,7]4118; SSE42-NEXT:    movdqa %xmm2, %xmm104119; SSE42-NEXT:    psrld %xmm1, %xmm104120; SSE42-NEXT:    pblendw {{.*#+}} xmm10 = xmm5[0,1,2,3],xmm10[4,5,6,7]4121; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm7[0,1,1,1,4,5,6,7]4122; SSE42-NEXT:    movdqa %xmm2, %xmm14123; SSE42-NEXT:    psrld %xmm5, %xmm14124; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm6[0,1,1,1,4,5,6,7]4125; SSE42-NEXT:    psrld %xmm5, %xmm24126; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]4127; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm10[2,3],xmm1[4,5],xmm10[6,7]4128; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm9[2,3,3,3,4,5,6,7]4129; SSE42-NEXT:    movdqa %xmm3, %xmm54130; SSE42-NEXT:    psrld %xmm2, %xmm54131; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm9[2,3,2,3]4132; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm6[2,3,3,3,4,5,6,7]4133; SSE42-NEXT:    movdqa %xmm3, %xmm74134; SSE42-NEXT:    psrld %xmm2, %xmm74135; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm5[0,1,2,3],xmm7[4,5,6,7]4136; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm9[0,1,1,1,4,5,6,7]4137; SSE42-NEXT:    movdqa %xmm3, %xmm24138; SSE42-NEXT:    psrld %xmm5, %xmm24139; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm6[0,1,1,1,4,5,6,7]4140; SSE42-NEXT:    psrld %xmm5, %xmm34141; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm3[4,5,6,7]4142; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm7[2,3],xmm2[4,5],xmm7[6,7]4143; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm8[2,3,3,3,4,5,6,7]4144; SSE42-NEXT:    movdqa %xmm4, %xmm54145; SSE42-NEXT:    psrld %xmm3, %xmm54146; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[2,3,2,3]4147; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm6[2,3,3,3,4,5,6,7]4148; SSE42-NEXT:    movdqa %xmm4, %xmm74149; SSE42-NEXT:    psrld %xmm3, %xmm74150; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm5[0,1,2,3],xmm7[4,5,6,7]4151; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm8[0,1,1,1,4,5,6,7]4152; SSE42-NEXT:    movdqa %xmm4, %xmm34153; SSE42-NEXT:    psrld %xmm5, %xmm34154; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm6[0,1,1,1,4,5,6,7]4155; SSE42-NEXT:    psrld %xmm5, %xmm44156; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm4[4,5,6,7]4157; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1],xmm7[2,3],xmm3[4,5],xmm7[6,7]4158; SSE42-NEXT:    retq4159;4160; AVX2-LABEL: lshr_v16i32_swap:4161; AVX2:       # %bb.0:4162; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]4163; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero4164; AVX2-NEXT:    vpslld $31, %ymm5, %ymm54165; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm54166; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm44167; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero4168; AVX2-NEXT:    vpslld $31, %ymm0, %ymm04169; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm04170; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm04171; AVX2-NEXT:    vpsrlvd %ymm0, %ymm1, %ymm04172; AVX2-NEXT:    vpsrlvd %ymm4, %ymm2, %ymm14173; AVX2-NEXT:    retq4174;4175; AVX512-LABEL: lshr_v16i32_swap:4176; AVX512:       # %bb.0:4177; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm04178; AVX512-NEXT:    vpslld $31, %zmm0, %zmm04179; AVX512-NEXT:    vptestnmd %zmm0, %zmm0, %k14180; AVX512-NEXT:    vpsrlvd %zmm2, %zmm1, %zmm1 {%k1}4181; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm04182; AVX512-NEXT:    retq4183  %s = select <16 x i1> %b, <16 x i32> zeroinitializer, <16 x i32> %y4184  %r = lshr <16 x i32> %x, %s4185  ret <16 x i32> %r4186}4187 4188; negative test - lshr is not commutative; there is no identity constant for operand 04189 4190define <16 x i32> @lshr_v16i32_commute_swap(<16 x i1> %b, <16 x i32> noundef %x, <16 x i32> noundef %y) {4191; SSE2-LABEL: lshr_v16i32_commute_swap:4192; SSE2:       # %bb.0:4193; SSE2-NEXT:    movdqa %xmm3, %xmm84194; SSE2-NEXT:    movdqa %xmm2, %xmm94195; SSE2-NEXT:    movdqa %xmm1, %xmm104196; SSE2-NEXT:    movdqa %xmm0, %xmm24197; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]4198; SSE2-NEXT:    movdqa %xmm2, %xmm34199; SSE2-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4,4,5,5,6,6,7,7]4200; SSE2-NEXT:    pslld $31, %xmm34201; SSE2-NEXT:    psrad $31, %xmm34202; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm34203; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]4204; SSE2-NEXT:    pslld $31, %xmm24205; SSE2-NEXT:    psrad $31, %xmm24206; SSE2-NEXT:    pandn %xmm7, %xmm24207; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]4208; SSE2-NEXT:    movdqa %xmm0, %xmm14209; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]4210; SSE2-NEXT:    pslld $31, %xmm14211; SSE2-NEXT:    psrad $31, %xmm14212; SSE2-NEXT:    pandn %xmm6, %xmm14213; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]4214; SSE2-NEXT:    pslld $31, %xmm04215; SSE2-NEXT:    psrad $31, %xmm04216; SSE2-NEXT:    pandn %xmm5, %xmm04217; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]4218; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4219; SSE2-NEXT:    movdqa %xmm0, %xmm74220; SSE2-NEXT:    psrld %xmm6, %xmm74221; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4222; SSE2-NEXT:    movdqa %xmm0, %xmm64223; SSE2-NEXT:    psrld %xmm5, %xmm64224; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm6 = xmm6[1],xmm7[1]4225; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm10[2,3,3,3,4,5,6,7]4226; SSE2-NEXT:    movdqa %xmm0, %xmm74227; SSE2-NEXT:    psrld %xmm5, %xmm74228; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm10[0,1,1,1,4,5,6,7]4229; SSE2-NEXT:    psrld %xmm5, %xmm04230; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm7[0]4231; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm6[0,3]4232; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]4233; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4234; SSE2-NEXT:    movdqa %xmm1, %xmm74235; SSE2-NEXT:    psrld %xmm6, %xmm74236; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4237; SSE2-NEXT:    movdqa %xmm1, %xmm64238; SSE2-NEXT:    psrld %xmm5, %xmm64239; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm6 = xmm6[1],xmm7[1]4240; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm9[2,3,3,3,4,5,6,7]4241; SSE2-NEXT:    movdqa %xmm1, %xmm74242; SSE2-NEXT:    psrld %xmm5, %xmm74243; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm9[0,1,1,1,4,5,6,7]4244; SSE2-NEXT:    psrld %xmm5, %xmm14245; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm7[0]4246; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm6[0,3]4247; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]4248; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4249; SSE2-NEXT:    movdqa %xmm2, %xmm74250; SSE2-NEXT:    psrld %xmm6, %xmm74251; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4252; SSE2-NEXT:    movdqa %xmm2, %xmm64253; SSE2-NEXT:    psrld %xmm5, %xmm64254; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm6 = xmm6[1],xmm7[1]4255; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm8[2,3,3,3,4,5,6,7]4256; SSE2-NEXT:    movdqa %xmm2, %xmm74257; SSE2-NEXT:    psrld %xmm5, %xmm74258; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm8[0,1,1,1,4,5,6,7]4259; SSE2-NEXT:    psrld %xmm5, %xmm24260; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm7[0]4261; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,3],xmm6[0,3]4262; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[2,3,2,3]4263; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4264; SSE2-NEXT:    movdqa %xmm3, %xmm74265; SSE2-NEXT:    psrld %xmm6, %xmm74266; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4267; SSE2-NEXT:    movdqa %xmm3, %xmm64268; SSE2-NEXT:    psrld %xmm5, %xmm64269; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm6 = xmm6[1],xmm7[1]4270; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm4[2,3,3,3,4,5,6,7]4271; SSE2-NEXT:    movdqa %xmm3, %xmm74272; SSE2-NEXT:    psrld %xmm5, %xmm74273; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,1,4,5,6,7]4274; SSE2-NEXT:    psrld %xmm4, %xmm34275; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm7[0]4276; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm6[0,3]4277; SSE2-NEXT:    retq4278;4279; SSE42-LABEL: lshr_v16i32_commute_swap:4280; SSE42:       # %bb.0:4281; SSE42-NEXT:    movdqa %xmm3, %xmm84282; SSE42-NEXT:    movdqa %xmm2, %xmm104283; SSE42-NEXT:    movdqa %xmm1, %xmm94284; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,3,3,3]4285; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm3 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero4286; SSE42-NEXT:    pslld $31, %xmm34287; SSE42-NEXT:    psrad $31, %xmm34288; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm34289; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]4290; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero4291; SSE42-NEXT:    pslld $31, %xmm24292; SSE42-NEXT:    psrad $31, %xmm24293; SSE42-NEXT:    pandn %xmm7, %xmm24294; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]4295; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero4296; SSE42-NEXT:    pslld $31, %xmm14297; SSE42-NEXT:    psrad $31, %xmm14298; SSE42-NEXT:    pandn %xmm6, %xmm14299; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero4300; SSE42-NEXT:    pslld $31, %xmm04301; SSE42-NEXT:    psrad $31, %xmm04302; SSE42-NEXT:    pandn %xmm5, %xmm04303; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]4304; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4305; SSE42-NEXT:    movdqa %xmm0, %xmm74306; SSE42-NEXT:    psrld %xmm6, %xmm74307; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm9[2,3,3,3,4,5,6,7]4308; SSE42-NEXT:    movdqa %xmm0, %xmm114309; SSE42-NEXT:    psrld %xmm6, %xmm114310; SSE42-NEXT:    pblendw {{.*#+}} xmm11 = xmm11[0,1,2,3],xmm7[4,5,6,7]4311; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4312; SSE42-NEXT:    movdqa %xmm0, %xmm64313; SSE42-NEXT:    psrld %xmm5, %xmm64314; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm9[0,1,1,1,4,5,6,7]4315; SSE42-NEXT:    psrld %xmm5, %xmm04316; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm6[4,5,6,7]4317; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm11[2,3],xmm0[4,5],xmm11[6,7]4318; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]4319; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4320; SSE42-NEXT:    movdqa %xmm1, %xmm74321; SSE42-NEXT:    psrld %xmm6, %xmm74322; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm10[2,3,3,3,4,5,6,7]4323; SSE42-NEXT:    movdqa %xmm1, %xmm94324; SSE42-NEXT:    psrld %xmm6, %xmm94325; SSE42-NEXT:    pblendw {{.*#+}} xmm9 = xmm9[0,1,2,3],xmm7[4,5,6,7]4326; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4327; SSE42-NEXT:    movdqa %xmm1, %xmm64328; SSE42-NEXT:    psrld %xmm5, %xmm64329; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm10[0,1,1,1,4,5,6,7]4330; SSE42-NEXT:    psrld %xmm5, %xmm14331; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm6[4,5,6,7]4332; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm9[2,3],xmm1[4,5],xmm9[6,7]4333; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]4334; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4335; SSE42-NEXT:    movdqa %xmm2, %xmm74336; SSE42-NEXT:    psrld %xmm6, %xmm74337; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm8[2,3,3,3,4,5,6,7]4338; SSE42-NEXT:    movdqa %xmm2, %xmm94339; SSE42-NEXT:    psrld %xmm6, %xmm94340; SSE42-NEXT:    pblendw {{.*#+}} xmm9 = xmm9[0,1,2,3],xmm7[4,5,6,7]4341; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4342; SSE42-NEXT:    movdqa %xmm2, %xmm64343; SSE42-NEXT:    psrld %xmm5, %xmm64344; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm8[0,1,1,1,4,5,6,7]4345; SSE42-NEXT:    psrld %xmm5, %xmm24346; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm6[4,5,6,7]4347; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm9[2,3],xmm2[4,5],xmm9[6,7]4348; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[2,3,2,3]4349; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4350; SSE42-NEXT:    movdqa %xmm3, %xmm74351; SSE42-NEXT:    psrld %xmm6, %xmm74352; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm4[2,3,3,3,4,5,6,7]4353; SSE42-NEXT:    movdqa %xmm3, %xmm84354; SSE42-NEXT:    psrld %xmm6, %xmm84355; SSE42-NEXT:    pblendw {{.*#+}} xmm8 = xmm8[0,1,2,3],xmm7[4,5,6,7]4356; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4357; SSE42-NEXT:    movdqa %xmm3, %xmm64358; SSE42-NEXT:    psrld %xmm5, %xmm64359; SSE42-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,1,4,5,6,7]4360; SSE42-NEXT:    psrld %xmm4, %xmm34361; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm6[4,5,6,7]4362; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1],xmm8[2,3],xmm3[4,5],xmm8[6,7]4363; SSE42-NEXT:    retq4364;4365; AVX2-LABEL: lshr_v16i32_commute_swap:4366; AVX2:       # %bb.0:4367; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]4368; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero4369; AVX2-NEXT:    vpslld $31, %ymm5, %ymm54370; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm54371; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm44372; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero4373; AVX2-NEXT:    vpslld $31, %ymm0, %ymm04374; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm04375; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm04376; AVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm04377; AVX2-NEXT:    vpsrlvd %ymm2, %ymm4, %ymm14378; AVX2-NEXT:    retq4379;4380; AVX512-LABEL: lshr_v16i32_commute_swap:4381; AVX512:       # %bb.0:4382; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm04383; AVX512-NEXT:    vpslld $31, %zmm0, %zmm04384; AVX512-NEXT:    vptestnmd %zmm0, %zmm0, %k14385; AVX512-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}4386; AVX512-NEXT:    vpsrlvd %zmm1, %zmm0, %zmm04387; AVX512-NEXT:    retq4388  %s = select <16 x i1> %b, <16 x i32> zeroinitializer, <16 x i32> %y4389  %r = lshr <16 x i32> %s, %x4390  ret <16 x i32> %r4391}4392 4393define <8 x i32> @lshr_v8i32_cast_cond(i8 noundef zeroext %pb, <8 x i32> noundef %x, <8 x i32> noundef %y) {4394; SSE2-LABEL: lshr_v8i32_cast_cond:4395; SSE2:       # %bb.0:4396; SSE2-NEXT:    movd %edi, %xmm44397; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,0,0]4398; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [16,32,64,128]4399; SSE2-NEXT:    movdqa %xmm5, %xmm44400; SSE2-NEXT:    pand %xmm6, %xmm44401; SSE2-NEXT:    pcmpeqd %xmm6, %xmm44402; SSE2-NEXT:    pand %xmm3, %xmm44403; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,2,4,8]4404; SSE2-NEXT:    pand %xmm3, %xmm54405; SSE2-NEXT:    pcmpeqd %xmm3, %xmm54406; SSE2-NEXT:    pand %xmm2, %xmm54407; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm5[2,3,3,3,4,5,6,7]4408; SSE2-NEXT:    movdqa %xmm0, %xmm34409; SSE2-NEXT:    psrld %xmm2, %xmm34410; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[0,1,1,1,4,5,6,7]4411; SSE2-NEXT:    movdqa %xmm0, %xmm24412; SSE2-NEXT:    psrld %xmm6, %xmm24413; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]4414; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[2,3,2,3]4415; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm3[2,3,3,3,4,5,6,7]4416; SSE2-NEXT:    movdqa %xmm0, %xmm64417; SSE2-NEXT:    psrld %xmm5, %xmm64418; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,1,4,5,6,7]4419; SSE2-NEXT:    psrld %xmm3, %xmm04420; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm6[1]4421; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,3],xmm0[0,3]4422; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm4[2,3,3,3,4,5,6,7]4423; SSE2-NEXT:    movdqa %xmm1, %xmm54424; SSE2-NEXT:    psrld %xmm0, %xmm54425; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm4[0,1,1,1,4,5,6,7]4426; SSE2-NEXT:    movdqa %xmm1, %xmm34427; SSE2-NEXT:    psrld %xmm0, %xmm34428; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]4429; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[2,3,2,3]4430; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm0[2,3,3,3,4,5,6,7]4431; SSE2-NEXT:    movdqa %xmm1, %xmm54432; SSE2-NEXT:    psrld %xmm4, %xmm54433; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,1,4,5,6,7]4434; SSE2-NEXT:    psrld %xmm0, %xmm14435; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm5[1]4436; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm1[0,3]4437; SSE2-NEXT:    movaps %xmm2, %xmm04438; SSE2-NEXT:    movaps %xmm3, %xmm14439; SSE2-NEXT:    retq4440;4441; SSE42-LABEL: lshr_v8i32_cast_cond:4442; SSE42:       # %bb.0:4443; SSE42-NEXT:    movd %edi, %xmm44444; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,0,0]4445; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm6 = [16,32,64,128]4446; SSE42-NEXT:    movdqa %xmm5, %xmm44447; SSE42-NEXT:    pand %xmm6, %xmm44448; SSE42-NEXT:    pcmpeqd %xmm6, %xmm44449; SSE42-NEXT:    pand %xmm3, %xmm44450; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm3 = [1,2,4,8]4451; SSE42-NEXT:    pand %xmm3, %xmm54452; SSE42-NEXT:    pcmpeqd %xmm3, %xmm54453; SSE42-NEXT:    pand %xmm2, %xmm54454; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm5[2,3,3,3,4,5,6,7]4455; SSE42-NEXT:    movdqa %xmm0, %xmm34456; SSE42-NEXT:    psrld %xmm2, %xmm34457; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm5[2,3,2,3]4458; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm2[2,3,3,3,4,5,6,7]4459; SSE42-NEXT:    movdqa %xmm0, %xmm74460; SSE42-NEXT:    psrld %xmm6, %xmm74461; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm3[0,1,2,3],xmm7[4,5,6,7]4462; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[0,1,1,1,4,5,6,7]4463; SSE42-NEXT:    movdqa %xmm0, %xmm54464; SSE42-NEXT:    psrld %xmm3, %xmm54465; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]4466; SSE42-NEXT:    psrld %xmm2, %xmm04467; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm5[0,1,2,3],xmm0[4,5,6,7]4468; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm7[2,3],xmm0[4,5],xmm7[6,7]4469; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm4[2,3,3,3,4,5,6,7]4470; SSE42-NEXT:    movdqa %xmm1, %xmm34471; SSE42-NEXT:    psrld %xmm2, %xmm34472; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[2,3,2,3]4473; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm2[2,3,3,3,4,5,6,7]4474; SSE42-NEXT:    movdqa %xmm1, %xmm64475; SSE42-NEXT:    psrld %xmm5, %xmm64476; SSE42-NEXT:    pblendw {{.*#+}} xmm6 = xmm3[0,1,2,3],xmm6[4,5,6,7]4477; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm4[0,1,1,1,4,5,6,7]4478; SSE42-NEXT:    movdqa %xmm1, %xmm44479; SSE42-NEXT:    psrld %xmm3, %xmm44480; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]4481; SSE42-NEXT:    psrld %xmm2, %xmm14482; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm4[0,1,2,3],xmm1[4,5,6,7]4483; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm6[2,3],xmm1[4,5],xmm6[6,7]4484; SSE42-NEXT:    retq4485;4486; AVX2-LABEL: lshr_v8i32_cast_cond:4487; AVX2:       # %bb.0:4488; AVX2-NEXT:    vmovd %edi, %xmm24489; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm24490; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]4491; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm24492; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm24493; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm14494; AVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm04495; AVX2-NEXT:    retq4496;4497; AVX512F-LABEL: lshr_v8i32_cast_cond:4498; AVX512F:       # %bb.0:4499; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm14500; AVX512F-NEXT:    kmovw %edi, %k14501; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm1 {%k1} {z}4502; AVX512F-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm04503; AVX512F-NEXT:    retq4504;4505; AVX512VL-LABEL: lshr_v8i32_cast_cond:4506; AVX512VL:       # %bb.0:4507; AVX512VL-NEXT:    kmovw %edi, %k14508; AVX512VL-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0 {%k1}4509; AVX512VL-NEXT:    retq4510  %b = bitcast i8 %pb to <8 x i1>4511  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer4512  %r = lshr <8 x i32> %x, %s4513  ret <8 x i32> %r4514}4515 4516define <8 x i64> @lshr_v8i64_cast_cond(i8 noundef zeroext %pb, <8 x i64> noundef %x, <8 x i64> noundef %y) {4517; SSE2-LABEL: lshr_v8i64_cast_cond:4518; SSE2:       # %bb.0:4519; SSE2-NEXT:    movd %edi, %xmm84520; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]4521; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,128]4522; SSE2-NEXT:    movdqa %xmm9, %xmm84523; SSE2-NEXT:    pand %xmm10, %xmm84524; SSE2-NEXT:    pcmpeqd %xmm10, %xmm84525; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm8[1,0,3,2]4526; SSE2-NEXT:    pand %xmm7, %xmm84527; SSE2-NEXT:    pand %xmm10, %xmm84528; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [16,32]4529; SSE2-NEXT:    movdqa %xmm9, %xmm74530; SSE2-NEXT:    pand %xmm10, %xmm74531; SSE2-NEXT:    pcmpeqd %xmm10, %xmm74532; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm7[1,0,3,2]4533; SSE2-NEXT:    pand %xmm6, %xmm74534; SSE2-NEXT:    pand %xmm10, %xmm74535; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [4,8]4536; SSE2-NEXT:    movdqa %xmm9, %xmm104537; SSE2-NEXT:    pand %xmm6, %xmm104538; SSE2-NEXT:    pcmpeqd %xmm6, %xmm104539; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm10[1,0,3,2]4540; SSE2-NEXT:    pand %xmm5, %xmm104541; SSE2-NEXT:    pand %xmm6, %xmm104542; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1,2]4543; SSE2-NEXT:    pand %xmm5, %xmm94544; SSE2-NEXT:    pcmpeqd %xmm5, %xmm94545; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]4546; SSE2-NEXT:    pand %xmm4, %xmm94547; SSE2-NEXT:    pand %xmm5, %xmm94548; SSE2-NEXT:    movdqa %xmm0, %xmm44549; SSE2-NEXT:    psrlq %xmm9, %xmm44550; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]4551; SSE2-NEXT:    psrlq %xmm5, %xmm04552; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm4[0],xmm0[1]4553; SSE2-NEXT:    movdqa %xmm1, %xmm44554; SSE2-NEXT:    psrlq %xmm10, %xmm44555; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]4556; SSE2-NEXT:    psrlq %xmm5, %xmm14557; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm4[0],xmm1[1]4558; SSE2-NEXT:    movdqa %xmm2, %xmm44559; SSE2-NEXT:    psrlq %xmm7, %xmm44560; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[2,3,2,3]4561; SSE2-NEXT:    psrlq %xmm5, %xmm24562; SSE2-NEXT:    movsd {{.*#+}} xmm2 = xmm4[0],xmm2[1]4563; SSE2-NEXT:    movdqa %xmm3, %xmm44564; SSE2-NEXT:    psrlq %xmm8, %xmm44565; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]4566; SSE2-NEXT:    psrlq %xmm5, %xmm34567; SSE2-NEXT:    movsd {{.*#+}} xmm3 = xmm4[0],xmm3[1]4568; SSE2-NEXT:    retq4569;4570; SSE42-LABEL: lshr_v8i64_cast_cond:4571; SSE42:       # %bb.0:4572; SSE42-NEXT:    movd %edi, %xmm84573; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]4574; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]4575; SSE42-NEXT:    movdqa %xmm9, %xmm84576; SSE42-NEXT:    pand %xmm10, %xmm84577; SSE42-NEXT:    pcmpeqq %xmm10, %xmm84578; SSE42-NEXT:    pand %xmm7, %xmm84579; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm10 = [16,32]4580; SSE42-NEXT:    movdqa %xmm9, %xmm74581; SSE42-NEXT:    pand %xmm10, %xmm74582; SSE42-NEXT:    pcmpeqq %xmm10, %xmm74583; SSE42-NEXT:    pand %xmm6, %xmm74584; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm6 = [4,8]4585; SSE42-NEXT:    movdqa %xmm9, %xmm104586; SSE42-NEXT:    pand %xmm6, %xmm104587; SSE42-NEXT:    pcmpeqq %xmm6, %xmm104588; SSE42-NEXT:    pand %xmm5, %xmm104589; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm5 = [1,2]4590; SSE42-NEXT:    pand %xmm5, %xmm94591; SSE42-NEXT:    pcmpeqq %xmm5, %xmm94592; SSE42-NEXT:    pand %xmm4, %xmm94593; SSE42-NEXT:    movdqa %xmm0, %xmm44594; SSE42-NEXT:    psrlq %xmm9, %xmm44595; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]4596; SSE42-NEXT:    psrlq %xmm5, %xmm04597; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm4[0,1,2,3],xmm0[4,5,6,7]4598; SSE42-NEXT:    movdqa %xmm1, %xmm44599; SSE42-NEXT:    psrlq %xmm10, %xmm44600; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]4601; SSE42-NEXT:    psrlq %xmm5, %xmm14602; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm4[0,1,2,3],xmm1[4,5,6,7]4603; SSE42-NEXT:    movdqa %xmm2, %xmm44604; SSE42-NEXT:    psrlq %xmm7, %xmm44605; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[2,3,2,3]4606; SSE42-NEXT:    psrlq %xmm5, %xmm24607; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]4608; SSE42-NEXT:    movdqa %xmm3, %xmm44609; SSE42-NEXT:    psrlq %xmm8, %xmm44610; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]4611; SSE42-NEXT:    psrlq %xmm5, %xmm34612; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]4613; SSE42-NEXT:    retq4614;4615; AVX2-LABEL: lshr_v8i64_cast_cond:4616; AVX2:       # %bb.0:4617; AVX2-NEXT:    vmovd %edi, %xmm44618; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm44619; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]4620; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm64621; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm54622; AVX2-NEXT:    vpand %ymm3, %ymm5, %ymm34623; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]4624; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm44625; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm44626; AVX2-NEXT:    vpand %ymm2, %ymm4, %ymm24627; AVX2-NEXT:    vpsrlvq %ymm2, %ymm0, %ymm04628; AVX2-NEXT:    vpsrlvq %ymm3, %ymm1, %ymm14629; AVX2-NEXT:    retq4630;4631; AVX512-LABEL: lshr_v8i64_cast_cond:4632; AVX512:       # %bb.0:4633; AVX512-NEXT:    kmovw %edi, %k14634; AVX512-NEXT:    vpsrlvq %zmm1, %zmm0, %zmm0 {%k1}4635; AVX512-NEXT:    retq4636  %b = bitcast i8 %pb to <8 x i1>4637  %s = select <8 x i1> %b, <8 x i64> %y, <8 x i64> zeroinitializer4638  %r = lshr <8 x i64> %x, %s4639  ret <8 x i64> %r4640}4641 4642define <4 x i32> @ashr_v4i32(<4 x i1> %b, <4 x i32> noundef %x, <4 x i32> noundef %y) {4643; SSE2-LABEL: ashr_v4i32:4644; SSE2:       # %bb.0:4645; SSE2-NEXT:    pslld $31, %xmm04646; SSE2-NEXT:    psrad $31, %xmm04647; SSE2-NEXT:    pand %xmm2, %xmm04648; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm0[2,3,3,3,4,5,6,7]4649; SSE2-NEXT:    movdqa %xmm1, %xmm34650; SSE2-NEXT:    psrad %xmm2, %xmm34651; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm0[0,1,1,1,4,5,6,7]4652; SSE2-NEXT:    movdqa %xmm1, %xmm24653; SSE2-NEXT:    psrad %xmm4, %xmm24654; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]4655; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]4656; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[2,3,3,3,4,5,6,7]4657; SSE2-NEXT:    movdqa %xmm1, %xmm44658; SSE2-NEXT:    psrad %xmm3, %xmm44659; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,1,4,5,6,7]4660; SSE2-NEXT:    psrad %xmm0, %xmm14661; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm4[1]4662; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,3],xmm1[0,3]4663; SSE2-NEXT:    movaps %xmm2, %xmm04664; SSE2-NEXT:    retq4665;4666; SSE42-LABEL: ashr_v4i32:4667; SSE42:       # %bb.0:4668; SSE42-NEXT:    pslld $31, %xmm04669; SSE42-NEXT:    psrad $31, %xmm04670; SSE42-NEXT:    pand %xmm2, %xmm04671; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm0[2,3,3,3,4,5,6,7]4672; SSE42-NEXT:    movdqa %xmm1, %xmm34673; SSE42-NEXT:    psrad %xmm2, %xmm34674; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]4675; SSE42-NEXT:    pshuflw {{.*#+}} xmm4 = xmm2[2,3,3,3,4,5,6,7]4676; SSE42-NEXT:    movdqa %xmm1, %xmm54677; SSE42-NEXT:    psrad %xmm4, %xmm54678; SSE42-NEXT:    pblendw {{.*#+}} xmm5 = xmm3[0,1,2,3],xmm5[4,5,6,7]4679; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[0,1,1,1,4,5,6,7]4680; SSE42-NEXT:    movdqa %xmm1, %xmm04681; SSE42-NEXT:    psrad %xmm3, %xmm04682; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]4683; SSE42-NEXT:    psrad %xmm2, %xmm14684; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]4685; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm5[2,3],xmm0[4,5],xmm5[6,7]4686; SSE42-NEXT:    retq4687;4688; AVX2-LABEL: ashr_v4i32:4689; AVX2:       # %bb.0:4690; AVX2-NEXT:    vpslld $31, %xmm0, %xmm04691; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm04692; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm04693; AVX2-NEXT:    vpsravd %xmm0, %xmm1, %xmm04694; AVX2-NEXT:    retq4695;4696; AVX512F-LABEL: ashr_v4i32:4697; AVX512F:       # %bb.0:4698; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm24699; AVX512F-NEXT:    vpslld $31, %xmm0, %xmm04700; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k14701; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}4702; AVX512F-NEXT:    vpsravd %xmm0, %xmm1, %xmm04703; AVX512F-NEXT:    vzeroupper4704; AVX512F-NEXT:    retq4705;4706; AVX512VL-LABEL: ashr_v4i32:4707; AVX512VL:       # %bb.0:4708; AVX512VL-NEXT:    vpslld $31, %xmm0, %xmm04709; AVX512VL-NEXT:    vptestmd %xmm0, %xmm0, %k14710; AVX512VL-NEXT:    vpsravd %xmm2, %xmm1, %xmm1 {%k1}4711; AVX512VL-NEXT:    vmovdqa %xmm1, %xmm04712; AVX512VL-NEXT:    retq4713  %s = select <4 x i1> %b, <4 x i32> %y, <4 x i32> zeroinitializer4714  %r = ashr <4 x i32> %x, %s4715  ret <4 x i32> %r4716}4717 4718; negative test - ashr is not commutative; there is no identity constant for operand 04719 4720define <8 x i32> @ashr_v8i32_commute(<8 x i1> %b, <8 x i32> noundef %x, <8 x i32> noundef %y) {4721; SSE2-LABEL: ashr_v8i32_commute:4722; SSE2:       # %bb.0:4723; SSE2-NEXT:    movdqa %xmm1, %xmm54724; SSE2-NEXT:    movdqa %xmm0, %xmm14725; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]4726; SSE2-NEXT:    pslld $31, %xmm14727; SSE2-NEXT:    psrad $31, %xmm14728; SSE2-NEXT:    pand %xmm4, %xmm14729; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]4730; SSE2-NEXT:    pslld $31, %xmm04731; SSE2-NEXT:    psrad $31, %xmm04732; SSE2-NEXT:    pand %xmm3, %xmm04733; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[2,3,2,3]4734; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm3[2,3,3,3,4,5,6,7]4735; SSE2-NEXT:    movdqa %xmm0, %xmm64736; SSE2-NEXT:    psrad %xmm4, %xmm64737; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,1,4,5,6,7]4738; SSE2-NEXT:    movdqa %xmm0, %xmm44739; SSE2-NEXT:    psrad %xmm3, %xmm44740; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm4 = xmm4[1],xmm6[1]4741; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[2,3,3,3,4,5,6,7]4742; SSE2-NEXT:    movdqa %xmm0, %xmm64743; SSE2-NEXT:    psrad %xmm3, %xmm64744; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[0,1,1,1,4,5,6,7]4745; SSE2-NEXT:    psrad %xmm3, %xmm04746; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]4747; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm4[0,3]4748; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[2,3,2,3]4749; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm3[2,3,3,3,4,5,6,7]4750; SSE2-NEXT:    movdqa %xmm1, %xmm54751; SSE2-NEXT:    psrad %xmm4, %xmm54752; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,1,4,5,6,7]4753; SSE2-NEXT:    movdqa %xmm1, %xmm44754; SSE2-NEXT:    psrad %xmm3, %xmm44755; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm4 = xmm4[1],xmm5[1]4756; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm2[2,3,3,3,4,5,6,7]4757; SSE2-NEXT:    movdqa %xmm1, %xmm54758; SSE2-NEXT:    psrad %xmm3, %xmm54759; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]4760; SSE2-NEXT:    psrad %xmm2, %xmm14761; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]4762; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm4[0,3]4763; SSE2-NEXT:    retq4764;4765; SSE42-LABEL: ashr_v8i32_commute:4766; SSE42:       # %bb.0:4767; SSE42-NEXT:    movdqa %xmm0, %xmm54768; SSE42-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero4769; SSE42-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4,4,5,5,6,6,7,7]4770; SSE42-NEXT:    pslld $31, %xmm54771; SSE42-NEXT:    psrad $31, %xmm54772; SSE42-NEXT:    pand %xmm4, %xmm54773; SSE42-NEXT:    pslld $31, %xmm04774; SSE42-NEXT:    psrad $31, %xmm04775; SSE42-NEXT:    pand %xmm3, %xmm04776; SSE42-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[2,3,2,3]4777; SSE42-NEXT:    pshuflw {{.*#+}} xmm4 = xmm3[2,3,3,3,4,5,6,7]4778; SSE42-NEXT:    movdqa %xmm0, %xmm64779; SSE42-NEXT:    psrad %xmm4, %xmm64780; SSE42-NEXT:    pshuflw {{.*#+}} xmm4 = xmm1[2,3,3,3,4,5,6,7]4781; SSE42-NEXT:    movdqa %xmm0, %xmm74782; SSE42-NEXT:    psrad %xmm4, %xmm74783; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm7[0,1,2,3],xmm6[4,5,6,7]4784; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,1,4,5,6,7]4785; SSE42-NEXT:    movdqa %xmm0, %xmm44786; SSE42-NEXT:    psrad %xmm3, %xmm44787; SSE42-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,1,1,1,4,5,6,7]4788; SSE42-NEXT:    psrad %xmm1, %xmm04789; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm4[4,5,6,7]4790; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm7[2,3],xmm0[4,5],xmm7[6,7]4791; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[2,3,2,3]4792; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm1[2,3,3,3,4,5,6,7]4793; SSE42-NEXT:    movdqa %xmm5, %xmm44794; SSE42-NEXT:    psrad %xmm3, %xmm44795; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm2[2,3,3,3,4,5,6,7]4796; SSE42-NEXT:    movdqa %xmm5, %xmm64797; SSE42-NEXT:    psrad %xmm3, %xmm64798; SSE42-NEXT:    pblendw {{.*#+}} xmm6 = xmm6[0,1,2,3],xmm4[4,5,6,7]4799; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm1[0,1,1,1,4,5,6,7]4800; SSE42-NEXT:    movdqa %xmm5, %xmm14801; SSE42-NEXT:    psrad %xmm3, %xmm14802; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]4803; SSE42-NEXT:    psrad %xmm2, %xmm54804; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm5[0,1,2,3],xmm1[4,5,6,7]4805; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm6[2,3],xmm1[4,5],xmm6[6,7]4806; SSE42-NEXT:    retq4807;4808; AVX2-LABEL: ashr_v8i32_commute:4809; AVX2:       # %bb.0:4810; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero4811; AVX2-NEXT:    vpslld $31, %ymm0, %ymm04812; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm04813; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm04814; AVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm04815; AVX2-NEXT:    retq4816;4817; AVX512F-LABEL: ashr_v8i32_commute:4818; AVX512F:       # %bb.0:4819; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm24820; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm04821; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm04822; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k14823; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}4824; AVX512F-NEXT:    vpsravd %ymm1, %ymm0, %ymm04825; AVX512F-NEXT:    retq4826;4827; AVX512VL-LABEL: ashr_v8i32_commute:4828; AVX512VL:       # %bb.0:4829; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm04830; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm04831; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k14832; AVX512VL-NEXT:    vmovdqa32 %ymm2, %ymm0 {%k1} {z}4833; AVX512VL-NEXT:    vpsravd %ymm1, %ymm0, %ymm04834; AVX512VL-NEXT:    retq4835  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer4836  %r = ashr <8 x i32> %s, %x4837  ret <8 x i32> %r4838}4839 4840define <16 x i32> @ashr_v16i32_swap(<16 x i1> %b, <16 x i32> noundef %x, <16 x i32> noundef %y) {4841; SSE2-LABEL: ashr_v16i32_swap:4842; SSE2:       # %bb.0:4843; SSE2-NEXT:    movdqa %xmm0, %xmm84844; SSE2-NEXT:    movdqa %xmm0, %xmm104845; SSE2-NEXT:    punpckhbw {{.*#+}} xmm10 = xmm10[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]4846; SSE2-NEXT:    movdqa %xmm10, %xmm94847; SSE2-NEXT:    punpckhwd {{.*#+}} xmm9 = xmm9[4,4,5,5,6,6,7,7]4848; SSE2-NEXT:    pslld $31, %xmm94849; SSE2-NEXT:    psrad $31, %xmm94850; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm94851; SSE2-NEXT:    punpcklwd {{.*#+}} xmm10 = xmm10[0,0,1,1,2,2,3,3]4852; SSE2-NEXT:    pslld $31, %xmm104853; SSE2-NEXT:    psrad $31, %xmm104854; SSE2-NEXT:    pandn %xmm7, %xmm104855; SSE2-NEXT:    punpcklbw {{.*#+}} xmm8 = xmm8[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]4856; SSE2-NEXT:    movdqa %xmm8, %xmm74857; SSE2-NEXT:    punpckhwd {{.*#+}} xmm7 = xmm7[4,4,5,5,6,6,7,7]4858; SSE2-NEXT:    pslld $31, %xmm74859; SSE2-NEXT:    psrad $31, %xmm74860; SSE2-NEXT:    pandn %xmm6, %xmm74861; SSE2-NEXT:    punpcklwd {{.*#+}} xmm8 = xmm8[0,0,1,1,2,2,3,3]4862; SSE2-NEXT:    pslld $31, %xmm84863; SSE2-NEXT:    psrad $31, %xmm84864; SSE2-NEXT:    pandn %xmm5, %xmm84865; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm8[2,3,3,3,4,5,6,7]4866; SSE2-NEXT:    movdqa %xmm1, %xmm54867; SSE2-NEXT:    psrad %xmm0, %xmm54868; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm8[0,1,1,1,4,5,6,7]4869; SSE2-NEXT:    movdqa %xmm1, %xmm04870; SSE2-NEXT:    psrad %xmm6, %xmm04871; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]4872; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]4873; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4874; SSE2-NEXT:    movdqa %xmm1, %xmm84875; SSE2-NEXT:    psrad %xmm6, %xmm84876; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4877; SSE2-NEXT:    psrad %xmm5, %xmm14878; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm8[1]4879; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm1[0,3]4880; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm7[2,3,3,3,4,5,6,7]4881; SSE2-NEXT:    movdqa %xmm2, %xmm54882; SSE2-NEXT:    psrad %xmm1, %xmm54883; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm7[0,1,1,1,4,5,6,7]4884; SSE2-NEXT:    movdqa %xmm2, %xmm14885; SSE2-NEXT:    psrad %xmm6, %xmm14886; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]4887; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[2,3,2,3]4888; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4889; SSE2-NEXT:    movdqa %xmm2, %xmm74890; SSE2-NEXT:    psrad %xmm6, %xmm74891; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4892; SSE2-NEXT:    psrad %xmm5, %xmm24893; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm2 = xmm2[1],xmm7[1]4894; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm2[0,3]4895; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm10[2,3,3,3,4,5,6,7]4896; SSE2-NEXT:    movdqa %xmm3, %xmm54897; SSE2-NEXT:    psrad %xmm2, %xmm54898; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm10[0,1,1,1,4,5,6,7]4899; SSE2-NEXT:    movdqa %xmm3, %xmm24900; SSE2-NEXT:    psrad %xmm6, %xmm24901; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]4902; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]4903; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4904; SSE2-NEXT:    movdqa %xmm3, %xmm74905; SSE2-NEXT:    psrad %xmm6, %xmm74906; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4907; SSE2-NEXT:    psrad %xmm5, %xmm34908; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm3 = xmm3[1],xmm7[1]4909; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,3],xmm3[0,3]4910; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm9[2,3,3,3,4,5,6,7]4911; SSE2-NEXT:    movdqa %xmm4, %xmm54912; SSE2-NEXT:    psrad %xmm3, %xmm54913; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm9[0,1,1,1,4,5,6,7]4914; SSE2-NEXT:    movdqa %xmm4, %xmm34915; SSE2-NEXT:    psrad %xmm6, %xmm34916; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]4917; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]4918; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]4919; SSE2-NEXT:    movdqa %xmm4, %xmm74920; SSE2-NEXT:    psrad %xmm6, %xmm74921; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4922; SSE2-NEXT:    psrad %xmm5, %xmm44923; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm4 = xmm4[1],xmm7[1]4924; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm4[0,3]4925; SSE2-NEXT:    retq4926;4927; SSE42-LABEL: ashr_v16i32_swap:4928; SSE42:       # %bb.0:4929; SSE42-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[3,3,3,3]4930; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm8 = xmm8[0],zero,zero,zero,xmm8[1],zero,zero,zero,xmm8[2],zero,zero,zero,xmm8[3],zero,zero,zero4931; SSE42-NEXT:    pslld $31, %xmm84932; SSE42-NEXT:    psrad $31, %xmm84933; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm84934; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[2,3,2,3]4935; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm9 = xmm9[0],zero,zero,zero,xmm9[1],zero,zero,zero,xmm9[2],zero,zero,zero,xmm9[3],zero,zero,zero4936; SSE42-NEXT:    pslld $31, %xmm94937; SSE42-NEXT:    psrad $31, %xmm94938; SSE42-NEXT:    pandn %xmm7, %xmm94939; SSE42-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,1,1]4940; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm7 = xmm7[0],zero,zero,zero,xmm7[1],zero,zero,zero,xmm7[2],zero,zero,zero,xmm7[3],zero,zero,zero4941; SSE42-NEXT:    pslld $31, %xmm74942; SSE42-NEXT:    psrad $31, %xmm74943; SSE42-NEXT:    pandn %xmm6, %xmm74944; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero4945; SSE42-NEXT:    pslld $31, %xmm04946; SSE42-NEXT:    psrad $31, %xmm04947; SSE42-NEXT:    pandn %xmm5, %xmm04948; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm0[2,3,3,3,4,5,6,7]4949; SSE42-NEXT:    movdqa %xmm1, %xmm64950; SSE42-NEXT:    psrad %xmm5, %xmm64951; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[2,3,2,3]4952; SSE42-NEXT:    pshuflw {{.*#+}} xmm10 = xmm5[2,3,3,3,4,5,6,7]4953; SSE42-NEXT:    movdqa %xmm1, %xmm114954; SSE42-NEXT:    psrad %xmm10, %xmm114955; SSE42-NEXT:    pblendw {{.*#+}} xmm11 = xmm6[0,1,2,3],xmm11[4,5,6,7]4956; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm0[0,1,1,1,4,5,6,7]4957; SSE42-NEXT:    movdqa %xmm1, %xmm04958; SSE42-NEXT:    psrad %xmm6, %xmm04959; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]4960; SSE42-NEXT:    psrad %xmm5, %xmm14961; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]4962; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm11[2,3],xmm0[4,5],xmm11[6,7]4963; SSE42-NEXT:    pshuflw {{.*#+}} xmm1 = xmm7[2,3,3,3,4,5,6,7]4964; SSE42-NEXT:    movdqa %xmm2, %xmm54965; SSE42-NEXT:    psrad %xmm1, %xmm54966; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[2,3,2,3]4967; SSE42-NEXT:    pshuflw {{.*#+}} xmm1 = xmm6[2,3,3,3,4,5,6,7]4968; SSE42-NEXT:    movdqa %xmm2, %xmm104969; SSE42-NEXT:    psrad %xmm1, %xmm104970; SSE42-NEXT:    pblendw {{.*#+}} xmm10 = xmm5[0,1,2,3],xmm10[4,5,6,7]4971; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm7[0,1,1,1,4,5,6,7]4972; SSE42-NEXT:    movdqa %xmm2, %xmm14973; SSE42-NEXT:    psrad %xmm5, %xmm14974; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm6[0,1,1,1,4,5,6,7]4975; SSE42-NEXT:    psrad %xmm5, %xmm24976; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]4977; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm10[2,3],xmm1[4,5],xmm10[6,7]4978; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm9[2,3,3,3,4,5,6,7]4979; SSE42-NEXT:    movdqa %xmm3, %xmm54980; SSE42-NEXT:    psrad %xmm2, %xmm54981; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm9[2,3,2,3]4982; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm6[2,3,3,3,4,5,6,7]4983; SSE42-NEXT:    movdqa %xmm3, %xmm74984; SSE42-NEXT:    psrad %xmm2, %xmm74985; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm5[0,1,2,3],xmm7[4,5,6,7]4986; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm9[0,1,1,1,4,5,6,7]4987; SSE42-NEXT:    movdqa %xmm3, %xmm24988; SSE42-NEXT:    psrad %xmm5, %xmm24989; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm6[0,1,1,1,4,5,6,7]4990; SSE42-NEXT:    psrad %xmm5, %xmm34991; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm3[4,5,6,7]4992; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm7[2,3],xmm2[4,5],xmm7[6,7]4993; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm8[2,3,3,3,4,5,6,7]4994; SSE42-NEXT:    movdqa %xmm4, %xmm54995; SSE42-NEXT:    psrad %xmm3, %xmm54996; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[2,3,2,3]4997; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm6[2,3,3,3,4,5,6,7]4998; SSE42-NEXT:    movdqa %xmm4, %xmm74999; SSE42-NEXT:    psrad %xmm3, %xmm75000; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm5[0,1,2,3],xmm7[4,5,6,7]5001; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm8[0,1,1,1,4,5,6,7]5002; SSE42-NEXT:    movdqa %xmm4, %xmm35003; SSE42-NEXT:    psrad %xmm5, %xmm35004; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm6[0,1,1,1,4,5,6,7]5005; SSE42-NEXT:    psrad %xmm5, %xmm45006; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm4[4,5,6,7]5007; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1],xmm7[2,3],xmm3[4,5],xmm7[6,7]5008; SSE42-NEXT:    retq5009;5010; AVX2-LABEL: ashr_v16i32_swap:5011; AVX2:       # %bb.0:5012; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]5013; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero5014; AVX2-NEXT:    vpslld $31, %ymm5, %ymm55015; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm55016; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm45017; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero5018; AVX2-NEXT:    vpslld $31, %ymm0, %ymm05019; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm05020; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm05021; AVX2-NEXT:    vpsravd %ymm0, %ymm1, %ymm05022; AVX2-NEXT:    vpsravd %ymm4, %ymm2, %ymm15023; AVX2-NEXT:    retq5024;5025; AVX512-LABEL: ashr_v16i32_swap:5026; AVX512:       # %bb.0:5027; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm05028; AVX512-NEXT:    vpslld $31, %zmm0, %zmm05029; AVX512-NEXT:    vptestnmd %zmm0, %zmm0, %k15030; AVX512-NEXT:    vpsravd %zmm2, %zmm1, %zmm1 {%k1}5031; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm05032; AVX512-NEXT:    retq5033  %s = select <16 x i1> %b, <16 x i32> zeroinitializer, <16 x i32> %y5034  %r = ashr <16 x i32> %x, %s5035  ret <16 x i32> %r5036}5037 5038; negative test - ashr is not commutative; there is no identity constant for operand 05039 5040define <16 x i32> @ashr_v16i32_commute_swap(<16 x i1> %b, <16 x i32> noundef %x, <16 x i32> noundef %y) {5041; SSE2-LABEL: ashr_v16i32_commute_swap:5042; SSE2:       # %bb.0:5043; SSE2-NEXT:    movdqa %xmm3, %xmm85044; SSE2-NEXT:    movdqa %xmm2, %xmm95045; SSE2-NEXT:    movdqa %xmm1, %xmm105046; SSE2-NEXT:    movdqa %xmm0, %xmm25047; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]5048; SSE2-NEXT:    movdqa %xmm2, %xmm35049; SSE2-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4,4,5,5,6,6,7,7]5050; SSE2-NEXT:    pslld $31, %xmm35051; SSE2-NEXT:    psrad $31, %xmm35052; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm35053; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]5054; SSE2-NEXT:    pslld $31, %xmm25055; SSE2-NEXT:    psrad $31, %xmm25056; SSE2-NEXT:    pandn %xmm7, %xmm25057; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]5058; SSE2-NEXT:    movdqa %xmm0, %xmm15059; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]5060; SSE2-NEXT:    pslld $31, %xmm15061; SSE2-NEXT:    psrad $31, %xmm15062; SSE2-NEXT:    pandn %xmm6, %xmm15063; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]5064; SSE2-NEXT:    pslld $31, %xmm05065; SSE2-NEXT:    psrad $31, %xmm05066; SSE2-NEXT:    pandn %xmm5, %xmm05067; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]5068; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]5069; SSE2-NEXT:    movdqa %xmm0, %xmm75070; SSE2-NEXT:    psrad %xmm6, %xmm75071; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]5072; SSE2-NEXT:    movdqa %xmm0, %xmm65073; SSE2-NEXT:    psrad %xmm5, %xmm65074; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm6 = xmm6[1],xmm7[1]5075; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm10[2,3,3,3,4,5,6,7]5076; SSE2-NEXT:    movdqa %xmm0, %xmm75077; SSE2-NEXT:    psrad %xmm5, %xmm75078; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm10[0,1,1,1,4,5,6,7]5079; SSE2-NEXT:    psrad %xmm5, %xmm05080; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm7[0]5081; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm6[0,3]5082; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]5083; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]5084; SSE2-NEXT:    movdqa %xmm1, %xmm75085; SSE2-NEXT:    psrad %xmm6, %xmm75086; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]5087; SSE2-NEXT:    movdqa %xmm1, %xmm65088; SSE2-NEXT:    psrad %xmm5, %xmm65089; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm6 = xmm6[1],xmm7[1]5090; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm9[2,3,3,3,4,5,6,7]5091; SSE2-NEXT:    movdqa %xmm1, %xmm75092; SSE2-NEXT:    psrad %xmm5, %xmm75093; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm9[0,1,1,1,4,5,6,7]5094; SSE2-NEXT:    psrad %xmm5, %xmm15095; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm7[0]5096; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm6[0,3]5097; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]5098; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]5099; SSE2-NEXT:    movdqa %xmm2, %xmm75100; SSE2-NEXT:    psrad %xmm6, %xmm75101; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]5102; SSE2-NEXT:    movdqa %xmm2, %xmm65103; SSE2-NEXT:    psrad %xmm5, %xmm65104; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm6 = xmm6[1],xmm7[1]5105; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm8[2,3,3,3,4,5,6,7]5106; SSE2-NEXT:    movdqa %xmm2, %xmm75107; SSE2-NEXT:    psrad %xmm5, %xmm75108; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm8[0,1,1,1,4,5,6,7]5109; SSE2-NEXT:    psrad %xmm5, %xmm25110; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm7[0]5111; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,3],xmm6[0,3]5112; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[2,3,2,3]5113; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]5114; SSE2-NEXT:    movdqa %xmm3, %xmm75115; SSE2-NEXT:    psrad %xmm6, %xmm75116; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]5117; SSE2-NEXT:    movdqa %xmm3, %xmm65118; SSE2-NEXT:    psrad %xmm5, %xmm65119; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm6 = xmm6[1],xmm7[1]5120; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm4[2,3,3,3,4,5,6,7]5121; SSE2-NEXT:    movdqa %xmm3, %xmm75122; SSE2-NEXT:    psrad %xmm5, %xmm75123; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,1,4,5,6,7]5124; SSE2-NEXT:    psrad %xmm4, %xmm35125; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm7[0]5126; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm6[0,3]5127; SSE2-NEXT:    retq5128;5129; SSE42-LABEL: ashr_v16i32_commute_swap:5130; SSE42:       # %bb.0:5131; SSE42-NEXT:    movdqa %xmm3, %xmm85132; SSE42-NEXT:    movdqa %xmm2, %xmm105133; SSE42-NEXT:    movdqa %xmm1, %xmm95134; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,3,3,3]5135; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm3 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero5136; SSE42-NEXT:    pslld $31, %xmm35137; SSE42-NEXT:    psrad $31, %xmm35138; SSE42-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm35139; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]5140; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero5141; SSE42-NEXT:    pslld $31, %xmm25142; SSE42-NEXT:    psrad $31, %xmm25143; SSE42-NEXT:    pandn %xmm7, %xmm25144; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]5145; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero5146; SSE42-NEXT:    pslld $31, %xmm15147; SSE42-NEXT:    psrad $31, %xmm15148; SSE42-NEXT:    pandn %xmm6, %xmm15149; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero5150; SSE42-NEXT:    pslld $31, %xmm05151; SSE42-NEXT:    psrad $31, %xmm05152; SSE42-NEXT:    pandn %xmm5, %xmm05153; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[2,3,2,3]5154; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]5155; SSE42-NEXT:    movdqa %xmm0, %xmm75156; SSE42-NEXT:    psrad %xmm6, %xmm75157; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm9[2,3,3,3,4,5,6,7]5158; SSE42-NEXT:    movdqa %xmm0, %xmm115159; SSE42-NEXT:    psrad %xmm6, %xmm115160; SSE42-NEXT:    pblendw {{.*#+}} xmm11 = xmm11[0,1,2,3],xmm7[4,5,6,7]5161; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]5162; SSE42-NEXT:    movdqa %xmm0, %xmm65163; SSE42-NEXT:    psrad %xmm5, %xmm65164; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm9[0,1,1,1,4,5,6,7]5165; SSE42-NEXT:    psrad %xmm5, %xmm05166; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm6[4,5,6,7]5167; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm11[2,3],xmm0[4,5],xmm11[6,7]5168; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[2,3,2,3]5169; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]5170; SSE42-NEXT:    movdqa %xmm1, %xmm75171; SSE42-NEXT:    psrad %xmm6, %xmm75172; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm10[2,3,3,3,4,5,6,7]5173; SSE42-NEXT:    movdqa %xmm1, %xmm95174; SSE42-NEXT:    psrad %xmm6, %xmm95175; SSE42-NEXT:    pblendw {{.*#+}} xmm9 = xmm9[0,1,2,3],xmm7[4,5,6,7]5176; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]5177; SSE42-NEXT:    movdqa %xmm1, %xmm65178; SSE42-NEXT:    psrad %xmm5, %xmm65179; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm10[0,1,1,1,4,5,6,7]5180; SSE42-NEXT:    psrad %xmm5, %xmm15181; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm6[4,5,6,7]5182; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm9[2,3],xmm1[4,5],xmm9[6,7]5183; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[2,3,2,3]5184; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]5185; SSE42-NEXT:    movdqa %xmm2, %xmm75186; SSE42-NEXT:    psrad %xmm6, %xmm75187; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm8[2,3,3,3,4,5,6,7]5188; SSE42-NEXT:    movdqa %xmm2, %xmm95189; SSE42-NEXT:    psrad %xmm6, %xmm95190; SSE42-NEXT:    pblendw {{.*#+}} xmm9 = xmm9[0,1,2,3],xmm7[4,5,6,7]5191; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]5192; SSE42-NEXT:    movdqa %xmm2, %xmm65193; SSE42-NEXT:    psrad %xmm5, %xmm65194; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm8[0,1,1,1,4,5,6,7]5195; SSE42-NEXT:    psrad %xmm5, %xmm25196; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm6[4,5,6,7]5197; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0,1],xmm9[2,3],xmm2[4,5],xmm9[6,7]5198; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[2,3,2,3]5199; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[2,3,3,3,4,5,6,7]5200; SSE42-NEXT:    movdqa %xmm3, %xmm75201; SSE42-NEXT:    psrad %xmm6, %xmm75202; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm4[2,3,3,3,4,5,6,7]5203; SSE42-NEXT:    movdqa %xmm3, %xmm85204; SSE42-NEXT:    psrad %xmm6, %xmm85205; SSE42-NEXT:    pblendw {{.*#+}} xmm8 = xmm8[0,1,2,3],xmm7[4,5,6,7]5206; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,1,4,5,6,7]5207; SSE42-NEXT:    movdqa %xmm3, %xmm65208; SSE42-NEXT:    psrad %xmm5, %xmm65209; SSE42-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,1,4,5,6,7]5210; SSE42-NEXT:    psrad %xmm4, %xmm35211; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm6[4,5,6,7]5212; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1],xmm8[2,3],xmm3[4,5],xmm8[6,7]5213; SSE42-NEXT:    retq5214;5215; AVX2-LABEL: ashr_v16i32_commute_swap:5216; AVX2:       # %bb.0:5217; AVX2-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]5218; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm5 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero5219; AVX2-NEXT:    vpslld $31, %ymm5, %ymm55220; AVX2-NEXT:    vpsrad $31, %ymm5, %ymm55221; AVX2-NEXT:    vpandn %ymm4, %ymm5, %ymm45222; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero5223; AVX2-NEXT:    vpslld $31, %ymm0, %ymm05224; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm05225; AVX2-NEXT:    vpandn %ymm3, %ymm0, %ymm05226; AVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm05227; AVX2-NEXT:    vpsravd %ymm2, %ymm4, %ymm15228; AVX2-NEXT:    retq5229;5230; AVX512-LABEL: ashr_v16i32_commute_swap:5231; AVX512:       # %bb.0:5232; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm05233; AVX512-NEXT:    vpslld $31, %zmm0, %zmm05234; AVX512-NEXT:    vptestnmd %zmm0, %zmm0, %k15235; AVX512-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1} {z}5236; AVX512-NEXT:    vpsravd %zmm1, %zmm0, %zmm05237; AVX512-NEXT:    retq5238  %s = select <16 x i1> %b, <16 x i32> zeroinitializer, <16 x i32> %y5239  %r = ashr <16 x i32> %s, %x5240  ret <16 x i32> %r5241}5242 5243define <8 x i32> @ashr_v8i32_cast_cond(i8 noundef zeroext %pb, <8 x i32> noundef %x, <8 x i32> noundef %y) {5244; SSE2-LABEL: ashr_v8i32_cast_cond:5245; SSE2:       # %bb.0:5246; SSE2-NEXT:    movd %edi, %xmm45247; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,0,0]5248; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [16,32,64,128]5249; SSE2-NEXT:    movdqa %xmm5, %xmm45250; SSE2-NEXT:    pand %xmm6, %xmm45251; SSE2-NEXT:    pcmpeqd %xmm6, %xmm45252; SSE2-NEXT:    pand %xmm3, %xmm45253; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,2,4,8]5254; SSE2-NEXT:    pand %xmm3, %xmm55255; SSE2-NEXT:    pcmpeqd %xmm3, %xmm55256; SSE2-NEXT:    pand %xmm2, %xmm55257; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm5[2,3,3,3,4,5,6,7]5258; SSE2-NEXT:    movdqa %xmm0, %xmm35259; SSE2-NEXT:    psrad %xmm2, %xmm35260; SSE2-NEXT:    pshuflw {{.*#+}} xmm6 = xmm5[0,1,1,1,4,5,6,7]5261; SSE2-NEXT:    movdqa %xmm0, %xmm25262; SSE2-NEXT:    psrad %xmm6, %xmm25263; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]5264; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[2,3,2,3]5265; SSE2-NEXT:    pshuflw {{.*#+}} xmm5 = xmm3[2,3,3,3,4,5,6,7]5266; SSE2-NEXT:    movdqa %xmm0, %xmm65267; SSE2-NEXT:    psrad %xmm5, %xmm65268; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,1,4,5,6,7]5269; SSE2-NEXT:    psrad %xmm3, %xmm05270; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm6[1]5271; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,3],xmm0[0,3]5272; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm4[2,3,3,3,4,5,6,7]5273; SSE2-NEXT:    movdqa %xmm1, %xmm55274; SSE2-NEXT:    psrad %xmm0, %xmm55275; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm4[0,1,1,1,4,5,6,7]5276; SSE2-NEXT:    movdqa %xmm1, %xmm35277; SSE2-NEXT:    psrad %xmm0, %xmm35278; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]5279; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[2,3,2,3]5280; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm0[2,3,3,3,4,5,6,7]5281; SSE2-NEXT:    movdqa %xmm1, %xmm55282; SSE2-NEXT:    psrad %xmm4, %xmm55283; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,1,4,5,6,7]5284; SSE2-NEXT:    psrad %xmm0, %xmm15285; SSE2-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],xmm5[1]5286; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm1[0,3]5287; SSE2-NEXT:    movaps %xmm2, %xmm05288; SSE2-NEXT:    movaps %xmm3, %xmm15289; SSE2-NEXT:    retq5290;5291; SSE42-LABEL: ashr_v8i32_cast_cond:5292; SSE42:       # %bb.0:5293; SSE42-NEXT:    movd %edi, %xmm45294; SSE42-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,0,0]5295; SSE42-NEXT:    pmovzxbd {{.*#+}} xmm6 = [16,32,64,128]5296; SSE42-NEXT:    movdqa %xmm5, %xmm45297; SSE42-NEXT:    pand %xmm6, %xmm45298; SSE42-NEXT:    pcmpeqd %xmm6, %xmm45299; SSE42-NEXT:    pand %xmm3, %xmm45300; SSE42-NEXT:    pmovsxbd {{.*#+}} xmm3 = [1,2,4,8]5301; SSE42-NEXT:    pand %xmm3, %xmm55302; SSE42-NEXT:    pcmpeqd %xmm3, %xmm55303; SSE42-NEXT:    pand %xmm2, %xmm55304; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm5[2,3,3,3,4,5,6,7]5305; SSE42-NEXT:    movdqa %xmm0, %xmm35306; SSE42-NEXT:    psrad %xmm2, %xmm35307; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm5[2,3,2,3]5308; SSE42-NEXT:    pshuflw {{.*#+}} xmm6 = xmm2[2,3,3,3,4,5,6,7]5309; SSE42-NEXT:    movdqa %xmm0, %xmm75310; SSE42-NEXT:    psrad %xmm6, %xmm75311; SSE42-NEXT:    pblendw {{.*#+}} xmm7 = xmm3[0,1,2,3],xmm7[4,5,6,7]5312; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm5[0,1,1,1,4,5,6,7]5313; SSE42-NEXT:    movdqa %xmm0, %xmm55314; SSE42-NEXT:    psrad %xmm3, %xmm55315; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]5316; SSE42-NEXT:    psrad %xmm2, %xmm05317; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm5[0,1,2,3],xmm0[4,5,6,7]5318; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm7[2,3],xmm0[4,5],xmm7[6,7]5319; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm4[2,3,3,3,4,5,6,7]5320; SSE42-NEXT:    movdqa %xmm1, %xmm35321; SSE42-NEXT:    psrad %xmm2, %xmm35322; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[2,3,2,3]5323; SSE42-NEXT:    pshuflw {{.*#+}} xmm5 = xmm2[2,3,3,3,4,5,6,7]5324; SSE42-NEXT:    movdqa %xmm1, %xmm65325; SSE42-NEXT:    psrad %xmm5, %xmm65326; SSE42-NEXT:    pblendw {{.*#+}} xmm6 = xmm3[0,1,2,3],xmm6[4,5,6,7]5327; SSE42-NEXT:    pshuflw {{.*#+}} xmm3 = xmm4[0,1,1,1,4,5,6,7]5328; SSE42-NEXT:    movdqa %xmm1, %xmm45329; SSE42-NEXT:    psrad %xmm3, %xmm45330; SSE42-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,1,1,4,5,6,7]5331; SSE42-NEXT:    psrad %xmm2, %xmm15332; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm4[0,1,2,3],xmm1[4,5,6,7]5333; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm6[2,3],xmm1[4,5],xmm6[6,7]5334; SSE42-NEXT:    retq5335;5336; AVX2-LABEL: ashr_v8i32_cast_cond:5337; AVX2:       # %bb.0:5338; AVX2-NEXT:    vmovd %edi, %xmm25339; AVX2-NEXT:    vpbroadcastb %xmm2, %ymm25340; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128]5341; AVX2-NEXT:    vpand %ymm3, %ymm2, %ymm25342; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm25343; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm15344; AVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm05345; AVX2-NEXT:    retq5346;5347; AVX512F-LABEL: ashr_v8i32_cast_cond:5348; AVX512F:       # %bb.0:5349; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm15350; AVX512F-NEXT:    kmovw %edi, %k15351; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm1 {%k1} {z}5352; AVX512F-NEXT:    vpsravd %ymm1, %ymm0, %ymm05353; AVX512F-NEXT:    retq5354;5355; AVX512VL-LABEL: ashr_v8i32_cast_cond:5356; AVX512VL:       # %bb.0:5357; AVX512VL-NEXT:    kmovw %edi, %k15358; AVX512VL-NEXT:    vpsravd %ymm1, %ymm0, %ymm0 {%k1}5359; AVX512VL-NEXT:    retq5360  %b = bitcast i8 %pb to <8 x i1>5361  %s = select <8 x i1> %b, <8 x i32> %y, <8 x i32> zeroinitializer5362  %r = ashr <8 x i32> %x, %s5363  ret <8 x i32> %r5364}5365 5366define <8 x i64> @ashr_v8i64_cast_cond(i8 noundef zeroext %pb, <8 x i64> noundef %x, <8 x i64> noundef %y) {5367; SSE2-LABEL: ashr_v8i64_cast_cond:5368; SSE2:       # %bb.0:5369; SSE2-NEXT:    movd %edi, %xmm85370; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]5371; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [64,128]5372; SSE2-NEXT:    movdqa %xmm9, %xmm85373; SSE2-NEXT:    pand %xmm10, %xmm85374; SSE2-NEXT:    pcmpeqd %xmm10, %xmm85375; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm8[1,0,3,2]5376; SSE2-NEXT:    pand %xmm7, %xmm85377; SSE2-NEXT:    pand %xmm10, %xmm85378; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [16,32]5379; SSE2-NEXT:    movdqa %xmm9, %xmm75380; SSE2-NEXT:    pand %xmm10, %xmm75381; SSE2-NEXT:    pcmpeqd %xmm10, %xmm75382; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm7[1,0,3,2]5383; SSE2-NEXT:    pand %xmm6, %xmm75384; SSE2-NEXT:    pand %xmm10, %xmm75385; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [4,8]5386; SSE2-NEXT:    movdqa %xmm9, %xmm65387; SSE2-NEXT:    pand %xmm10, %xmm65388; SSE2-NEXT:    pcmpeqd %xmm10, %xmm65389; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[1,0,3,2]5390; SSE2-NEXT:    pand %xmm5, %xmm65391; SSE2-NEXT:    pand %xmm10, %xmm65392; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1,2]5393; SSE2-NEXT:    pand %xmm5, %xmm95394; SSE2-NEXT:    pcmpeqd %xmm5, %xmm95395; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]5396; SSE2-NEXT:    pand %xmm4, %xmm95397; SSE2-NEXT:    pand %xmm5, %xmm95398; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]5399; SSE2-NEXT:    movdqa %xmm4, %xmm55400; SSE2-NEXT:    psrlq %xmm9, %xmm55401; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[2,3,2,3]5402; SSE2-NEXT:    movdqa %xmm4, %xmm115403; SSE2-NEXT:    psrlq %xmm10, %xmm115404; SSE2-NEXT:    movsd {{.*#+}} xmm11 = xmm5[0],xmm11[1]5405; SSE2-NEXT:    movdqa %xmm0, %xmm55406; SSE2-NEXT:    psrlq %xmm9, %xmm55407; SSE2-NEXT:    psrlq %xmm10, %xmm05408; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm5[0],xmm0[1]5409; SSE2-NEXT:    xorpd %xmm11, %xmm05410; SSE2-NEXT:    psubq %xmm11, %xmm05411; SSE2-NEXT:    movdqa %xmm4, %xmm55412; SSE2-NEXT:    psrlq %xmm6, %xmm55413; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[2,3,2,3]5414; SSE2-NEXT:    movdqa %xmm4, %xmm105415; SSE2-NEXT:    psrlq %xmm9, %xmm105416; SSE2-NEXT:    movsd {{.*#+}} xmm10 = xmm5[0],xmm10[1]5417; SSE2-NEXT:    movdqa %xmm1, %xmm55418; SSE2-NEXT:    psrlq %xmm6, %xmm55419; SSE2-NEXT:    psrlq %xmm9, %xmm15420; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm5[0],xmm1[1]5421; SSE2-NEXT:    xorpd %xmm10, %xmm15422; SSE2-NEXT:    psubq %xmm10, %xmm15423; SSE2-NEXT:    movdqa %xmm4, %xmm55424; SSE2-NEXT:    psrlq %xmm7, %xmm55425; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[2,3,2,3]5426; SSE2-NEXT:    movdqa %xmm4, %xmm95427; SSE2-NEXT:    psrlq %xmm6, %xmm95428; SSE2-NEXT:    movsd {{.*#+}} xmm9 = xmm5[0],xmm9[1]5429; SSE2-NEXT:    movdqa %xmm2, %xmm55430; SSE2-NEXT:    psrlq %xmm7, %xmm55431; SSE2-NEXT:    psrlq %xmm6, %xmm25432; SSE2-NEXT:    movsd {{.*#+}} xmm2 = xmm5[0],xmm2[1]5433; SSE2-NEXT:    xorpd %xmm9, %xmm25434; SSE2-NEXT:    psubq %xmm9, %xmm25435; SSE2-NEXT:    movdqa %xmm4, %xmm55436; SSE2-NEXT:    psrlq %xmm8, %xmm55437; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[2,3,2,3]5438; SSE2-NEXT:    psrlq %xmm6, %xmm45439; SSE2-NEXT:    movsd {{.*#+}} xmm4 = xmm5[0],xmm4[1]5440; SSE2-NEXT:    movdqa %xmm3, %xmm55441; SSE2-NEXT:    psrlq %xmm8, %xmm55442; SSE2-NEXT:    psrlq %xmm6, %xmm35443; SSE2-NEXT:    movsd {{.*#+}} xmm3 = xmm5[0],xmm3[1]5444; SSE2-NEXT:    xorpd %xmm4, %xmm35445; SSE2-NEXT:    psubq %xmm4, %xmm35446; SSE2-NEXT:    retq5447;5448; SSE42-LABEL: ashr_v8i64_cast_cond:5449; SSE42:       # %bb.0:5450; SSE42-NEXT:    movd %edi, %xmm85451; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]5452; SSE42-NEXT:    pmovzxbq {{.*#+}} xmm10 = [64,128]5453; SSE42-NEXT:    movdqa %xmm9, %xmm85454; SSE42-NEXT:    pand %xmm10, %xmm85455; SSE42-NEXT:    pcmpeqq %xmm10, %xmm85456; SSE42-NEXT:    pand %xmm7, %xmm85457; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm10 = [16,32]5458; SSE42-NEXT:    movdqa %xmm9, %xmm75459; SSE42-NEXT:    pand %xmm10, %xmm75460; SSE42-NEXT:    pcmpeqq %xmm10, %xmm75461; SSE42-NEXT:    pand %xmm6, %xmm75462; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm10 = [4,8]5463; SSE42-NEXT:    movdqa %xmm9, %xmm65464; SSE42-NEXT:    pand %xmm10, %xmm65465; SSE42-NEXT:    pcmpeqq %xmm10, %xmm65466; SSE42-NEXT:    pand %xmm5, %xmm65467; SSE42-NEXT:    pmovsxbq {{.*#+}} xmm5 = [1,2]5468; SSE42-NEXT:    pand %xmm5, %xmm95469; SSE42-NEXT:    pcmpeqq %xmm5, %xmm95470; SSE42-NEXT:    pand %xmm4, %xmm95471; SSE42-NEXT:    movdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]5472; SSE42-NEXT:    movdqa %xmm4, %xmm55473; SSE42-NEXT:    psrlq %xmm9, %xmm55474; SSE42-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[2,3,2,3]5475; SSE42-NEXT:    movdqa %xmm4, %xmm115476; SSE42-NEXT:    psrlq %xmm10, %xmm115477; SSE42-NEXT:    pblendw {{.*#+}} xmm11 = xmm5[0,1,2,3],xmm11[4,5,6,7]5478; SSE42-NEXT:    movdqa %xmm0, %xmm55479; SSE42-NEXT:    psrlq %xmm9, %xmm55480; SSE42-NEXT:    psrlq %xmm10, %xmm05481; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm5[0,1,2,3],xmm0[4,5,6,7]5482; SSE42-NEXT:    pxor %xmm11, %xmm05483; SSE42-NEXT:    psubq %xmm11, %xmm05484; SSE42-NEXT:    movdqa %xmm4, %xmm55485; SSE42-NEXT:    psrlq %xmm6, %xmm55486; SSE42-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[2,3,2,3]5487; SSE42-NEXT:    movdqa %xmm4, %xmm105488; SSE42-NEXT:    psrlq %xmm9, %xmm105489; SSE42-NEXT:    pblendw {{.*#+}} xmm10 = xmm5[0,1,2,3],xmm10[4,5,6,7]5490; SSE42-NEXT:    movdqa %xmm1, %xmm55491; SSE42-NEXT:    psrlq %xmm6, %xmm55492; SSE42-NEXT:    psrlq %xmm9, %xmm15493; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm5[0,1,2,3],xmm1[4,5,6,7]5494; SSE42-NEXT:    pxor %xmm10, %xmm15495; SSE42-NEXT:    psubq %xmm10, %xmm15496; SSE42-NEXT:    movdqa %xmm4, %xmm55497; SSE42-NEXT:    psrlq %xmm7, %xmm55498; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[2,3,2,3]5499; SSE42-NEXT:    movdqa %xmm4, %xmm95500; SSE42-NEXT:    psrlq %xmm6, %xmm95501; SSE42-NEXT:    pblendw {{.*#+}} xmm9 = xmm5[0,1,2,3],xmm9[4,5,6,7]5502; SSE42-NEXT:    movdqa %xmm2, %xmm55503; SSE42-NEXT:    psrlq %xmm7, %xmm55504; SSE42-NEXT:    psrlq %xmm6, %xmm25505; SSE42-NEXT:    pblendw {{.*#+}} xmm2 = xmm5[0,1,2,3],xmm2[4,5,6,7]5506; SSE42-NEXT:    pxor %xmm9, %xmm25507; SSE42-NEXT:    psubq %xmm9, %xmm25508; SSE42-NEXT:    movdqa %xmm4, %xmm55509; SSE42-NEXT:    psrlq %xmm8, %xmm55510; SSE42-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[2,3,2,3]5511; SSE42-NEXT:    psrlq %xmm6, %xmm45512; SSE42-NEXT:    pblendw {{.*#+}} xmm4 = xmm5[0,1,2,3],xmm4[4,5,6,7]5513; SSE42-NEXT:    movdqa %xmm3, %xmm55514; SSE42-NEXT:    psrlq %xmm8, %xmm55515; SSE42-NEXT:    psrlq %xmm6, %xmm35516; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm5[0,1,2,3],xmm3[4,5,6,7]5517; SSE42-NEXT:    pxor %xmm4, %xmm35518; SSE42-NEXT:    psubq %xmm4, %xmm35519; SSE42-NEXT:    retq5520;5521; AVX2-LABEL: ashr_v8i64_cast_cond:5522; AVX2:       # %bb.0:5523; AVX2-NEXT:    vmovd %edi, %xmm45524; AVX2-NEXT:    vpbroadcastb %xmm4, %ymm45525; AVX2-NEXT:    vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]5526; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm65527; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm6, %ymm55528; AVX2-NEXT:    vpand %ymm3, %ymm5, %ymm35529; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]5530; AVX2-NEXT:    vpand %ymm5, %ymm4, %ymm45531; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm4, %ymm45532; AVX2-NEXT:    vpand %ymm2, %ymm4, %ymm25533; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]5534; AVX2-NEXT:    vpsrlvq %ymm2, %ymm4, %ymm55535; AVX2-NEXT:    vpsrlvq %ymm2, %ymm0, %ymm05536; AVX2-NEXT:    vpxor %ymm5, %ymm0, %ymm05537; AVX2-NEXT:    vpsubq %ymm5, %ymm0, %ymm05538; AVX2-NEXT:    vpsrlvq %ymm3, %ymm4, %ymm25539; AVX2-NEXT:    vpsrlvq %ymm3, %ymm1, %ymm15540; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm15541; AVX2-NEXT:    vpsubq %ymm2, %ymm1, %ymm15542; AVX2-NEXT:    retq5543;5544; AVX512-LABEL: ashr_v8i64_cast_cond:5545; AVX512:       # %bb.0:5546; AVX512-NEXT:    kmovw %edi, %k15547; AVX512-NEXT:    vpsravq %zmm1, %zmm0, %zmm0 {%k1}5548; AVX512-NEXT:    retq5549  %b = bitcast i8 %pb to <8 x i1>5550  %s = select <8 x i1> %b, <8 x i64> %y, <8 x i64> zeroinitializer5551  %r = ashr <8 x i64> %x, %s5552  ret <8 x i64> %r5553}5554 5555define <8 x i64> @select_sdiv_neutral_constant_v8i64(<8 x i1> %b, <8 x i64> %x, <8 x i64> %y) {5556; SSE2-LABEL: select_sdiv_neutral_constant_v8i64:5557; SSE2:       # %bb.0:5558; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[2,2,2,2]5559; SSE2-NEXT:    pshufhw {{.*#+}} xmm8 = xmm8[0,1,2,3,5,5,5,5]5560; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,0,2,2]5561; SSE2-NEXT:    pslld $31, %xmm85562; SSE2-NEXT:    psrad $31, %xmm85563; SSE2-NEXT:    movdqa %xmm8, %xmm105564; SSE2-NEXT:    pandn %xmm7, %xmm105565; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [1,1]5566; SSE2-NEXT:    pand %xmm9, %xmm85567; SSE2-NEXT:    por %xmm10, %xmm85568; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,1,1]5569; SSE2-NEXT:    pshufhw {{.*#+}} xmm7 = xmm7[0,1,2,3,5,5,5,5]5570; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,0,2,2]5571; SSE2-NEXT:    pslld $31, %xmm75572; SSE2-NEXT:    psrad $31, %xmm75573; SSE2-NEXT:    movdqa %xmm7, %xmm105574; SSE2-NEXT:    pandn %xmm6, %xmm105575; SSE2-NEXT:    pand %xmm9, %xmm75576; SSE2-NEXT:    por %xmm10, %xmm75577; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[0,0,0,0]5578; SSE2-NEXT:    pshufhw {{.*#+}} xmm6 = xmm6[0,1,2,3,5,5,5,5]5579; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,0,2,2]5580; SSE2-NEXT:    pslld $31, %xmm65581; SSE2-NEXT:    psrad $31, %xmm65582; SSE2-NEXT:    movdqa %xmm6, %xmm105583; SSE2-NEXT:    pandn %xmm5, %xmm105584; SSE2-NEXT:    pand %xmm9, %xmm65585; SSE2-NEXT:    por %xmm10, %xmm65586; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]5587; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,5,5]5588; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2]5589; SSE2-NEXT:    pslld $31, %xmm55590; SSE2-NEXT:    psrad $31, %xmm55591; SSE2-NEXT:    pand %xmm5, %xmm95592; SSE2-NEXT:    pandn {{[0-9]+}}(%rsp), %xmm55593; SSE2-NEXT:    por %xmm9, %xmm55594; SSE2-NEXT:    movq %xmm6, %rcx5595; SSE2-NEXT:    movq %xmm1, %rax5596; SSE2-NEXT:    cqto5597; SSE2-NEXT:    idivq %rcx5598; SSE2-NEXT:    movq %rax, %xmm05599; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[2,3,2,3]5600; SSE2-NEXT:    movq %xmm6, %rcx5601; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]5602; SSE2-NEXT:    movq %xmm1, %rax5603; SSE2-NEXT:    cqto5604; SSE2-NEXT:    idivq %rcx5605; SSE2-NEXT:    movq %rax, %xmm15606; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]5607; SSE2-NEXT:    movq %xmm7, %rcx5608; SSE2-NEXT:    movq %xmm2, %rax5609; SSE2-NEXT:    cqto5610; SSE2-NEXT:    idivq %rcx5611; SSE2-NEXT:    movq %rax, %xmm15612; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[2,3,2,3]5613; SSE2-NEXT:    movq %xmm6, %rcx5614; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]5615; SSE2-NEXT:    movq %xmm2, %rax5616; SSE2-NEXT:    cqto5617; SSE2-NEXT:    idivq %rcx5618; SSE2-NEXT:    movq %rax, %xmm25619; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]5620; SSE2-NEXT:    movq %xmm8, %rcx5621; SSE2-NEXT:    movq %xmm3, %rax5622; SSE2-NEXT:    cqto5623; SSE2-NEXT:    idivq %rcx5624; SSE2-NEXT:    movq %rax, %xmm25625; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm8[2,3,2,3]5626; SSE2-NEXT:    movq %xmm6, %rcx5627; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,2,3]5628; SSE2-NEXT:    movq %xmm3, %rax5629; SSE2-NEXT:    cqto5630; SSE2-NEXT:    idivq %rcx5631; SSE2-NEXT:    movq %rax, %xmm35632; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]5633; SSE2-NEXT:    movq %xmm5, %rcx5634; SSE2-NEXT:    movq %xmm4, %rax5635; SSE2-NEXT:    cqto5636; SSE2-NEXT:    idivq %rcx5637; SSE2-NEXT:    movq %rax, %xmm35638; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[2,3,2,3]5639; SSE2-NEXT:    movq %xmm5, %rcx5640; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[2,3,2,3]5641; SSE2-NEXT:    movq %xmm4, %rax5642; SSE2-NEXT:    cqto5643; SSE2-NEXT:    idivq %rcx5644; SSE2-NEXT:    movq %rax, %xmm45645; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]5646; SSE2-NEXT:    retq5647;5648; SSE42-LABEL: select_sdiv_neutral_constant_v8i64:5649; SSE42:       # %bb.0:5650; SSE42-NEXT:    movdqa %xmm0, %xmm85651; SSE42-NEXT:    movapd {{[0-9]+}}(%rsp), %xmm95652; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]5653; SSE42-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero5654; SSE42-NEXT:    psllq $63, %xmm05655; SSE42-NEXT:    movapd {{.*#+}} xmm10 = [1,1]5656; SSE42-NEXT:    blendvpd %xmm0, %xmm10, %xmm95657; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[2,3,2,3]5658; SSE42-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero5659; SSE42-NEXT:    psllq $63, %xmm05660; SSE42-NEXT:    blendvpd %xmm0, %xmm10, %xmm75661; SSE42-NEXT:    pshufd {{.*#+}} xmm0 = xmm8[1,1,1,1]5662; SSE42-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero5663; SSE42-NEXT:    psllq $63, %xmm05664; SSE42-NEXT:    blendvpd %xmm0, %xmm10, %xmm65665; SSE42-NEXT:    pmovzxwq {{.*#+}} xmm0 = xmm8[0],zero,zero,zero,xmm8[1],zero,zero,zero5666; SSE42-NEXT:    psllq $63, %xmm05667; SSE42-NEXT:    blendvpd %xmm0, %xmm10, %xmm55668; SSE42-NEXT:    pextrq $1, %xmm5, %rcx5669; SSE42-NEXT:    pextrq $1, %xmm1, %rax5670; SSE42-NEXT:    cqto5671; SSE42-NEXT:    idivq %rcx5672; SSE42-NEXT:    movq %rax, %xmm85673; SSE42-NEXT:    movq %xmm5, %rcx5674; SSE42-NEXT:    movq %xmm1, %rax5675; SSE42-NEXT:    cqto5676; SSE42-NEXT:    idivq %rcx5677; SSE42-NEXT:    movq %rax, %xmm05678; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm8[0]5679; SSE42-NEXT:    pextrq $1, %xmm6, %rcx5680; SSE42-NEXT:    pextrq $1, %xmm2, %rax5681; SSE42-NEXT:    cqto5682; SSE42-NEXT:    idivq %rcx5683; SSE42-NEXT:    movq %rax, %xmm55684; SSE42-NEXT:    movq %xmm6, %rcx5685; SSE42-NEXT:    movq %xmm2, %rax5686; SSE42-NEXT:    cqto5687; SSE42-NEXT:    idivq %rcx5688; SSE42-NEXT:    movq %rax, %xmm15689; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]5690; SSE42-NEXT:    pextrq $1, %xmm7, %rcx5691; SSE42-NEXT:    pextrq $1, %xmm3, %rax5692; SSE42-NEXT:    cqto5693; SSE42-NEXT:    idivq %rcx5694; SSE42-NEXT:    movq %rax, %xmm55695; SSE42-NEXT:    movq %xmm7, %rcx5696; SSE42-NEXT:    movq %xmm3, %rax5697; SSE42-NEXT:    cqto5698; SSE42-NEXT:    idivq %rcx5699; SSE42-NEXT:    movq %rax, %xmm25700; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm5[0]5701; SSE42-NEXT:    pextrq $1, %xmm9, %rcx5702; SSE42-NEXT:    pextrq $1, %xmm4, %rax5703; SSE42-NEXT:    cqto5704; SSE42-NEXT:    idivq %rcx5705; SSE42-NEXT:    movq %rax, %xmm55706; SSE42-NEXT:    movq %xmm9, %rcx5707; SSE42-NEXT:    movq %xmm4, %rax5708; SSE42-NEXT:    cqto5709; SSE42-NEXT:    idivq %rcx5710; SSE42-NEXT:    movq %rax, %xmm35711; SSE42-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]5712; SSE42-NEXT:    retq5713;5714; AVX2-LABEL: select_sdiv_neutral_constant_v8i64:5715; AVX2:       # %bb.0:5716; AVX2-NEXT:    vpmovzxwd {{.*#+}} xmm5 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero5717; AVX2-NEXT:    vpslld $31, %xmm5, %xmm55718; AVX2-NEXT:    vpmovsxdq %xmm5, %ymm55719; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm6 = [1,1,1,1]5720; AVX2-NEXT:    vblendvpd %ymm5, %ymm6, %ymm3, %ymm55721; AVX2-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]5722; AVX2-NEXT:    vpslld $31, %xmm0, %xmm05723; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm05724; AVX2-NEXT:    vblendvpd %ymm0, %ymm6, %ymm4, %ymm35725; AVX2-NEXT:    vextractf128 $1, %ymm5, %xmm05726; AVX2-NEXT:    vpextrq $1, %xmm0, %rcx5727; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm45728; AVX2-NEXT:    vpextrq $1, %xmm4, %rax5729; AVX2-NEXT:    cqto5730; AVX2-NEXT:    idivq %rcx5731; AVX2-NEXT:    vmovq %rax, %xmm65732; AVX2-NEXT:    vmovq %xmm0, %rcx5733; AVX2-NEXT:    vmovq %xmm4, %rax5734; AVX2-NEXT:    cqto5735; AVX2-NEXT:    idivq %rcx5736; AVX2-NEXT:    vmovq %rax, %xmm05737; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm6[0]5738; AVX2-NEXT:    vpextrq $1, %xmm5, %rcx5739; AVX2-NEXT:    vpextrq $1, %xmm1, %rax5740; AVX2-NEXT:    cqto5741; AVX2-NEXT:    idivq %rcx5742; AVX2-NEXT:    vmovq %rax, %xmm45743; AVX2-NEXT:    vmovq %xmm5, %rcx5744; AVX2-NEXT:    vmovq %xmm1, %rax5745; AVX2-NEXT:    cqto5746; AVX2-NEXT:    idivq %rcx5747; AVX2-NEXT:    vmovq %rax, %xmm15748; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]5749; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm05750; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm15751; AVX2-NEXT:    vpextrq $1, %xmm1, %rcx5752; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm45753; AVX2-NEXT:    vpextrq $1, %xmm4, %rax5754; AVX2-NEXT:    cqto5755; AVX2-NEXT:    idivq %rcx5756; AVX2-NEXT:    vmovq %rax, %xmm55757; AVX2-NEXT:    vmovq %xmm1, %rcx5758; AVX2-NEXT:    vmovq %xmm4, %rax5759; AVX2-NEXT:    cqto5760; AVX2-NEXT:    idivq %rcx5761; AVX2-NEXT:    vmovq %rax, %xmm15762; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]5763; AVX2-NEXT:    vpextrq $1, %xmm3, %rcx5764; AVX2-NEXT:    vpextrq $1, %xmm2, %rax5765; AVX2-NEXT:    cqto5766; AVX2-NEXT:    idivq %rcx5767; AVX2-NEXT:    vmovq %rax, %xmm45768; AVX2-NEXT:    vmovq %xmm3, %rcx5769; AVX2-NEXT:    vmovq %xmm2, %rax5770; AVX2-NEXT:    cqto5771; AVX2-NEXT:    idivq %rcx5772; AVX2-NEXT:    vmovq %rax, %xmm25773; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm4[0]5774; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm2, %ymm15775; AVX2-NEXT:    retq5776;5777; AVX512F-LABEL: select_sdiv_neutral_constant_v8i64:5778; AVX512F:       # %bb.0:5779; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm05780; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm05781; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k15782; AVX512F-NEXT:    vpbroadcastq {{.*#+}} zmm2 {%k1} = [1,1,1,1,1,1,1,1]5783; AVX512F-NEXT:    vextracti32x4 $3, %zmm2, %xmm05784; AVX512F-NEXT:    vpextrq $1, %xmm0, %rcx5785; AVX512F-NEXT:    vextracti32x4 $3, %zmm1, %xmm35786; AVX512F-NEXT:    vpextrq $1, %xmm3, %rax5787; AVX512F-NEXT:    cqto5788; AVX512F-NEXT:    idivq %rcx5789; AVX512F-NEXT:    vmovq %rax, %xmm45790; AVX512F-NEXT:    vmovq %xmm0, %rcx5791; AVX512F-NEXT:    vmovq %xmm3, %rax5792; AVX512F-NEXT:    cqto5793; AVX512F-NEXT:    idivq %rcx5794; AVX512F-NEXT:    vmovq %rax, %xmm05795; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]5796; AVX512F-NEXT:    vextracti32x4 $2, %zmm2, %xmm35797; AVX512F-NEXT:    vpextrq $1, %xmm3, %rcx5798; AVX512F-NEXT:    vextracti32x4 $2, %zmm1, %xmm45799; AVX512F-NEXT:    vpextrq $1, %xmm4, %rax5800; AVX512F-NEXT:    cqto5801; AVX512F-NEXT:    idivq %rcx5802; AVX512F-NEXT:    vmovq %rax, %xmm55803; AVX512F-NEXT:    vmovq %xmm3, %rcx5804; AVX512F-NEXT:    vmovq %xmm4, %rax5805; AVX512F-NEXT:    cqto5806; AVX512F-NEXT:    idivq %rcx5807; AVX512F-NEXT:    vmovq %rax, %xmm35808; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]5809; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm05810; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm35811; AVX512F-NEXT:    vpextrq $1, %xmm3, %rcx5812; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm45813; AVX512F-NEXT:    vpextrq $1, %xmm4, %rax5814; AVX512F-NEXT:    cqto5815; AVX512F-NEXT:    idivq %rcx5816; AVX512F-NEXT:    vmovq %rax, %xmm55817; AVX512F-NEXT:    vmovq %xmm3, %rcx5818; AVX512F-NEXT:    vmovq %xmm4, %rax5819; AVX512F-NEXT:    cqto5820; AVX512F-NEXT:    idivq %rcx5821; AVX512F-NEXT:    vmovq %rax, %xmm35822; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]5823; AVX512F-NEXT:    vpextrq $1, %xmm2, %rcx5824; AVX512F-NEXT:    vpextrq $1, %xmm1, %rax5825; AVX512F-NEXT:    cqto5826; AVX512F-NEXT:    idivq %rcx5827; AVX512F-NEXT:    vmovq %rax, %xmm45828; AVX512F-NEXT:    vmovq %xmm2, %rcx5829; AVX512F-NEXT:    vmovq %xmm1, %rax5830; AVX512F-NEXT:    cqto5831; AVX512F-NEXT:    idivq %rcx5832; AVX512F-NEXT:    vmovq %rax, %xmm15833; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]5834; AVX512F-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm15835; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm05836; AVX512F-NEXT:    retq5837;5838; AVX512VL-LABEL: select_sdiv_neutral_constant_v8i64:5839; AVX512VL:       # %bb.0:5840; AVX512VL-NEXT:    vpmovsxwd %xmm0, %ymm05841; AVX512VL-NEXT:    vpslld $31, %ymm0, %ymm05842; AVX512VL-NEXT:    vptestmd %ymm0, %ymm0, %k15843; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} zmm2 {%k1} = [1,1,1,1,1,1,1,1]5844; AVX512VL-NEXT:    vextracti32x4 $3, %zmm2, %xmm05845; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rcx5846; AVX512VL-NEXT:    vextracti32x4 $3, %zmm1, %xmm35847; AVX512VL-NEXT:    vpextrq $1, %xmm3, %rax5848; AVX512VL-NEXT:    cqto5849; AVX512VL-NEXT:    idivq %rcx5850; AVX512VL-NEXT:    vmovq %rax, %xmm45851; AVX512VL-NEXT:    vmovq %xmm0, %rcx5852; AVX512VL-NEXT:    vmovq %xmm3, %rax5853; AVX512VL-NEXT:    cqto5854; AVX512VL-NEXT:    idivq %rcx5855; AVX512VL-NEXT:    vmovq %rax, %xmm05856; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]5857; AVX512VL-NEXT:    vextracti32x4 $2, %zmm2, %xmm35858; AVX512VL-NEXT:    vpextrq $1, %xmm3, %rcx5859; AVX512VL-NEXT:    vextracti32x4 $2, %zmm1, %xmm45860; AVX512VL-NEXT:    vpextrq $1, %xmm4, %rax5861; AVX512VL-NEXT:    cqto5862; AVX512VL-NEXT:    idivq %rcx5863; AVX512VL-NEXT:    vmovq %rax, %xmm55864; AVX512VL-NEXT:    vmovq %xmm3, %rcx5865; AVX512VL-NEXT:    vmovq %xmm4, %rax5866; AVX512VL-NEXT:    cqto5867; AVX512VL-NEXT:    idivq %rcx5868; AVX512VL-NEXT:    vmovq %rax, %xmm35869; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]5870; AVX512VL-NEXT:    vinserti128 $1, %xmm0, %ymm3, %ymm05871; AVX512VL-NEXT:    vextracti128 $1, %ymm2, %xmm35872; AVX512VL-NEXT:    vpextrq $1, %xmm3, %rcx5873; AVX512VL-NEXT:    vextracti128 $1, %ymm1, %xmm45874; AVX512VL-NEXT:    vpextrq $1, %xmm4, %rax5875; AVX512VL-NEXT:    cqto5876; AVX512VL-NEXT:    idivq %rcx5877; AVX512VL-NEXT:    vmovq %rax, %xmm55878; AVX512VL-NEXT:    vmovq %xmm3, %rcx5879; AVX512VL-NEXT:    vmovq %xmm4, %rax5880; AVX512VL-NEXT:    cqto5881; AVX512VL-NEXT:    idivq %rcx5882; AVX512VL-NEXT:    vmovq %rax, %xmm35883; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]5884; AVX512VL-NEXT:    vpextrq $1, %xmm2, %rcx5885; AVX512VL-NEXT:    vpextrq $1, %xmm1, %rax5886; AVX512VL-NEXT:    cqto5887; AVX512VL-NEXT:    idivq %rcx5888; AVX512VL-NEXT:    vmovq %rax, %xmm45889; AVX512VL-NEXT:    vmovq %xmm2, %rcx5890; AVX512VL-NEXT:    vmovq %xmm1, %rax5891; AVX512VL-NEXT:    cqto5892; AVX512VL-NEXT:    idivq %rcx5893; AVX512VL-NEXT:    vmovq %rax, %xmm15894; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]5895; AVX512VL-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm15896; AVX512VL-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm05897; AVX512VL-NEXT:    retq5898  %sel = select <8 x i1> %b, <8 x i64> <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>, <8 x i64> %y5899  %r = sdiv <8 x i64> %x, %sel5900  ret <8 x i64> %r5901}5902