brintos

brintos / llvm-project-archived public Read only

0
0
Text · 87.6 KiB · 2e237fb Raw
2047 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX3; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=ALL32,AVX24; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=ALL32,AVX5125; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=ALL32,AVX512,AVX512BW6; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX-647; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=ALL64,AVX2-648; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=ALL64,AVX512F-649; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=ALL64,AVX512F-64,AVX512BW-6410 11;===-----------------------------------------------------------------------------===12;    This test checks the ability to recognize a cross element pattern of13;    constants and perform the load via broadcasting a smaller constant14;    vector.15;    For example:16;    <i32 0, i32 1, i32 0, i32 1> => broadcast of the constant vector <i32 0, i32 1>17;===-----------------------------------------------------------------------------===18 19define <16 x i8> @f16xi8_i16(<16 x i8> %a) {20; AVX-LABEL: f16xi8_i16:21; AVX:       # %bb.0:22; AVX-NEXT:    vbroadcastss {{.*#+}} xmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]23; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm024; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm025; AVX-NEXT:    retl26;27; ALL32-LABEL: f16xi8_i16:28; ALL32:       # %bb.0:29; ALL32-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]30; ALL32-NEXT:    vpaddb %xmm1, %xmm0, %xmm031; ALL32-NEXT:    vpand %xmm1, %xmm0, %xmm032; ALL32-NEXT:    retl33;34; AVX-64-LABEL: f16xi8_i16:35; AVX-64:       # %bb.0:36; AVX-64-NEXT:    vbroadcastss {{.*#+}} xmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]37; AVX-64-NEXT:    vpaddb %xmm1, %xmm0, %xmm038; AVX-64-NEXT:    vpand %xmm1, %xmm0, %xmm039; AVX-64-NEXT:    retq40;41; ALL64-LABEL: f16xi8_i16:42; ALL64:       # %bb.0:43; ALL64-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]44; ALL64-NEXT:    vpaddb %xmm1, %xmm0, %xmm045; ALL64-NEXT:    vpand %xmm1, %xmm0, %xmm046; ALL64-NEXT:    retq47  %res1 = add <16 x i8> <i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1>, %a48  %res2 = and <16 x i8> <i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1>, %res149  ret <16 x i8> %res250}51 52 53define <16 x i8> @f16xi8_i32(<16 x i8> %a) {54; AVX-LABEL: f16xi8_i32:55; AVX:       # %bb.0:56; AVX-NEXT:    vbroadcastss {{.*#+}} xmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]57; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm058; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm059; AVX-NEXT:    retl60;61; ALL32-LABEL: f16xi8_i32:62; ALL32:       # %bb.0:63; ALL32-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]64; ALL32-NEXT:    vpaddb %xmm1, %xmm0, %xmm065; ALL32-NEXT:    vpand %xmm1, %xmm0, %xmm066; ALL32-NEXT:    retl67;68; AVX-64-LABEL: f16xi8_i32:69; AVX-64:       # %bb.0:70; AVX-64-NEXT:    vbroadcastss {{.*#+}} xmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]71; AVX-64-NEXT:    vpaddb %xmm1, %xmm0, %xmm072; AVX-64-NEXT:    vpand %xmm1, %xmm0, %xmm073; AVX-64-NEXT:    retq74;75; ALL64-LABEL: f16xi8_i32:76; ALL64:       # %bb.0:77; ALL64-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]78; ALL64-NEXT:    vpaddb %xmm1, %xmm0, %xmm079; ALL64-NEXT:    vpand %xmm1, %xmm0, %xmm080; ALL64-NEXT:    retq81  %res1 = add <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3>, %a82  %res2 = and <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3>, %res183  ret <16 x i8> %res284}85 86 87define <16 x i8> @f16xi8_i64(<16 x i8> %a) {88; AVX-LABEL: f16xi8_i64:89; AVX:       # %bb.0:90; AVX-NEXT:    vmovddup {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]91; AVX-NEXT:    # xmm1 = mem[0,0]92; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm093; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm094; AVX-NEXT:    retl95;96; ALL32-LABEL: f16xi8_i64:97; ALL32:       # %bb.0:98; ALL32-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]99; ALL32-NEXT:    vpaddb %xmm1, %xmm0, %xmm0100; ALL32-NEXT:    vpand %xmm1, %xmm0, %xmm0101; ALL32-NEXT:    retl102;103; AVX-64-LABEL: f16xi8_i64:104; AVX-64:       # %bb.0:105; AVX-64-NEXT:    vmovddup {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]106; AVX-64-NEXT:    # xmm1 = mem[0,0]107; AVX-64-NEXT:    vpaddb %xmm1, %xmm0, %xmm0108; AVX-64-NEXT:    vpand %xmm1, %xmm0, %xmm0109; AVX-64-NEXT:    retq110;111; ALL64-LABEL: f16xi8_i64:112; ALL64:       # %bb.0:113; ALL64-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]114; ALL64-NEXT:    vpaddb %xmm1, %xmm0, %xmm0115; ALL64-NEXT:    vpand %xmm1, %xmm0, %xmm0116; ALL64-NEXT:    retq117  %res1 = add <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>, %a118  %res2 = and <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>, %res1119  ret <16 x i8> %res2120}121 122 123define <32 x i8> @f32xi8_i16(<32 x i8> %a) {124; AVX-LABEL: f32xi8_i16:125; AVX:       # %bb.0:126; AVX-NEXT:    vbroadcastss {{.*#+}} ymm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]127; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm2128; AVX-NEXT:    vpaddb %xmm1, %xmm2, %xmm2129; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0130; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0131; AVX-NEXT:    vandps %ymm1, %ymm0, %ymm0132; AVX-NEXT:    retl133;134; ALL32-LABEL: f32xi8_i16:135; ALL32:       # %bb.0:136; ALL32-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]137; ALL32-NEXT:    vpaddb %ymm1, %ymm0, %ymm0138; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm0139; ALL32-NEXT:    retl140;141; AVX-64-LABEL: f32xi8_i16:142; AVX-64:       # %bb.0:143; AVX-64-NEXT:    vbroadcastss {{.*#+}} ymm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]144; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm2145; AVX-64-NEXT:    vpaddb %xmm1, %xmm2, %xmm2146; AVX-64-NEXT:    vpaddb %xmm1, %xmm0, %xmm0147; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0148; AVX-64-NEXT:    vandps %ymm1, %ymm0, %ymm0149; AVX-64-NEXT:    retq150;151; ALL64-LABEL: f32xi8_i16:152; ALL64:       # %bb.0:153; ALL64-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]154; ALL64-NEXT:    vpaddb %ymm1, %ymm0, %ymm0155; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm0156; ALL64-NEXT:    retq157  %res1 = add <32 x i8> <i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1>, %a158  %res2 = and <32 x i8> <i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1>, %res1159  ret <32 x i8> %res2160}161 162 163define <32 x i8> @f32xi8_i32(<32 x i8> %a) {164; AVX-LABEL: f32xi8_i32:165; AVX:       # %bb.0:166; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm1167; AVX-NEXT:    vbroadcastss {{.*#+}} xmm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]168; AVX-NEXT:    vpaddb %xmm2, %xmm1, %xmm1169; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0170; AVX-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0171; AVX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0172; AVX-NEXT:    retl173;174; ALL32-LABEL: f32xi8_i32:175; ALL32:       # %bb.0:176; ALL32-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]177; ALL32-NEXT:    vpaddb %ymm1, %ymm0, %ymm0178; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm0179; ALL32-NEXT:    retl180;181; AVX-64-LABEL: f32xi8_i32:182; AVX-64:       # %bb.0:183; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm1184; AVX-64-NEXT:    vbroadcastss {{.*#+}} xmm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]185; AVX-64-NEXT:    vpaddb %xmm2, %xmm1, %xmm1186; AVX-64-NEXT:    vpaddb %xmm2, %xmm0, %xmm0187; AVX-64-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0188; AVX-64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0189; AVX-64-NEXT:    retq190;191; ALL64-LABEL: f32xi8_i32:192; ALL64:       # %bb.0:193; ALL64-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]194; ALL64-NEXT:    vpaddb %ymm1, %ymm0, %ymm0195; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm0196; ALL64-NEXT:    retq197  %res1 = add <32 x i8> <i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3>, %a198  %res2 = and <32 x i8> <i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3>, %res1199  ret <32 x i8> %res2200}201 202 203define <32 x i8> @f32xi8_i64(<32 x i8> %a) {204; AVX-LABEL: f32xi8_i64:205; AVX:       # %bb.0:206; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm1207; AVX-NEXT:    vmovddup {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]208; AVX-NEXT:    # xmm2 = mem[0,0]209; AVX-NEXT:    vpaddb %xmm2, %xmm1, %xmm1210; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0211; AVX-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0212; AVX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0213; AVX-NEXT:    retl214;215; ALL32-LABEL: f32xi8_i64:216; ALL32:       # %bb.0:217; ALL32-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]218; ALL32-NEXT:    vpaddb %ymm1, %ymm0, %ymm0219; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm0220; ALL32-NEXT:    retl221;222; AVX-64-LABEL: f32xi8_i64:223; AVX-64:       # %bb.0:224; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm1225; AVX-64-NEXT:    vmovddup {{.*#+}} xmm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]226; AVX-64-NEXT:    # xmm2 = mem[0,0]227; AVX-64-NEXT:    vpaddb %xmm2, %xmm1, %xmm1228; AVX-64-NEXT:    vpaddb %xmm2, %xmm0, %xmm0229; AVX-64-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0230; AVX-64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0231; AVX-64-NEXT:    retq232;233; ALL64-LABEL: f32xi8_i64:234; ALL64:       # %bb.0:235; ALL64-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]236; ALL64-NEXT:    vpaddb %ymm1, %ymm0, %ymm0237; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm0238; ALL64-NEXT:    retq239  %res1 = add <32 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>, %a240  %res2 = and <32 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>, %res1241  ret <32 x i8> %res2242}243 244 245define <32 x i8> @f32xi8_i128(<32 x i8> %a) {246; AVX-LABEL: f32xi8_i128:247; AVX:       # %bb.0:248; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]249; AVX-NEXT:    # ymm1 = mem[0,1,0,1]250; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm2251; AVX-NEXT:    vpaddb %xmm1, %xmm2, %xmm2252; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0253; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0254; AVX-NEXT:    vandps %ymm1, %ymm0, %ymm0255; AVX-NEXT:    retl256;257; ALL32-LABEL: f32xi8_i128:258; ALL32:       # %bb.0:259; ALL32-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]260; ALL32-NEXT:    # ymm1 = mem[0,1,0,1]261; ALL32-NEXT:    vpaddb %ymm1, %ymm0, %ymm0262; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm0263; ALL32-NEXT:    retl264;265; AVX-64-LABEL: f32xi8_i128:266; AVX-64:       # %bb.0:267; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]268; AVX-64-NEXT:    # ymm1 = mem[0,1,0,1]269; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm2270; AVX-64-NEXT:    vpaddb %xmm1, %xmm2, %xmm2271; AVX-64-NEXT:    vpaddb %xmm1, %xmm0, %xmm0272; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0273; AVX-64-NEXT:    vandps %ymm1, %ymm0, %ymm0274; AVX-64-NEXT:    retq275;276; ALL64-LABEL: f32xi8_i128:277; ALL64:       # %bb.0:278; ALL64-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]279; ALL64-NEXT:    # ymm1 = mem[0,1,0,1]280; ALL64-NEXT:    vpaddb %ymm1, %ymm0, %ymm0281; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm0282; ALL64-NEXT:    retq283  %res1 = add <32 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, %a284  %res2 = and <32 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, %res1285  ret <32 x i8> %res2286}287 288 289define <64 x i8> @f64xi8_i16(<64 x i8> %a) {290; AVX-LABEL: f64xi8_i16:291; AVX:       # %bb.0:292; AVX-NEXT:    vbroadcastss {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]293; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm3294; AVX-NEXT:    vpaddb %xmm2, %xmm3, %xmm3295; AVX-NEXT:    vpaddb %xmm2, %xmm1, %xmm1296; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1297; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm3298; AVX-NEXT:    vpaddb %xmm2, %xmm3, %xmm3299; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0300; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0301; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm0302; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm1303; AVX-NEXT:    retl304;305; AVX2-LABEL: f64xi8_i16:306; AVX2:       # %bb.0:307; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]308; AVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm1309; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0310; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0311; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1312; AVX2-NEXT:    retl313;314; AVX512BW-LABEL: f64xi8_i16:315; AVX512BW:       # %bb.0:316; AVX512BW-NEXT:    vpbroadcastw {{.*#+}} zmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]317; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0318; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0319; AVX512BW-NEXT:    retl320;321; AVX-64-LABEL: f64xi8_i16:322; AVX-64:       # %bb.0:323; AVX-64-NEXT:    vbroadcastss {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]324; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm3325; AVX-64-NEXT:    vpaddb %xmm2, %xmm3, %xmm3326; AVX-64-NEXT:    vpaddb %xmm2, %xmm1, %xmm1327; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1328; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm3329; AVX-64-NEXT:    vpaddb %xmm2, %xmm3, %xmm3330; AVX-64-NEXT:    vpaddb %xmm2, %xmm0, %xmm0331; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0332; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm0333; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm1334; AVX-64-NEXT:    retq335;336; AVX2-64-LABEL: f64xi8_i16:337; AVX2-64:       # %bb.0:338; AVX2-64-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]339; AVX2-64-NEXT:    vpaddb %ymm2, %ymm1, %ymm1340; AVX2-64-NEXT:    vpaddb %ymm2, %ymm0, %ymm0341; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm0342; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm1343; AVX2-64-NEXT:    retq344;345; AVX512BW-64-LABEL: f64xi8_i16:346; AVX512BW-64:       # %bb.0:347; AVX512BW-64-NEXT:    vpbroadcastw {{.*#+}} zmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]348; AVX512BW-64-NEXT:    vpaddb %zmm1, %zmm0, %zmm0349; AVX512BW-64-NEXT:    vpandq %zmm1, %zmm0, %zmm0350; AVX512BW-64-NEXT:    retq351  %res1 = add <64 x i8> <i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1>, %a352  %res2 = and <64 x i8> <i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1>, %res1353  ret <64 x i8> %res2354}355 356 357define <64 x i8> @f64i8_i32(<64 x i8> %a) {358; AVX-LABEL: f64i8_i32:359; AVX:       # %bb.0:360; AVX-NEXT:    vbroadcastss {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]361; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm3362; AVX-NEXT:    vpaddb %xmm2, %xmm3, %xmm3363; AVX-NEXT:    vpaddb %xmm2, %xmm1, %xmm1364; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1365; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm3366; AVX-NEXT:    vpaddb %xmm2, %xmm3, %xmm3367; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0368; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0369; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm0370; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm1371; AVX-NEXT:    retl372;373; AVX2-LABEL: f64i8_i32:374; AVX2:       # %bb.0:375; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]376; AVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm1377; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0378; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0379; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1380; AVX2-NEXT:    retl381;382; AVX512BW-LABEL: f64i8_i32:383; AVX512BW:       # %bb.0:384; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} zmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]385; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0386; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0387; AVX512BW-NEXT:    retl388;389; AVX-64-LABEL: f64i8_i32:390; AVX-64:       # %bb.0:391; AVX-64-NEXT:    vbroadcastss {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]392; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm3393; AVX-64-NEXT:    vpaddb %xmm2, %xmm3, %xmm3394; AVX-64-NEXT:    vpaddb %xmm2, %xmm1, %xmm1395; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1396; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm3397; AVX-64-NEXT:    vpaddb %xmm2, %xmm3, %xmm3398; AVX-64-NEXT:    vpaddb %xmm2, %xmm0, %xmm0399; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0400; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm0401; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm1402; AVX-64-NEXT:    retq403;404; AVX2-64-LABEL: f64i8_i32:405; AVX2-64:       # %bb.0:406; AVX2-64-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]407; AVX2-64-NEXT:    vpaddb %ymm2, %ymm1, %ymm1408; AVX2-64-NEXT:    vpaddb %ymm2, %ymm0, %ymm0409; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm0410; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm1411; AVX2-64-NEXT:    retq412;413; AVX512BW-64-LABEL: f64i8_i32:414; AVX512BW-64:       # %bb.0:415; AVX512BW-64-NEXT:    vpbroadcastd {{.*#+}} zmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]416; AVX512BW-64-NEXT:    vpaddb %zmm1, %zmm0, %zmm0417; AVX512BW-64-NEXT:    vpandq %zmm1, %zmm0, %zmm0418; AVX512BW-64-NEXT:    retq419  %res1 = add <64 x i8> <i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3>, %a420  %res2 = and <64 x i8> <i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3>, %res1421  ret <64 x i8> %res2422}423 424 425define <64 x i8> @f64xi8_i64(<64 x i8> %a) {426; AVX-LABEL: f64xi8_i64:427; AVX:       # %bb.0:428; AVX-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]429; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm3430; AVX-NEXT:    vpaddb %xmm2, %xmm3, %xmm3431; AVX-NEXT:    vpaddb %xmm2, %xmm1, %xmm1432; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1433; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm3434; AVX-NEXT:    vpaddb %xmm2, %xmm3, %xmm3435; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0436; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0437; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm0438; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm1439; AVX-NEXT:    retl440;441; AVX2-LABEL: f64xi8_i64:442; AVX2:       # %bb.0:443; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]444; AVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm1445; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0446; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0447; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1448; AVX2-NEXT:    retl449;450; AVX512BW-LABEL: f64xi8_i64:451; AVX512BW:       # %bb.0:452; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]453; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0454; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0455; AVX512BW-NEXT:    retl456;457; AVX-64-LABEL: f64xi8_i64:458; AVX-64:       # %bb.0:459; AVX-64-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]460; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm3461; AVX-64-NEXT:    vpaddb %xmm2, %xmm3, %xmm3462; AVX-64-NEXT:    vpaddb %xmm2, %xmm1, %xmm1463; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1464; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm3465; AVX-64-NEXT:    vpaddb %xmm2, %xmm3, %xmm3466; AVX-64-NEXT:    vpaddb %xmm2, %xmm0, %xmm0467; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0468; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm0469; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm1470; AVX-64-NEXT:    retq471;472; AVX2-64-LABEL: f64xi8_i64:473; AVX2-64:       # %bb.0:474; AVX2-64-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]475; AVX2-64-NEXT:    vpaddb %ymm2, %ymm1, %ymm1476; AVX2-64-NEXT:    vpaddb %ymm2, %ymm0, %ymm0477; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm0478; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm1479; AVX2-64-NEXT:    retq480;481; AVX512BW-64-LABEL: f64xi8_i64:482; AVX512BW-64:       # %bb.0:483; AVX512BW-64-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]484; AVX512BW-64-NEXT:    vpaddb %zmm1, %zmm0, %zmm0485; AVX512BW-64-NEXT:    vpandq %zmm1, %zmm0, %zmm0486; AVX512BW-64-NEXT:    retq487  %res1 = add <64 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>, %a488  %res2 = and <64 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>, %res1489  ret <64 x i8> %res2490}491 492 493define <64 x i8> @f64xi8_i128(<64 x i8> %a) {494; AVX-LABEL: f64xi8_i128:495; AVX:       # %bb.0:496; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]497; AVX-NEXT:    # ymm2 = mem[0,1,0,1]498; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm3499; AVX-NEXT:    vpaddb %xmm2, %xmm3, %xmm3500; AVX-NEXT:    vpaddb %xmm2, %xmm1, %xmm1501; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1502; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm3503; AVX-NEXT:    vpaddb %xmm2, %xmm3, %xmm3504; AVX-NEXT:    vpaddb %xmm2, %xmm0, %xmm0505; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0506; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm0507; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm1508; AVX-NEXT:    retl509;510; AVX2-LABEL: f64xi8_i128:511; AVX2:       # %bb.0:512; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]513; AVX2-NEXT:    # ymm2 = mem[0,1,0,1]514; AVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm1515; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0516; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0517; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1518; AVX2-NEXT:    retl519;520; AVX512BW-LABEL: f64xi8_i128:521; AVX512BW:       # %bb.0:522; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]523; AVX512BW-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]524; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0525; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0526; AVX512BW-NEXT:    retl527;528; AVX-64-LABEL: f64xi8_i128:529; AVX-64:       # %bb.0:530; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]531; AVX-64-NEXT:    # ymm2 = mem[0,1,0,1]532; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm3533; AVX-64-NEXT:    vpaddb %xmm2, %xmm3, %xmm3534; AVX-64-NEXT:    vpaddb %xmm2, %xmm1, %xmm1535; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1536; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm3537; AVX-64-NEXT:    vpaddb %xmm2, %xmm3, %xmm3538; AVX-64-NEXT:    vpaddb %xmm2, %xmm0, %xmm0539; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0540; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm0541; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm1542; AVX-64-NEXT:    retq543;544; AVX2-64-LABEL: f64xi8_i128:545; AVX2-64:       # %bb.0:546; AVX2-64-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]547; AVX2-64-NEXT:    # ymm2 = mem[0,1,0,1]548; AVX2-64-NEXT:    vpaddb %ymm2, %ymm1, %ymm1549; AVX2-64-NEXT:    vpaddb %ymm2, %ymm0, %ymm0550; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm0551; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm1552; AVX2-64-NEXT:    retq553;554; AVX512BW-64-LABEL: f64xi8_i128:555; AVX512BW-64:       # %bb.0:556; AVX512BW-64-NEXT:    vbroadcasti32x4 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]557; AVX512BW-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]558; AVX512BW-64-NEXT:    vpaddb %zmm1, %zmm0, %zmm0559; AVX512BW-64-NEXT:    vpandq %zmm1, %zmm0, %zmm0560; AVX512BW-64-NEXT:    retq561  %res1 = add <64 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, %a562  %res2 = and <64 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, %res1563  ret <64 x i8> %res2564}565 566 567define <64 x i8> @f64xi8_i256(<64 x i8> %a) {568; AVX-LABEL: f64xi8_i256:569; AVX:       # %bb.0:570; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm2571; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]572; AVX-NEXT:    vpaddb %xmm3, %xmm2, %xmm2573; AVX-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]574; AVX-NEXT:    vpaddb %xmm4, %xmm1, %xmm1575; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1576; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm2577; AVX-NEXT:    vpaddb %xmm3, %xmm2, %xmm2578; AVX-NEXT:    vpaddb %xmm4, %xmm0, %xmm0579; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0580; AVX-NEXT:    vandps %ymm4, %ymm0, %ymm0581; AVX-NEXT:    vandps %ymm4, %ymm1, %ymm1582; AVX-NEXT:    retl583;584; AVX2-LABEL: f64xi8_i256:585; AVX2:       # %bb.0:586; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]587; AVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm1588; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0589; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0590; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1591; AVX2-NEXT:    retl592;593; AVX512BW-LABEL: f64xi8_i256:594; AVX512BW:       # %bb.0:595; AVX512BW-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]596; AVX512BW-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]597; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm0598; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0599; AVX512BW-NEXT:    retl600;601; AVX-64-LABEL: f64xi8_i256:602; AVX-64:       # %bb.0:603; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm2604; AVX-64-NEXT:    vmovdqa {{.*#+}} xmm3 = [16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]605; AVX-64-NEXT:    vpaddb %xmm3, %xmm2, %xmm2606; AVX-64-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]607; AVX-64-NEXT:    vpaddb %xmm4, %xmm1, %xmm1608; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1609; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm2610; AVX-64-NEXT:    vpaddb %xmm3, %xmm2, %xmm2611; AVX-64-NEXT:    vpaddb %xmm4, %xmm0, %xmm0612; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0613; AVX-64-NEXT:    vandps %ymm4, %ymm0, %ymm0614; AVX-64-NEXT:    vandps %ymm4, %ymm1, %ymm1615; AVX-64-NEXT:    retq616;617; AVX2-64-LABEL: f64xi8_i256:618; AVX2-64:       # %bb.0:619; AVX2-64-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]620; AVX2-64-NEXT:    vpaddb %ymm2, %ymm1, %ymm1621; AVX2-64-NEXT:    vpaddb %ymm2, %ymm0, %ymm0622; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm0623; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm1624; AVX2-64-NEXT:    retq625;626; AVX512BW-64-LABEL: f64xi8_i256:627; AVX512BW-64:       # %bb.0:628; AVX512BW-64-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]629; AVX512BW-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]630; AVX512BW-64-NEXT:    vpaddb %zmm1, %zmm0, %zmm0631; AVX512BW-64-NEXT:    vpandq %zmm1, %zmm0, %zmm0632; AVX512BW-64-NEXT:    retq633  %res1 = add <64 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, %a634  %res2 = and <64 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, %res1635  ret <64 x i8> %res2636}637 638 639define <8 x i16> @f8xi16_i32(<8 x i16> %a) {640; AVX-LABEL: f8xi16_i32:641; AVX:       # %bb.0:642; AVX-NEXT:    vbroadcastss {{.*#+}} xmm1 = [0,1,0,1,0,1,0,1]643; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0644; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0645; AVX-NEXT:    retl646;647; ALL32-LABEL: f8xi16_i32:648; ALL32:       # %bb.0:649; ALL32-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [0,1,0,1,0,1,0,1]650; ALL32-NEXT:    vpaddw %xmm1, %xmm0, %xmm0651; ALL32-NEXT:    vpand %xmm1, %xmm0, %xmm0652; ALL32-NEXT:    retl653;654; AVX-64-LABEL: f8xi16_i32:655; AVX-64:       # %bb.0:656; AVX-64-NEXT:    vbroadcastss {{.*#+}} xmm1 = [0,1,0,1,0,1,0,1]657; AVX-64-NEXT:    vpaddw %xmm1, %xmm0, %xmm0658; AVX-64-NEXT:    vpand %xmm1, %xmm0, %xmm0659; AVX-64-NEXT:    retq660;661; ALL64-LABEL: f8xi16_i32:662; ALL64:       # %bb.0:663; ALL64-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [0,1,0,1,0,1,0,1]664; ALL64-NEXT:    vpaddw %xmm1, %xmm0, %xmm0665; ALL64-NEXT:    vpand %xmm1, %xmm0, %xmm0666; ALL64-NEXT:    retq667  %res1 = add <8 x i16> <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>, %a668  %res2 = and <8 x i16> <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>, %res1669  ret <8 x i16> %res2670}671 672 673define <8 x i16> @f8xi16_i64(<8 x i16> %a) {674; AVX-LABEL: f8xi16_i64:675; AVX:       # %bb.0:676; AVX-NEXT:    vmovddup {{.*#+}} xmm1 = [0,1,2,3,0,1,2,3]677; AVX-NEXT:    # xmm1 = mem[0,0]678; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0679; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0680; AVX-NEXT:    retl681;682; ALL32-LABEL: f8xi16_i64:683; ALL32:       # %bb.0:684; ALL32-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [0,1,2,3,0,1,2,3]685; ALL32-NEXT:    vpaddw %xmm1, %xmm0, %xmm0686; ALL32-NEXT:    vpand %xmm1, %xmm0, %xmm0687; ALL32-NEXT:    retl688;689; AVX-64-LABEL: f8xi16_i64:690; AVX-64:       # %bb.0:691; AVX-64-NEXT:    vmovddup {{.*#+}} xmm1 = [0,1,2,3,0,1,2,3]692; AVX-64-NEXT:    # xmm1 = mem[0,0]693; AVX-64-NEXT:    vpaddw %xmm1, %xmm0, %xmm0694; AVX-64-NEXT:    vpand %xmm1, %xmm0, %xmm0695; AVX-64-NEXT:    retq696;697; ALL64-LABEL: f8xi16_i64:698; ALL64:       # %bb.0:699; ALL64-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [0,1,2,3,0,1,2,3]700; ALL64-NEXT:    vpaddw %xmm1, %xmm0, %xmm0701; ALL64-NEXT:    vpand %xmm1, %xmm0, %xmm0702; ALL64-NEXT:    retq703  %res1 = add <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3>, %a704  %res2 = and <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3>, %res1705  ret <8 x i16> %res2706}707 708 709define <16 x i16> @f16xi16_i32(<16 x i16> %a) {710; AVX-LABEL: f16xi16_i32:711; AVX:       # %bb.0:712; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm1713; AVX-NEXT:    vbroadcastss {{.*#+}} xmm2 = [0,1,0,1,0,1,0,1]714; AVX-NEXT:    vpaddw %xmm2, %xmm1, %xmm1715; AVX-NEXT:    vpaddw %xmm2, %xmm0, %xmm0716; AVX-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0717; AVX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0718; AVX-NEXT:    retl719;720; ALL32-LABEL: f16xi16_i32:721; ALL32:       # %bb.0:722; ALL32-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]723; ALL32-NEXT:    vpaddw %ymm1, %ymm0, %ymm0724; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm0725; ALL32-NEXT:    retl726;727; AVX-64-LABEL: f16xi16_i32:728; AVX-64:       # %bb.0:729; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm1730; AVX-64-NEXT:    vbroadcastss {{.*#+}} xmm2 = [0,1,0,1,0,1,0,1]731; AVX-64-NEXT:    vpaddw %xmm2, %xmm1, %xmm1732; AVX-64-NEXT:    vpaddw %xmm2, %xmm0, %xmm0733; AVX-64-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0734; AVX-64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0735; AVX-64-NEXT:    retq736;737; ALL64-LABEL: f16xi16_i32:738; ALL64:       # %bb.0:739; ALL64-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]740; ALL64-NEXT:    vpaddw %ymm1, %ymm0, %ymm0741; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm0742; ALL64-NEXT:    retq743  %res1 = add <16 x i16> <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>, %a744  %res2 = and <16 x i16> <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>, %res1745  ret <16 x i16> %res2746}747 748 749define <16 x i16> @f16xi16_i64(<16 x i16> %a) {750; AVX-LABEL: f16xi16_i64:751; AVX:       # %bb.0:752; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm1753; AVX-NEXT:    vmovddup {{.*#+}} xmm2 = [0,1,2,3,0,1,2,3]754; AVX-NEXT:    # xmm2 = mem[0,0]755; AVX-NEXT:    vpaddw %xmm2, %xmm1, %xmm1756; AVX-NEXT:    vpaddw %xmm2, %xmm0, %xmm0757; AVX-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0758; AVX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0759; AVX-NEXT:    retl760;761; ALL32-LABEL: f16xi16_i64:762; ALL32:       # %bb.0:763; ALL32-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]764; ALL32-NEXT:    vpaddw %ymm1, %ymm0, %ymm0765; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm0766; ALL32-NEXT:    retl767;768; AVX-64-LABEL: f16xi16_i64:769; AVX-64:       # %bb.0:770; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm1771; AVX-64-NEXT:    vmovddup {{.*#+}} xmm2 = [0,1,2,3,0,1,2,3]772; AVX-64-NEXT:    # xmm2 = mem[0,0]773; AVX-64-NEXT:    vpaddw %xmm2, %xmm1, %xmm1774; AVX-64-NEXT:    vpaddw %xmm2, %xmm0, %xmm0775; AVX-64-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0776; AVX-64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0777; AVX-64-NEXT:    retq778;779; ALL64-LABEL: f16xi16_i64:780; ALL64:       # %bb.0:781; ALL64-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]782; ALL64-NEXT:    vpaddw %ymm1, %ymm0, %ymm0783; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm0784; ALL64-NEXT:    retq785  %res1 = add <16 x i16> <i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3>, %a786  %res2 = and <16 x i16> <i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3>, %res1787  ret <16 x i16> %res2788}789 790 791define <16 x i16> @f16xi16_i128(<16 x i16> %a) {792; AVX-LABEL: f16xi16_i128:793; AVX:       # %bb.0:794; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]795; AVX-NEXT:    # ymm1 = mem[0,1,0,1]796; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm2797; AVX-NEXT:    vpaddw %xmm1, %xmm2, %xmm2798; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0799; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0800; AVX-NEXT:    vandps %ymm1, %ymm0, %ymm0801; AVX-NEXT:    retl802;803; ALL32-LABEL: f16xi16_i128:804; ALL32:       # %bb.0:805; ALL32-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]806; ALL32-NEXT:    # ymm1 = mem[0,1,0,1]807; ALL32-NEXT:    vpaddw %ymm1, %ymm0, %ymm0808; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm0809; ALL32-NEXT:    retl810;811; AVX-64-LABEL: f16xi16_i128:812; AVX-64:       # %bb.0:813; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]814; AVX-64-NEXT:    # ymm1 = mem[0,1,0,1]815; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm2816; AVX-64-NEXT:    vpaddw %xmm1, %xmm2, %xmm2817; AVX-64-NEXT:    vpaddw %xmm1, %xmm0, %xmm0818; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0819; AVX-64-NEXT:    vandps %ymm1, %ymm0, %ymm0820; AVX-64-NEXT:    retq821;822; ALL64-LABEL: f16xi16_i128:823; ALL64:       # %bb.0:824; ALL64-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]825; ALL64-NEXT:    # ymm1 = mem[0,1,0,1]826; ALL64-NEXT:    vpaddw %ymm1, %ymm0, %ymm0827; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm0828; ALL64-NEXT:    retq829  %res1 = add <16 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, %a830  %res2 = and <16 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, %res1831  ret <16 x i16> %res2832}833 834 835define <32 x i16> @f32xi16_i32(<32 x i16> %a) {836; AVX-LABEL: f32xi16_i32:837; AVX:       # %bb.0:838; AVX-NEXT:    vbroadcastss {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]839; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm3840; AVX-NEXT:    vpaddw %xmm2, %xmm3, %xmm3841; AVX-NEXT:    vpaddw %xmm2, %xmm1, %xmm1842; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1843; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm3844; AVX-NEXT:    vpaddw %xmm2, %xmm3, %xmm3845; AVX-NEXT:    vpaddw %xmm2, %xmm0, %xmm0846; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0847; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm0848; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm1849; AVX-NEXT:    retl850;851; AVX2-LABEL: f32xi16_i32:852; AVX2:       # %bb.0:853; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]854; AVX2-NEXT:    vpaddw %ymm2, %ymm1, %ymm1855; AVX2-NEXT:    vpaddw %ymm2, %ymm0, %ymm0856; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0857; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1858; AVX2-NEXT:    retl859;860; AVX512BW-LABEL: f32xi16_i32:861; AVX512BW:       # %bb.0:862; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} zmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]863; AVX512BW-NEXT:    vpaddw %zmm1, %zmm0, %zmm0864; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0865; AVX512BW-NEXT:    retl866;867; AVX-64-LABEL: f32xi16_i32:868; AVX-64:       # %bb.0:869; AVX-64-NEXT:    vbroadcastss {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]870; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm3871; AVX-64-NEXT:    vpaddw %xmm2, %xmm3, %xmm3872; AVX-64-NEXT:    vpaddw %xmm2, %xmm1, %xmm1873; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1874; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm3875; AVX-64-NEXT:    vpaddw %xmm2, %xmm3, %xmm3876; AVX-64-NEXT:    vpaddw %xmm2, %xmm0, %xmm0877; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0878; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm0879; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm1880; AVX-64-NEXT:    retq881;882; AVX2-64-LABEL: f32xi16_i32:883; AVX2-64:       # %bb.0:884; AVX2-64-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]885; AVX2-64-NEXT:    vpaddw %ymm2, %ymm1, %ymm1886; AVX2-64-NEXT:    vpaddw %ymm2, %ymm0, %ymm0887; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm0888; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm1889; AVX2-64-NEXT:    retq890;891; AVX512BW-64-LABEL: f32xi16_i32:892; AVX512BW-64:       # %bb.0:893; AVX512BW-64-NEXT:    vpbroadcastd {{.*#+}} zmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]894; AVX512BW-64-NEXT:    vpaddw %zmm1, %zmm0, %zmm0895; AVX512BW-64-NEXT:    vpandq %zmm1, %zmm0, %zmm0896; AVX512BW-64-NEXT:    retq897  %res1 = add <32 x i16> <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>, %a898  %res2 = and <32 x i16> <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1>, %res1899  ret <32 x i16> %res2900}901 902 903define <32 x i16> @f32xi16_i64(<32 x i16> %a) {904; AVX-LABEL: f32xi16_i64:905; AVX:       # %bb.0:906; AVX-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]907; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm3908; AVX-NEXT:    vpaddw %xmm2, %xmm3, %xmm3909; AVX-NEXT:    vpaddw %xmm2, %xmm1, %xmm1910; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1911; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm3912; AVX-NEXT:    vpaddw %xmm2, %xmm3, %xmm3913; AVX-NEXT:    vpaddw %xmm2, %xmm0, %xmm0914; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0915; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm0916; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm1917; AVX-NEXT:    retl918;919; AVX2-LABEL: f32xi16_i64:920; AVX2:       # %bb.0:921; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]922; AVX2-NEXT:    vpaddw %ymm2, %ymm1, %ymm1923; AVX2-NEXT:    vpaddw %ymm2, %ymm0, %ymm0924; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0925; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1926; AVX2-NEXT:    retl927;928; AVX512BW-LABEL: f32xi16_i64:929; AVX512BW:       # %bb.0:930; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]931; AVX512BW-NEXT:    vpaddw %zmm1, %zmm0, %zmm0932; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm0933; AVX512BW-NEXT:    retl934;935; AVX-64-LABEL: f32xi16_i64:936; AVX-64:       # %bb.0:937; AVX-64-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]938; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm3939; AVX-64-NEXT:    vpaddw %xmm2, %xmm3, %xmm3940; AVX-64-NEXT:    vpaddw %xmm2, %xmm1, %xmm1941; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1942; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm3943; AVX-64-NEXT:    vpaddw %xmm2, %xmm3, %xmm3944; AVX-64-NEXT:    vpaddw %xmm2, %xmm0, %xmm0945; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0946; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm0947; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm1948; AVX-64-NEXT:    retq949;950; AVX2-64-LABEL: f32xi16_i64:951; AVX2-64:       # %bb.0:952; AVX2-64-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]953; AVX2-64-NEXT:    vpaddw %ymm2, %ymm1, %ymm1954; AVX2-64-NEXT:    vpaddw %ymm2, %ymm0, %ymm0955; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm0956; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm1957; AVX2-64-NEXT:    retq958;959; AVX512BW-64-LABEL: f32xi16_i64:960; AVX512BW-64:       # %bb.0:961; AVX512BW-64-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]962; AVX512BW-64-NEXT:    vpaddw %zmm1, %zmm0, %zmm0963; AVX512BW-64-NEXT:    vpandq %zmm1, %zmm0, %zmm0964; AVX512BW-64-NEXT:    retq965  %res1 = add <32 x i16> <i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3>, %a966  %res2 = and <32 x i16> <i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3, i16 0, i16 1, i16 2, i16 3>, %res1967  ret <32 x i16> %res2968}969 970 971define <32 x i16> @f32xi16_i128(<32 x i16> %a) {972; AVX-LABEL: f32xi16_i128:973; AVX:       # %bb.0:974; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]975; AVX-NEXT:    # ymm2 = mem[0,1,0,1]976; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm3977; AVX-NEXT:    vpaddw %xmm2, %xmm3, %xmm3978; AVX-NEXT:    vpaddw %xmm2, %xmm1, %xmm1979; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1980; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm3981; AVX-NEXT:    vpaddw %xmm2, %xmm3, %xmm3982; AVX-NEXT:    vpaddw %xmm2, %xmm0, %xmm0983; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0984; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm0985; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm1986; AVX-NEXT:    retl987;988; AVX2-LABEL: f32xi16_i128:989; AVX2:       # %bb.0:990; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]991; AVX2-NEXT:    # ymm2 = mem[0,1,0,1]992; AVX2-NEXT:    vpaddw %ymm2, %ymm1, %ymm1993; AVX2-NEXT:    vpaddw %ymm2, %ymm0, %ymm0994; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0995; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm1996; AVX2-NEXT:    retl997;998; AVX512BW-LABEL: f32xi16_i128:999; AVX512BW:       # %bb.0:1000; AVX512BW-NEXT:    vbroadcasti32x4 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1001; AVX512BW-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1002; AVX512BW-NEXT:    vpaddw %zmm1, %zmm0, %zmm01003; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm01004; AVX512BW-NEXT:    retl1005;1006; AVX-64-LABEL: f32xi16_i128:1007; AVX-64:       # %bb.0:1008; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1009; AVX-64-NEXT:    # ymm2 = mem[0,1,0,1]1010; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm31011; AVX-64-NEXT:    vpaddw %xmm2, %xmm3, %xmm31012; AVX-64-NEXT:    vpaddw %xmm2, %xmm1, %xmm11013; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11014; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm31015; AVX-64-NEXT:    vpaddw %xmm2, %xmm3, %xmm31016; AVX-64-NEXT:    vpaddw %xmm2, %xmm0, %xmm01017; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01018; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm01019; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm11020; AVX-64-NEXT:    retq1021;1022; AVX2-64-LABEL: f32xi16_i128:1023; AVX2-64:       # %bb.0:1024; AVX2-64-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1025; AVX2-64-NEXT:    # ymm2 = mem[0,1,0,1]1026; AVX2-64-NEXT:    vpaddw %ymm2, %ymm1, %ymm11027; AVX2-64-NEXT:    vpaddw %ymm2, %ymm0, %ymm01028; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm01029; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm11030; AVX2-64-NEXT:    retq1031;1032; AVX512BW-64-LABEL: f32xi16_i128:1033; AVX512BW-64:       # %bb.0:1034; AVX512BW-64-NEXT:    vbroadcasti32x4 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1035; AVX512BW-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1036; AVX512BW-64-NEXT:    vpaddw %zmm1, %zmm0, %zmm01037; AVX512BW-64-NEXT:    vpandq %zmm1, %zmm0, %zmm01038; AVX512BW-64-NEXT:    retq1039  %res1 = add <32 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, %a1040  %res2 = and <32 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, %res11041  ret <32 x i16> %res21042}1043 1044 1045define <32 x i16> @f32xi16_i256(<32 x i16> %a) {1046; AVX-LABEL: f32xi16_i256:1047; AVX:       # %bb.0:1048; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm21049; AVX-NEXT:    vpmovsxbw {{.*#+}} xmm3 = [8,9,10,11,12,13,14,15]1050; AVX-NEXT:    vpaddw %xmm3, %xmm2, %xmm21051; AVX-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1052; AVX-NEXT:    vpaddw %xmm4, %xmm1, %xmm11053; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11054; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm21055; AVX-NEXT:    vpaddw %xmm3, %xmm2, %xmm21056; AVX-NEXT:    vpaddw %xmm4, %xmm0, %xmm01057; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01058; AVX-NEXT:    vandps %ymm4, %ymm0, %ymm01059; AVX-NEXT:    vandps %ymm4, %ymm1, %ymm11060; AVX-NEXT:    retl1061;1062; AVX2-LABEL: f32xi16_i256:1063; AVX2:       # %bb.0:1064; AVX2-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1065; AVX2-NEXT:    vpaddw %ymm2, %ymm1, %ymm11066; AVX2-NEXT:    vpaddw %ymm2, %ymm0, %ymm01067; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm01068; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm11069; AVX2-NEXT:    retl1070;1071; AVX512BW-LABEL: f32xi16_i256:1072; AVX512BW:       # %bb.0:1073; AVX512BW-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1074; AVX512BW-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]1075; AVX512BW-NEXT:    vpaddw %zmm1, %zmm0, %zmm01076; AVX512BW-NEXT:    vpandq %zmm1, %zmm0, %zmm01077; AVX512BW-NEXT:    retl1078;1079; AVX-64-LABEL: f32xi16_i256:1080; AVX-64:       # %bb.0:1081; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm21082; AVX-64-NEXT:    vpmovsxbw {{.*#+}} xmm3 = [8,9,10,11,12,13,14,15]1083; AVX-64-NEXT:    vpaddw %xmm3, %xmm2, %xmm21084; AVX-64-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1085; AVX-64-NEXT:    vpaddw %xmm4, %xmm1, %xmm11086; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11087; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm21088; AVX-64-NEXT:    vpaddw %xmm3, %xmm2, %xmm21089; AVX-64-NEXT:    vpaddw %xmm4, %xmm0, %xmm01090; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01091; AVX-64-NEXT:    vandps %ymm4, %ymm0, %ymm01092; AVX-64-NEXT:    vandps %ymm4, %ymm1, %ymm11093; AVX-64-NEXT:    retq1094;1095; AVX2-64-LABEL: f32xi16_i256:1096; AVX2-64:       # %bb.0:1097; AVX2-64-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1098; AVX2-64-NEXT:    vpaddw %ymm2, %ymm1, %ymm11099; AVX2-64-NEXT:    vpaddw %ymm2, %ymm0, %ymm01100; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm01101; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm11102; AVX2-64-NEXT:    retq1103;1104; AVX512BW-64-LABEL: f32xi16_i256:1105; AVX512BW-64:       # %bb.0:1106; AVX512BW-64-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]1107; AVX512BW-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]1108; AVX512BW-64-NEXT:    vpaddw %zmm1, %zmm0, %zmm01109; AVX512BW-64-NEXT:    vpandq %zmm1, %zmm0, %zmm01110; AVX512BW-64-NEXT:    retq1111  %res1 = add <32 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, %a1112  %res2 = and <32 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, %res11113  ret <32 x i16> %res21114}1115 1116 1117define <4 x i32> @f4xi32_i64(<4 x i32> %a) {1118; AVX-LABEL: f4xi32_i64:1119; AVX:       # %bb.0:1120; AVX-NEXT:    vmovddup {{.*#+}} xmm1 = [0,1,0,1]1121; AVX-NEXT:    # xmm1 = mem[0,0]1122; AVX-NEXT:    vpaddd %xmm1, %xmm0, %xmm01123; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm01124; AVX-NEXT:    retl1125;1126; ALL32-LABEL: f4xi32_i64:1127; ALL32:       # %bb.0:1128; ALL32-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [0,1,0,1]1129; ALL32-NEXT:    vpaddd %xmm1, %xmm0, %xmm01130; ALL32-NEXT:    vpand %xmm1, %xmm0, %xmm01131; ALL32-NEXT:    retl1132;1133; AVX-64-LABEL: f4xi32_i64:1134; AVX-64:       # %bb.0:1135; AVX-64-NEXT:    vmovddup {{.*#+}} xmm1 = [0,1,0,1]1136; AVX-64-NEXT:    # xmm1 = mem[0,0]1137; AVX-64-NEXT:    vpaddd %xmm1, %xmm0, %xmm01138; AVX-64-NEXT:    vpand %xmm1, %xmm0, %xmm01139; AVX-64-NEXT:    retq1140;1141; ALL64-LABEL: f4xi32_i64:1142; ALL64:       # %bb.0:1143; ALL64-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [0,1,0,1]1144; ALL64-NEXT:    vpaddd %xmm1, %xmm0, %xmm01145; ALL64-NEXT:    vpand %xmm1, %xmm0, %xmm01146; ALL64-NEXT:    retq1147  %res1 = add <4 x i32> <i32 0, i32 1, i32 0, i32 1>, %a1148  %res2 = and <4 x i32> <i32 0, i32 1, i32 0, i32 1>, %res11149  ret <4 x i32> %res21150}1151 1152 1153define <8 x i32> @f8xi32_i64(<8 x i32> %a) {1154; AVX-LABEL: f8xi32_i64:1155; AVX:       # %bb.0:1156; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm11157; AVX-NEXT:    vmovddup {{.*#+}} xmm2 = [0,1,0,1]1158; AVX-NEXT:    # xmm2 = mem[0,0]1159; AVX-NEXT:    vpaddd %xmm2, %xmm1, %xmm11160; AVX-NEXT:    vpaddd %xmm2, %xmm0, %xmm01161; AVX-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01162; AVX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm01163; AVX-NEXT:    retl1164;1165; ALL32-LABEL: f8xi32_i64:1166; ALL32:       # %bb.0:1167; ALL32-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [0,1,0,1,0,1,0,1]1168; ALL32-NEXT:    vpaddd %ymm1, %ymm0, %ymm01169; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm01170; ALL32-NEXT:    retl1171;1172; AVX-64-LABEL: f8xi32_i64:1173; AVX-64:       # %bb.0:1174; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm11175; AVX-64-NEXT:    vmovddup {{.*#+}} xmm2 = [0,1,0,1]1176; AVX-64-NEXT:    # xmm2 = mem[0,0]1177; AVX-64-NEXT:    vpaddd %xmm2, %xmm1, %xmm11178; AVX-64-NEXT:    vpaddd %xmm2, %xmm0, %xmm01179; AVX-64-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01180; AVX-64-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01181; AVX-64-NEXT:    retq1182;1183; ALL64-LABEL: f8xi32_i64:1184; ALL64:       # %bb.0:1185; ALL64-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [0,1,0,1,0,1,0,1]1186; ALL64-NEXT:    vpaddd %ymm1, %ymm0, %ymm01187; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm01188; ALL64-NEXT:    retq1189  %res1 = add <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>, %a1190  %res2 = and <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>, %res11191  ret <8 x i32> %res21192}1193 1194 1195define <8 x i32> @f8xi32_i128(<8 x i32> %a) {1196; AVX-LABEL: f8xi32_i128:1197; AVX:       # %bb.0:1198; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,1,2,3,0,1,2,3]1199; AVX-NEXT:    # ymm1 = mem[0,1,0,1]1200; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm21201; AVX-NEXT:    vpaddd %xmm1, %xmm2, %xmm21202; AVX-NEXT:    vpaddd %xmm1, %xmm0, %xmm01203; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01204; AVX-NEXT:    vandps %ymm1, %ymm0, %ymm01205; AVX-NEXT:    retl1206;1207; ALL32-LABEL: f8xi32_i128:1208; ALL32:       # %bb.0:1209; ALL32-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,1,2,3,0,1,2,3]1210; ALL32-NEXT:    # ymm1 = mem[0,1,0,1]1211; ALL32-NEXT:    vpaddd %ymm1, %ymm0, %ymm01212; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm01213; ALL32-NEXT:    retl1214;1215; AVX-64-LABEL: f8xi32_i128:1216; AVX-64:       # %bb.0:1217; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,1,2,3,0,1,2,3]1218; AVX-64-NEXT:    # ymm1 = mem[0,1,0,1]1219; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm21220; AVX-64-NEXT:    vpaddd %xmm1, %xmm2, %xmm21221; AVX-64-NEXT:    vpaddd %xmm1, %xmm0, %xmm01222; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01223; AVX-64-NEXT:    vandps %ymm1, %ymm0, %ymm01224; AVX-64-NEXT:    retq1225;1226; ALL64-LABEL: f8xi32_i128:1227; ALL64:       # %bb.0:1228; ALL64-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,1,2,3,0,1,2,3]1229; ALL64-NEXT:    # ymm1 = mem[0,1,0,1]1230; ALL64-NEXT:    vpaddd %ymm1, %ymm0, %ymm01231; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm01232; ALL64-NEXT:    retq1233  %res1 = add <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>, %a1234  %res2 = and <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>, %res11235  ret <8 x i32> %res21236}1237 1238 1239define <16 x i32> @f16xi32_i64(<16 x i32> %a) {1240; AVX-LABEL: f16xi32_i64:1241; AVX:       # %bb.0:1242; AVX-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1]1243; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm31244; AVX-NEXT:    vpaddd %xmm2, %xmm3, %xmm31245; AVX-NEXT:    vpaddd %xmm2, %xmm1, %xmm11246; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11247; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm31248; AVX-NEXT:    vpaddd %xmm2, %xmm3, %xmm31249; AVX-NEXT:    vpaddd %xmm2, %xmm0, %xmm01250; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01251; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm01252; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm11253; AVX-NEXT:    retl1254;1255; AVX2-LABEL: f16xi32_i64:1256; AVX2:       # %bb.0:1257; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1]1258; AVX2-NEXT:    vpaddd %ymm2, %ymm1, %ymm11259; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm01260; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm01261; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm11262; AVX2-NEXT:    retl1263;1264; AVX512-LABEL: f16xi32_i64:1265; AVX512:       # %bb.0:1266; AVX512-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]1267; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm01268; AVX512-NEXT:    vpandd %zmm1, %zmm0, %zmm01269; AVX512-NEXT:    retl1270;1271; AVX-64-LABEL: f16xi32_i64:1272; AVX-64:       # %bb.0:1273; AVX-64-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1]1274; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm31275; AVX-64-NEXT:    vpaddd %xmm2, %xmm3, %xmm31276; AVX-64-NEXT:    vpaddd %xmm2, %xmm1, %xmm11277; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11278; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm31279; AVX-64-NEXT:    vpaddd %xmm2, %xmm3, %xmm31280; AVX-64-NEXT:    vpaddd %xmm2, %xmm0, %xmm01281; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01282; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm01283; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm11284; AVX-64-NEXT:    retq1285;1286; AVX2-64-LABEL: f16xi32_i64:1287; AVX2-64:       # %bb.0:1288; AVX2-64-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [0,1,0,1,0,1,0,1]1289; AVX2-64-NEXT:    vpaddd %ymm2, %ymm1, %ymm11290; AVX2-64-NEXT:    vpaddd %ymm2, %ymm0, %ymm01291; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm01292; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm11293; AVX2-64-NEXT:    retq1294;1295; AVX512F-64-LABEL: f16xi32_i64:1296; AVX512F-64:       # %bb.0:1297; AVX512F-64-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]1298; AVX512F-64-NEXT:    vpaddd %zmm1, %zmm0, %zmm01299; AVX512F-64-NEXT:    vpandd %zmm1, %zmm0, %zmm01300; AVX512F-64-NEXT:    retq1301  %res1 = add <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>, %a1302  %res2 = and <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>, %res11303  ret <16 x i32> %res21304}1305 1306 1307define <16 x i32> @f16xi32_i128(<16 x i32> %a) {1308; AVX-LABEL: f16xi32_i128:1309; AVX:       # %bb.0:1310; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3]1311; AVX-NEXT:    # ymm2 = mem[0,1,0,1]1312; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm31313; AVX-NEXT:    vpaddd %xmm2, %xmm3, %xmm31314; AVX-NEXT:    vpaddd %xmm2, %xmm1, %xmm11315; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11316; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm31317; AVX-NEXT:    vpaddd %xmm2, %xmm3, %xmm31318; AVX-NEXT:    vpaddd %xmm2, %xmm0, %xmm01319; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01320; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm01321; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm11322; AVX-NEXT:    retl1323;1324; AVX2-LABEL: f16xi32_i128:1325; AVX2:       # %bb.0:1326; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3]1327; AVX2-NEXT:    # ymm2 = mem[0,1,0,1]1328; AVX2-NEXT:    vpaddd %ymm2, %ymm1, %ymm11329; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm01330; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm01331; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm11332; AVX2-NEXT:    retl1333;1334; AVX512-LABEL: f16xi32_i128:1335; AVX512:       # %bb.0:1336; AVX512-NEXT:    vbroadcasti32x4 {{.*#+}} zmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1337; AVX512-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1338; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm01339; AVX512-NEXT:    vpandd %zmm1, %zmm0, %zmm01340; AVX512-NEXT:    retl1341;1342; AVX-64-LABEL: f16xi32_i128:1343; AVX-64:       # %bb.0:1344; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3]1345; AVX-64-NEXT:    # ymm2 = mem[0,1,0,1]1346; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm31347; AVX-64-NEXT:    vpaddd %xmm2, %xmm3, %xmm31348; AVX-64-NEXT:    vpaddd %xmm2, %xmm1, %xmm11349; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11350; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm31351; AVX-64-NEXT:    vpaddd %xmm2, %xmm3, %xmm31352; AVX-64-NEXT:    vpaddd %xmm2, %xmm0, %xmm01353; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01354; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm01355; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm11356; AVX-64-NEXT:    retq1357;1358; AVX2-64-LABEL: f16xi32_i128:1359; AVX2-64:       # %bb.0:1360; AVX2-64-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,2,3,0,1,2,3]1361; AVX2-64-NEXT:    # ymm2 = mem[0,1,0,1]1362; AVX2-64-NEXT:    vpaddd %ymm2, %ymm1, %ymm11363; AVX2-64-NEXT:    vpaddd %ymm2, %ymm0, %ymm01364; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm01365; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm11366; AVX2-64-NEXT:    retq1367;1368; AVX512F-64-LABEL: f16xi32_i128:1369; AVX512F-64:       # %bb.0:1370; AVX512F-64-NEXT:    vbroadcasti32x4 {{.*#+}} zmm1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1371; AVX512F-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1372; AVX512F-64-NEXT:    vpaddd %zmm1, %zmm0, %zmm01373; AVX512F-64-NEXT:    vpandd %zmm1, %zmm0, %zmm01374; AVX512F-64-NEXT:    retq1375  %res1 = add <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>, %a1376  %res2 = and <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>, %res11377  ret <16 x i32> %res21378}1379 1380 1381define <4 x i64> @f4xi64_i128(<4 x i64> %a) {1382; AVX-LABEL: f4xi64_i128:1383; AVX:       # %bb.0:1384; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,0,1,0,0,0,1,0]1385; AVX-NEXT:    # ymm1 = mem[0,1,0,1]1386; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm21387; AVX-NEXT:    vpaddq %xmm1, %xmm2, %xmm21388; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm01389; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01390; AVX-NEXT:    vandps %ymm1, %ymm0, %ymm01391; AVX-NEXT:    retl1392;1393; ALL32-LABEL: f4xi64_i128:1394; ALL32:       # %bb.0:1395; ALL32-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,0,1,0,0,0,1,0]1396; ALL32-NEXT:    # ymm1 = mem[0,1,0,1]1397; ALL32-NEXT:    vpaddq %ymm1, %ymm0, %ymm01398; ALL32-NEXT:    vpand %ymm1, %ymm0, %ymm01399; ALL32-NEXT:    retl1400;1401; AVX-64-LABEL: f4xi64_i128:1402; AVX-64:       # %bb.0:1403; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,1,0,1]1404; AVX-64-NEXT:    # ymm1 = mem[0,1,0,1]1405; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm21406; AVX-64-NEXT:    vpaddq %xmm1, %xmm2, %xmm21407; AVX-64-NEXT:    vpaddq %xmm1, %xmm0, %xmm01408; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01409; AVX-64-NEXT:    vandps %ymm1, %ymm0, %ymm01410; AVX-64-NEXT:    retq1411;1412; ALL64-LABEL: f4xi64_i128:1413; ALL64:       # %bb.0:1414; ALL64-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,1,0,1]1415; ALL64-NEXT:    # ymm1 = mem[0,1,0,1]1416; ALL64-NEXT:    vpaddq %ymm1, %ymm0, %ymm01417; ALL64-NEXT:    vpand %ymm1, %ymm0, %ymm01418; ALL64-NEXT:    retq1419  %res1 = add <4 x i64> <i64 0, i64 1, i64 0, i64 1>, %a1420  %res2 = and <4 x i64> <i64 0, i64 1, i64 0, i64 1>, %res11421  ret <4 x i64> %res21422}1423 1424 1425define <8 x i64> @f8xi64_i128(<8 x i64> %a) {1426; AVX-LABEL: f8xi64_i128:1427; AVX:       # %bb.0:1428; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [0,0,1,0,0,0,1,0]1429; AVX-NEXT:    # ymm2 = mem[0,1,0,1]1430; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm31431; AVX-NEXT:    vpaddq %xmm2, %xmm3, %xmm31432; AVX-NEXT:    vpaddq %xmm2, %xmm1, %xmm11433; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11434; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm31435; AVX-NEXT:    vpaddq %xmm2, %xmm3, %xmm31436; AVX-NEXT:    vpaddq %xmm2, %xmm0, %xmm01437; AVX-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01438; AVX-NEXT:    vandps %ymm2, %ymm0, %ymm01439; AVX-NEXT:    vandps %ymm2, %ymm1, %ymm11440; AVX-NEXT:    retl1441;1442; AVX2-LABEL: f8xi64_i128:1443; AVX2:       # %bb.0:1444; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,0,1,0,0,0,1,0]1445; AVX2-NEXT:    # ymm2 = mem[0,1,0,1]1446; AVX2-NEXT:    vpaddq %ymm2, %ymm1, %ymm11447; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm01448; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm01449; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm11450; AVX2-NEXT:    retl1451;1452; AVX512-LABEL: f8xi64_i128:1453; AVX512:       # %bb.0:1454; AVX512-NEXT:    vbroadcasti32x4 {{.*#+}} zmm1 = [0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0]1455; AVX512-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1456; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm01457; AVX512-NEXT:    vpandq %zmm1, %zmm0, %zmm01458; AVX512-NEXT:    retl1459;1460; AVX-64-LABEL: f8xi64_i128:1461; AVX-64:       # %bb.0:1462; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [0,1,0,1]1463; AVX-64-NEXT:    # ymm2 = mem[0,1,0,1]1464; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm31465; AVX-64-NEXT:    vpaddq %xmm2, %xmm3, %xmm31466; AVX-64-NEXT:    vpaddq %xmm2, %xmm1, %xmm11467; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11468; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm31469; AVX-64-NEXT:    vpaddq %xmm2, %xmm3, %xmm31470; AVX-64-NEXT:    vpaddq %xmm2, %xmm0, %xmm01471; AVX-64-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01472; AVX-64-NEXT:    vandps %ymm2, %ymm0, %ymm01473; AVX-64-NEXT:    vandps %ymm2, %ymm1, %ymm11474; AVX-64-NEXT:    retq1475;1476; AVX2-64-LABEL: f8xi64_i128:1477; AVX2-64:       # %bb.0:1478; AVX2-64-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [0,1,0,1]1479; AVX2-64-NEXT:    # ymm2 = mem[0,1,0,1]1480; AVX2-64-NEXT:    vpaddq %ymm2, %ymm1, %ymm11481; AVX2-64-NEXT:    vpaddq %ymm2, %ymm0, %ymm01482; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm01483; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm11484; AVX2-64-NEXT:    retq1485;1486; AVX512F-64-LABEL: f8xi64_i128:1487; AVX512F-64:       # %bb.0:1488; AVX512F-64-NEXT:    vbroadcasti32x4 {{.*#+}} zmm1 = [0,1,0,1,0,1,0,1]1489; AVX512F-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1490; AVX512F-64-NEXT:    vpaddq %zmm1, %zmm0, %zmm01491; AVX512F-64-NEXT:    vpandq %zmm1, %zmm0, %zmm01492; AVX512F-64-NEXT:    retq1493  %res1 = add <8 x i64> <i64 0, i64 1, i64 0, i64 1, i64 0, i64 1, i64 0, i64 1>, %a1494  %res2 = and <8 x i64> <i64 0, i64 1, i64 0, i64 1, i64 0, i64 1, i64 0, i64 1>, %res11495  ret <8 x i64> %res21496}1497 1498 1499define <8 x i64> @f8xi64_i256(<8 x i64> %a) {1500; AVX-LABEL: f8xi64_i256:1501; AVX:       # %bb.0:1502; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm21503; AVX-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [2,3]1504; AVX-NEXT:    vpaddq %xmm3, %xmm2, %xmm21505; AVX-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,0,1,0,2,0,3,0]1506; AVX-NEXT:    vpaddq %xmm4, %xmm1, %xmm11507; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11508; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm21509; AVX-NEXT:    vpaddq %xmm3, %xmm2, %xmm21510; AVX-NEXT:    vpaddq %xmm4, %xmm0, %xmm01511; AVX-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01512; AVX-NEXT:    vandps %ymm4, %ymm0, %ymm01513; AVX-NEXT:    vandps %ymm4, %ymm1, %ymm11514; AVX-NEXT:    retl1515;1516; AVX2-LABEL: f8xi64_i256:1517; AVX2:       # %bb.0:1518; AVX2-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,1,2,3]1519; AVX2-NEXT:    vpaddq %ymm2, %ymm1, %ymm11520; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm01521; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm01522; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm11523; AVX2-NEXT:    retl1524;1525; AVX512-LABEL: f8xi64_i256:1526; AVX512:       # %bb.0:1527; AVX512-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [0,0,1,0,2,0,3,0,0,0,1,0,2,0,3,0]1528; AVX512-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]1529; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm01530; AVX512-NEXT:    vpandq %zmm1, %zmm0, %zmm01531; AVX512-NEXT:    retl1532;1533; AVX-64-LABEL: f8xi64_i256:1534; AVX-64:       # %bb.0:1535; AVX-64-NEXT:    vextractf128 $1, %ymm1, %xmm21536; AVX-64-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [2,3]1537; AVX-64-NEXT:    vpaddq %xmm3, %xmm2, %xmm21538; AVX-64-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,2,3]1539; AVX-64-NEXT:    vpaddq %xmm4, %xmm1, %xmm11540; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11541; AVX-64-NEXT:    vextractf128 $1, %ymm0, %xmm21542; AVX-64-NEXT:    vpaddq %xmm3, %xmm2, %xmm21543; AVX-64-NEXT:    vpaddq %xmm4, %xmm0, %xmm01544; AVX-64-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01545; AVX-64-NEXT:    vandps %ymm4, %ymm0, %ymm01546; AVX-64-NEXT:    vandps %ymm4, %ymm1, %ymm11547; AVX-64-NEXT:    retq1548;1549; AVX2-64-LABEL: f8xi64_i256:1550; AVX2-64:       # %bb.0:1551; AVX2-64-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,1,2,3]1552; AVX2-64-NEXT:    vpaddq %ymm2, %ymm1, %ymm11553; AVX2-64-NEXT:    vpaddq %ymm2, %ymm0, %ymm01554; AVX2-64-NEXT:    vpand %ymm2, %ymm0, %ymm01555; AVX2-64-NEXT:    vpand %ymm2, %ymm1, %ymm11556; AVX2-64-NEXT:    retq1557;1558; AVX512F-64-LABEL: f8xi64_i256:1559; AVX512F-64:       # %bb.0:1560; AVX512F-64-NEXT:    vbroadcasti64x4 {{.*#+}} zmm1 = [0,1,2,3,0,1,2,3]1561; AVX512F-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]1562; AVX512F-64-NEXT:    vpaddq %zmm1, %zmm0, %zmm01563; AVX512F-64-NEXT:    vpandq %zmm1, %zmm0, %zmm01564; AVX512F-64-NEXT:    retq1565  %res1 = add <8 x i64> <i64 0, i64 1, i64 2, i64 3, i64 0, i64 1, i64 2, i64 3>, %a1566  %res2 = and <8 x i64> <i64 0, i64 1, i64 2, i64 3, i64 0, i64 1, i64 2, i64 3>, %res11567  ret <8 x i64> %res21568}1569 1570 1571define <4 x float> @f4xf32_f64(<4 x float> %a) {1572; AVX-LABEL: f4xf32_f64:1573; AVX:       # %bb.0:1574; AVX-NEXT:    vmovddup {{.*#+}} xmm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1575; AVX-NEXT:    # xmm1 = mem[0,0]1576; AVX-NEXT:    vaddps %xmm1, %xmm0, %xmm01577; AVX-NEXT:    vdivps %xmm0, %xmm1, %xmm01578; AVX-NEXT:    retl1579;1580; ALL32-LABEL: f4xf32_f64:1581; ALL32:       # %bb.0:1582; ALL32-NEXT:    vmovddup {{.*#+}} xmm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1583; ALL32-NEXT:    # xmm1 = mem[0,0]1584; ALL32-NEXT:    vaddps %xmm1, %xmm0, %xmm01585; ALL32-NEXT:    vdivps %xmm0, %xmm1, %xmm01586; ALL32-NEXT:    retl1587;1588; AVX-64-LABEL: f4xf32_f64:1589; AVX-64:       # %bb.0:1590; AVX-64-NEXT:    vmovddup {{.*#+}} xmm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1591; AVX-64-NEXT:    # xmm1 = mem[0,0]1592; AVX-64-NEXT:    vaddps %xmm1, %xmm0, %xmm01593; AVX-64-NEXT:    vdivps %xmm0, %xmm1, %xmm01594; AVX-64-NEXT:    retq1595;1596; ALL64-LABEL: f4xf32_f64:1597; ALL64:       # %bb.0:1598; ALL64-NEXT:    vmovddup {{.*#+}} xmm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1599; ALL64-NEXT:    # xmm1 = mem[0,0]1600; ALL64-NEXT:    vaddps %xmm1, %xmm0, %xmm01601; ALL64-NEXT:    vdivps %xmm0, %xmm1, %xmm01602; ALL64-NEXT:    retq1603  %res1 = fadd <4 x float> <float 2.0, float 1.0, float 2.0, float 1.0>, %a1604  %res2 = fdiv <4 x float> <float 2.0, float 1.0, float 2.0, float 1.0>, %res11605  ret <4 x float> %res21606}1607 1608 1609define <8 x float> @f8xf32_f64(<8 x float> %a) {1610; AVX-LABEL: f8xf32_f64:1611; AVX:       # %bb.0:1612; AVX-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1613; AVX-NEXT:    vaddps %ymm1, %ymm0, %ymm01614; AVX-NEXT:    vdivps %ymm0, %ymm1, %ymm01615; AVX-NEXT:    retl1616;1617; ALL32-LABEL: f8xf32_f64:1618; ALL32:       # %bb.0:1619; ALL32-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1620; ALL32-NEXT:    vaddps %ymm1, %ymm0, %ymm01621; ALL32-NEXT:    vdivps %ymm0, %ymm1, %ymm01622; ALL32-NEXT:    retl1623;1624; AVX-64-LABEL: f8xf32_f64:1625; AVX-64:       # %bb.0:1626; AVX-64-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1627; AVX-64-NEXT:    vaddps %ymm1, %ymm0, %ymm01628; AVX-64-NEXT:    vdivps %ymm0, %ymm1, %ymm01629; AVX-64-NEXT:    retq1630;1631; ALL64-LABEL: f8xf32_f64:1632; ALL64:       # %bb.0:1633; ALL64-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1634; ALL64-NEXT:    vaddps %ymm1, %ymm0, %ymm01635; ALL64-NEXT:    vdivps %ymm0, %ymm1, %ymm01636; ALL64-NEXT:    retq1637  %res1 = fadd <8 x float> <float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0>, %a1638  %res2 = fdiv <8 x float> <float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0>, %res11639  ret <8 x float> %res21640}1641 1642 1643define <8 x float> @f8xf32_f128(<8 x float> %a) {1644; AVX-LABEL: f8xf32_f128:1645; AVX:       # %bb.0:1646; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1647; AVX-NEXT:    # ymm1 = mem[0,1,0,1]1648; AVX-NEXT:    vaddps %ymm1, %ymm0, %ymm01649; AVX-NEXT:    vdivps %ymm0, %ymm1, %ymm01650; AVX-NEXT:    retl1651;1652; ALL32-LABEL: f8xf32_f128:1653; ALL32:       # %bb.0:1654; ALL32-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1655; ALL32-NEXT:    # ymm1 = mem[0,1,0,1]1656; ALL32-NEXT:    vaddps %ymm1, %ymm0, %ymm01657; ALL32-NEXT:    vdivps %ymm0, %ymm1, %ymm01658; ALL32-NEXT:    retl1659;1660; AVX-64-LABEL: f8xf32_f128:1661; AVX-64:       # %bb.0:1662; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1663; AVX-64-NEXT:    # ymm1 = mem[0,1,0,1]1664; AVX-64-NEXT:    vaddps %ymm1, %ymm0, %ymm01665; AVX-64-NEXT:    vdivps %ymm0, %ymm1, %ymm01666; AVX-64-NEXT:    retq1667;1668; ALL64-LABEL: f8xf32_f128:1669; ALL64:       # %bb.0:1670; ALL64-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1671; ALL64-NEXT:    # ymm1 = mem[0,1,0,1]1672; ALL64-NEXT:    vaddps %ymm1, %ymm0, %ymm01673; ALL64-NEXT:    vdivps %ymm0, %ymm1, %ymm01674; ALL64-NEXT:    retq1675  %res1 = fadd <8 x float> <float 4.0, float 1.0, float 2.0, float 3.0, float 4.0, float 1.0, float 2.0, float 3.0>, %a1676  %res2 = fdiv <8 x float> <float 4.0, float 1.0, float 2.0, float 3.0, float 4.0, float 1.0, float 2.0, float 3.0>, %res11677  ret <8 x float> %res21678}1679 1680 1681define <16 x float> @f16xf32_f64(<16 x float> %a) {1682; AVX-LABEL: f16xf32_f64:1683; AVX:       # %bb.0:1684; AVX-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1685; AVX-NEXT:    vaddps %ymm2, %ymm1, %ymm11686; AVX-NEXT:    vaddps %ymm2, %ymm0, %ymm01687; AVX-NEXT:    vdivps %ymm0, %ymm2, %ymm01688; AVX-NEXT:    vdivps %ymm1, %ymm2, %ymm11689; AVX-NEXT:    retl1690;1691; AVX2-LABEL: f16xf32_f64:1692; AVX2:       # %bb.0:1693; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1694; AVX2-NEXT:    vaddps %ymm2, %ymm1, %ymm11695; AVX2-NEXT:    vaddps %ymm2, %ymm0, %ymm01696; AVX2-NEXT:    vdivps %ymm0, %ymm2, %ymm01697; AVX2-NEXT:    vdivps %ymm1, %ymm2, %ymm11698; AVX2-NEXT:    retl1699;1700; AVX512-LABEL: f16xf32_f64:1701; AVX512:       # %bb.0:1702; AVX512-NEXT:    vbroadcastsd {{.*#+}} zmm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1703; AVX512-NEXT:    vaddps %zmm1, %zmm0, %zmm01704; AVX512-NEXT:    vdivps %zmm0, %zmm1, %zmm01705; AVX512-NEXT:    retl1706;1707; AVX-64-LABEL: f16xf32_f64:1708; AVX-64:       # %bb.0:1709; AVX-64-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1710; AVX-64-NEXT:    vaddps %ymm2, %ymm1, %ymm11711; AVX-64-NEXT:    vaddps %ymm2, %ymm0, %ymm01712; AVX-64-NEXT:    vdivps %ymm0, %ymm2, %ymm01713; AVX-64-NEXT:    vdivps %ymm1, %ymm2, %ymm11714; AVX-64-NEXT:    retq1715;1716; AVX2-64-LABEL: f16xf32_f64:1717; AVX2-64:       # %bb.0:1718; AVX2-64-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1719; AVX2-64-NEXT:    vaddps %ymm2, %ymm1, %ymm11720; AVX2-64-NEXT:    vaddps %ymm2, %ymm0, %ymm01721; AVX2-64-NEXT:    vdivps %ymm0, %ymm2, %ymm01722; AVX2-64-NEXT:    vdivps %ymm1, %ymm2, %ymm11723; AVX2-64-NEXT:    retq1724;1725; AVX512F-64-LABEL: f16xf32_f64:1726; AVX512F-64:       # %bb.0:1727; AVX512F-64-NEXT:    vbroadcastsd {{.*#+}} zmm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1728; AVX512F-64-NEXT:    vaddps %zmm1, %zmm0, %zmm01729; AVX512F-64-NEXT:    vdivps %zmm0, %zmm1, %zmm01730; AVX512F-64-NEXT:    retq1731  %res1 = fadd <16 x float> <float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0>, %a1732  %res2 = fdiv <16 x float> <float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0, float 2.0, float 1.0>, %res11733  ret <16 x float> %res21734}1735 1736 1737define <16 x float> @f16xf32_f128(<16 x float> %a) {1738; AVX-LABEL: f16xf32_f128:1739; AVX:       # %bb.0:1740; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1741; AVX-NEXT:    # ymm2 = mem[0,1,0,1]1742; AVX-NEXT:    vaddps %ymm2, %ymm1, %ymm11743; AVX-NEXT:    vaddps %ymm2, %ymm0, %ymm01744; AVX-NEXT:    vdivps %ymm0, %ymm2, %ymm01745; AVX-NEXT:    vdivps %ymm1, %ymm2, %ymm11746; AVX-NEXT:    retl1747;1748; AVX2-LABEL: f16xf32_f128:1749; AVX2:       # %bb.0:1750; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1751; AVX2-NEXT:    # ymm2 = mem[0,1,0,1]1752; AVX2-NEXT:    vaddps %ymm2, %ymm1, %ymm11753; AVX2-NEXT:    vaddps %ymm2, %ymm0, %ymm01754; AVX2-NEXT:    vdivps %ymm0, %ymm2, %ymm01755; AVX2-NEXT:    vdivps %ymm1, %ymm2, %ymm11756; AVX2-NEXT:    retl1757;1758; AVX512-LABEL: f16xf32_f128:1759; AVX512:       # %bb.0:1760; AVX512-NEXT:    vbroadcastf32x4 {{.*#+}} zmm1 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1761; AVX512-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1762; AVX512-NEXT:    vaddps %zmm1, %zmm0, %zmm01763; AVX512-NEXT:    vdivps %zmm0, %zmm1, %zmm01764; AVX512-NEXT:    retl1765;1766; AVX-64-LABEL: f16xf32_f128:1767; AVX-64:       # %bb.0:1768; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1769; AVX-64-NEXT:    # ymm2 = mem[0,1,0,1]1770; AVX-64-NEXT:    vaddps %ymm2, %ymm1, %ymm11771; AVX-64-NEXT:    vaddps %ymm2, %ymm0, %ymm01772; AVX-64-NEXT:    vdivps %ymm0, %ymm2, %ymm01773; AVX-64-NEXT:    vdivps %ymm1, %ymm2, %ymm11774; AVX-64-NEXT:    retq1775;1776; AVX2-64-LABEL: f16xf32_f128:1777; AVX2-64:       # %bb.0:1778; AVX2-64-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1779; AVX2-64-NEXT:    # ymm2 = mem[0,1,0,1]1780; AVX2-64-NEXT:    vaddps %ymm2, %ymm1, %ymm11781; AVX2-64-NEXT:    vaddps %ymm2, %ymm0, %ymm01782; AVX2-64-NEXT:    vdivps %ymm0, %ymm2, %ymm01783; AVX2-64-NEXT:    vdivps %ymm1, %ymm2, %ymm11784; AVX2-64-NEXT:    retq1785;1786; AVX512F-64-LABEL: f16xf32_f128:1787; AVX512F-64:       # %bb.0:1788; AVX512F-64-NEXT:    vbroadcastf32x4 {{.*#+}} zmm1 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1789; AVX512F-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1790; AVX512F-64-NEXT:    vaddps %zmm1, %zmm0, %zmm01791; AVX512F-64-NEXT:    vdivps %zmm0, %zmm1, %zmm01792; AVX512F-64-NEXT:    retq1793  %res1 = fadd <16 x float> <float 4.0, float 1.0, float 2.0, float 3.0, float 4.0, float 1.0, float 2.0, float 3.0, float 4.0, float 1.0, float 2.0, float 3.0, float 4.0, float 1.0, float 2.0, float 3.0>, %a1794  %res2 = fdiv <16 x float> <float 4.0, float 1.0, float 2.0, float 3.0, float 4.0, float 1.0, float 2.0, float 3.0, float 4.0, float 1.0, float 2.0, float 3.0, float 4.0, float 1.0, float 2.0, float 3.0>, %res11795  ret <16 x float> %res21796}1797 1798 1799define <16 x float> @f16xf32_f256(<16 x float> %a) {1800; AVX-LABEL: f16xf32_f256:1801; AVX:       # %bb.0:1802; AVX-NEXT:    vmovaps {{.*#+}} ymm2 = [8.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0]1803; AVX-NEXT:    vaddps %ymm2, %ymm1, %ymm11804; AVX-NEXT:    vaddps %ymm2, %ymm0, %ymm01805; AVX-NEXT:    vdivps %ymm0, %ymm2, %ymm01806; AVX-NEXT:    vdivps %ymm1, %ymm2, %ymm11807; AVX-NEXT:    retl1808;1809; AVX2-LABEL: f16xf32_f256:1810; AVX2:       # %bb.0:1811; AVX2-NEXT:    vmovaps {{.*#+}} ymm2 = [8.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0]1812; AVX2-NEXT:    vaddps %ymm2, %ymm1, %ymm11813; AVX2-NEXT:    vaddps %ymm2, %ymm0, %ymm01814; AVX2-NEXT:    vdivps %ymm0, %ymm2, %ymm01815; AVX2-NEXT:    vdivps %ymm1, %ymm2, %ymm11816; AVX2-NEXT:    retl1817;1818; AVX512-LABEL: f16xf32_f256:1819; AVX512:       # %bb.0:1820; AVX512-NEXT:    vbroadcastf64x4 {{.*#+}} zmm1 = [8.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0]1821; AVX512-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]1822; AVX512-NEXT:    vaddps %zmm1, %zmm0, %zmm01823; AVX512-NEXT:    vdivps %zmm0, %zmm1, %zmm01824; AVX512-NEXT:    retl1825;1826; AVX-64-LABEL: f16xf32_f256:1827; AVX-64:       # %bb.0:1828; AVX-64-NEXT:    vmovaps {{.*#+}} ymm2 = [8.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0]1829; AVX-64-NEXT:    vaddps %ymm2, %ymm1, %ymm11830; AVX-64-NEXT:    vaddps %ymm2, %ymm0, %ymm01831; AVX-64-NEXT:    vdivps %ymm0, %ymm2, %ymm01832; AVX-64-NEXT:    vdivps %ymm1, %ymm2, %ymm11833; AVX-64-NEXT:    retq1834;1835; AVX2-64-LABEL: f16xf32_f256:1836; AVX2-64:       # %bb.0:1837; AVX2-64-NEXT:    vmovaps {{.*#+}} ymm2 = [8.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0]1838; AVX2-64-NEXT:    vaddps %ymm2, %ymm1, %ymm11839; AVX2-64-NEXT:    vaddps %ymm2, %ymm0, %ymm01840; AVX2-64-NEXT:    vdivps %ymm0, %ymm2, %ymm01841; AVX2-64-NEXT:    vdivps %ymm1, %ymm2, %ymm11842; AVX2-64-NEXT:    retq1843;1844; AVX512F-64-LABEL: f16xf32_f256:1845; AVX512F-64:       # %bb.0:1846; AVX512F-64-NEXT:    vbroadcastf64x4 {{.*#+}} zmm1 = [8.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0]1847; AVX512F-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]1848; AVX512F-64-NEXT:    vaddps %zmm1, %zmm0, %zmm01849; AVX512F-64-NEXT:    vdivps %zmm0, %zmm1, %zmm01850; AVX512F-64-NEXT:    retq1851  %res1 = fadd <16 x float> <float 8.0, float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0, float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0>, %a1852  %res2 = fdiv <16 x float> <float 8.0, float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0, float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0>, %res11853  ret <16 x float> %res21854}1855 1856 1857define <4 x double> @f4xf64_f128(<4 x double> %a) {1858; AVX-LABEL: f4xf64_f128:1859; AVX:       # %bb.0:1860; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1861; AVX-NEXT:    # ymm1 = mem[0,1,0,1]1862; AVX-NEXT:    vaddpd %ymm1, %ymm0, %ymm01863; AVX-NEXT:    vdivpd %ymm0, %ymm1, %ymm01864; AVX-NEXT:    retl1865;1866; ALL32-LABEL: f4xf64_f128:1867; ALL32:       # %bb.0:1868; ALL32-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1869; ALL32-NEXT:    # ymm1 = mem[0,1,0,1]1870; ALL32-NEXT:    vaddpd %ymm1, %ymm0, %ymm01871; ALL32-NEXT:    vdivpd %ymm0, %ymm1, %ymm01872; ALL32-NEXT:    retl1873;1874; AVX-64-LABEL: f4xf64_f128:1875; AVX-64:       # %bb.0:1876; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1877; AVX-64-NEXT:    # ymm1 = mem[0,1,0,1]1878; AVX-64-NEXT:    vaddpd %ymm1, %ymm0, %ymm01879; AVX-64-NEXT:    vdivpd %ymm0, %ymm1, %ymm01880; AVX-64-NEXT:    retq1881;1882; ALL64-LABEL: f4xf64_f128:1883; ALL64:       # %bb.0:1884; ALL64-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1885; ALL64-NEXT:    # ymm1 = mem[0,1,0,1]1886; ALL64-NEXT:    vaddpd %ymm1, %ymm0, %ymm01887; ALL64-NEXT:    vdivpd %ymm0, %ymm1, %ymm01888; ALL64-NEXT:    retq1889  %res1 = fadd <4 x double> <double 2.0, double 1.0, double 2.0, double 1.0>, %a1890  %res2 = fdiv <4 x double> <double 2.0, double 1.0, double 2.0, double 1.0>, %res11891  ret <4 x double> %res21892}1893 1894 1895define <8 x double> @f8xf64_f128(<8 x double> %a) {1896; AVX-LABEL: f8xf64_f128:1897; AVX:       # %bb.0:1898; AVX-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1899; AVX-NEXT:    # ymm2 = mem[0,1,0,1]1900; AVX-NEXT:    vaddpd %ymm2, %ymm1, %ymm11901; AVX-NEXT:    vaddpd %ymm2, %ymm0, %ymm01902; AVX-NEXT:    vdivpd %ymm0, %ymm2, %ymm01903; AVX-NEXT:    vdivpd %ymm1, %ymm2, %ymm11904; AVX-NEXT:    retl1905;1906; AVX2-LABEL: f8xf64_f128:1907; AVX2:       # %bb.0:1908; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1909; AVX2-NEXT:    # ymm2 = mem[0,1,0,1]1910; AVX2-NEXT:    vaddpd %ymm2, %ymm1, %ymm11911; AVX2-NEXT:    vaddpd %ymm2, %ymm0, %ymm01912; AVX2-NEXT:    vdivpd %ymm0, %ymm2, %ymm01913; AVX2-NEXT:    vdivpd %ymm1, %ymm2, %ymm11914; AVX2-NEXT:    retl1915;1916; AVX512-LABEL: f8xf64_f128:1917; AVX512:       # %bb.0:1918; AVX512-NEXT:    vbroadcastf32x4 {{.*#+}} zmm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1919; AVX512-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1920; AVX512-NEXT:    vaddpd %zmm1, %zmm0, %zmm01921; AVX512-NEXT:    vdivpd %zmm0, %zmm1, %zmm01922; AVX512-NEXT:    retl1923;1924; AVX-64-LABEL: f8xf64_f128:1925; AVX-64:       # %bb.0:1926; AVX-64-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1927; AVX-64-NEXT:    # ymm2 = mem[0,1,0,1]1928; AVX-64-NEXT:    vaddpd %ymm2, %ymm1, %ymm11929; AVX-64-NEXT:    vaddpd %ymm2, %ymm0, %ymm01930; AVX-64-NEXT:    vdivpd %ymm0, %ymm2, %ymm01931; AVX-64-NEXT:    vdivpd %ymm1, %ymm2, %ymm11932; AVX-64-NEXT:    retq1933;1934; AVX2-64-LABEL: f8xf64_f128:1935; AVX2-64:       # %bb.0:1936; AVX2-64-NEXT:    vbroadcastf128 {{.*#+}} ymm2 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0]1937; AVX2-64-NEXT:    # ymm2 = mem[0,1,0,1]1938; AVX2-64-NEXT:    vaddpd %ymm2, %ymm1, %ymm11939; AVX2-64-NEXT:    vaddpd %ymm2, %ymm0, %ymm01940; AVX2-64-NEXT:    vdivpd %ymm0, %ymm2, %ymm01941; AVX2-64-NEXT:    vdivpd %ymm1, %ymm2, %ymm11942; AVX2-64-NEXT:    retq1943;1944; AVX512F-64-LABEL: f8xf64_f128:1945; AVX512F-64:       # %bb.0:1946; AVX512F-64-NEXT:    vbroadcastf32x4 {{.*#+}} zmm1 = [2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0,2.0E+0,1.0E+0]1947; AVX512F-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1948; AVX512F-64-NEXT:    vaddpd %zmm1, %zmm0, %zmm01949; AVX512F-64-NEXT:    vdivpd %zmm0, %zmm1, %zmm01950; AVX512F-64-NEXT:    retq1951  %res1 = fadd <8 x double> <double 2.0, double 1.0, double 2.0, double 1.0, double 2.0, double 1.0, double 2.0, double 1.0>, %a1952  %res2 = fdiv <8 x double> <double 2.0, double 1.0, double 2.0, double 1.0, double 2.0, double 1.0, double 2.0, double 1.0>, %res11953  ret <8 x double> %res21954}1955 1956 1957define <8 x double> @f8xf64_f256(<8 x double> %a) {1958; AVX-LABEL: f8xf64_f256:1959; AVX:       # %bb.0:1960; AVX-NEXT:    vmovapd {{.*#+}} ymm2 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0]1961; AVX-NEXT:    vaddpd %ymm2, %ymm1, %ymm11962; AVX-NEXT:    vaddpd %ymm2, %ymm0, %ymm01963; AVX-NEXT:    vdivpd %ymm0, %ymm2, %ymm01964; AVX-NEXT:    vdivpd %ymm1, %ymm2, %ymm11965; AVX-NEXT:    retl1966;1967; AVX2-LABEL: f8xf64_f256:1968; AVX2:       # %bb.0:1969; AVX2-NEXT:    vmovapd {{.*#+}} ymm2 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0]1970; AVX2-NEXT:    vaddpd %ymm2, %ymm1, %ymm11971; AVX2-NEXT:    vaddpd %ymm2, %ymm0, %ymm01972; AVX2-NEXT:    vdivpd %ymm0, %ymm2, %ymm01973; AVX2-NEXT:    vdivpd %ymm1, %ymm2, %ymm11974; AVX2-NEXT:    retl1975;1976; AVX512-LABEL: f8xf64_f256:1977; AVX512:       # %bb.0:1978; AVX512-NEXT:    vbroadcastf64x4 {{.*#+}} zmm1 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]1979; AVX512-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]1980; AVX512-NEXT:    vaddpd %zmm1, %zmm0, %zmm01981; AVX512-NEXT:    vdivpd %zmm0, %zmm1, %zmm01982; AVX512-NEXT:    retl1983;1984; AVX-64-LABEL: f8xf64_f256:1985; AVX-64:       # %bb.0:1986; AVX-64-NEXT:    vmovapd {{.*#+}} ymm2 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0]1987; AVX-64-NEXT:    vaddpd %ymm2, %ymm1, %ymm11988; AVX-64-NEXT:    vaddpd %ymm2, %ymm0, %ymm01989; AVX-64-NEXT:    vdivpd %ymm0, %ymm2, %ymm01990; AVX-64-NEXT:    vdivpd %ymm1, %ymm2, %ymm11991; AVX-64-NEXT:    retq1992;1993; AVX2-64-LABEL: f8xf64_f256:1994; AVX2-64:       # %bb.0:1995; AVX2-64-NEXT:    vmovapd {{.*#+}} ymm2 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0]1996; AVX2-64-NEXT:    vaddpd %ymm2, %ymm1, %ymm11997; AVX2-64-NEXT:    vaddpd %ymm2, %ymm0, %ymm01998; AVX2-64-NEXT:    vdivpd %ymm0, %ymm2, %ymm01999; AVX2-64-NEXT:    vdivpd %ymm1, %ymm2, %ymm12000; AVX2-64-NEXT:    retq2001;2002; AVX512F-64-LABEL: f8xf64_f256:2003; AVX512F-64:       # %bb.0:2004; AVX512F-64-NEXT:    vbroadcastf64x4 {{.*#+}} zmm1 = [4.0E+0,1.0E+0,2.0E+0,3.0E+0,4.0E+0,1.0E+0,2.0E+0,3.0E+0]2005; AVX512F-64-NEXT:    # zmm1 = mem[0,1,2,3,0,1,2,3]2006; AVX512F-64-NEXT:    vaddpd %zmm1, %zmm0, %zmm02007; AVX512F-64-NEXT:    vdivpd %zmm0, %zmm1, %zmm02008; AVX512F-64-NEXT:    retq2009  %res1 = fadd <8 x double> <double 4.0, double 1.0, double 2.0, double 3.0, double 4.0, double 1.0, double 2.0, double 3.0>, %a2010  %res2 = fdiv <8 x double> <double 4.0, double 1.0, double 2.0, double 3.0, double 4.0, double 1.0, double 2.0, double 3.0>, %res12011  ret <8 x double> %res22012}2013 2014 2015define <8 x i16> @f8xi16_i32_NaN(<8 x i16> %a) {2016; AVX-LABEL: f8xi16_i32_NaN:2017; AVX:       # %bb.0:2018; AVX-NEXT:    vbroadcastss {{.*#+}} xmm1 = [0,65466,0,65466,0,65466,0,65466]2019; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm02020; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm02021; AVX-NEXT:    retl2022;2023; ALL32-LABEL: f8xi16_i32_NaN:2024; ALL32:       # %bb.0:2025; ALL32-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [0,65466,0,65466,0,65466,0,65466]2026; ALL32-NEXT:    vpaddw %xmm1, %xmm0, %xmm02027; ALL32-NEXT:    vpand %xmm1, %xmm0, %xmm02028; ALL32-NEXT:    retl2029;2030; AVX-64-LABEL: f8xi16_i32_NaN:2031; AVX-64:       # %bb.0:2032; AVX-64-NEXT:    vbroadcastss {{.*#+}} xmm1 = [0,65466,0,65466,0,65466,0,65466]2033; AVX-64-NEXT:    vpaddw %xmm1, %xmm0, %xmm02034; AVX-64-NEXT:    vpand %xmm1, %xmm0, %xmm02035; AVX-64-NEXT:    retq2036;2037; ALL64-LABEL: f8xi16_i32_NaN:2038; ALL64:       # %bb.0:2039; ALL64-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [0,65466,0,65466,0,65466,0,65466]2040; ALL64-NEXT:    vpaddw %xmm1, %xmm0, %xmm02041; ALL64-NEXT:    vpand %xmm1, %xmm0, %xmm02042; ALL64-NEXT:    retq2043  %res1 = add <8 x i16> <i16 0, i16 -70, i16 0, i16 -70, i16 0, i16 -70, i16 0, i16 -70>, %a2044  %res2 = and <8 x i16> <i16 0, i16 -70, i16 0, i16 -70, i16 0, i16 -70, i16 0, i16 -70>, %res12045  ret <8 x i16> %res22046}2047