brintos

brintos / llvm-project-archived public Read only

0
0
Text · 156.0 KiB · 541ca9d Raw
3452 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE414; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop | FileCheck %s --check-prefixes=XOP,XOP-FALLBACK7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefixes=XOP,XOPAVX18; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefixes=XOP,XOPAVX29; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX512F10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX512VL,AVX512VL-FALLBACK11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix=AVX512BW-FALLBACK12; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX512VL,AVX512VLBW13 14; These test cases are inspired by C++2a std::midpoint().15; See https://bugs.llvm.org/show_bug.cgi?id=4096516 17; Using 128-bit vector regs.18 19; ---------------------------------------------------------------------------- ;20; 32-bit width. 128 / 32 = 4 elts.21; ---------------------------------------------------------------------------- ;22 23; Values come from regs24 25define <4 x i32> @vec128_i32_signed_reg_reg(<4 x i32> %a1, <4 x i32> %a2) nounwind {26; SSE2-LABEL: vec128_i32_signed_reg_reg:27; SSE2:       # %bb.0:28; SSE2-NEXT:    movdqa %xmm0, %xmm229; SSE2-NEXT:    pcmpgtd %xmm1, %xmm230; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,1,1,1]31; SSE2-NEXT:    por %xmm2, %xmm332; SSE2-NEXT:    movdqa %xmm0, %xmm433; SSE2-NEXT:    psubd %xmm1, %xmm434; SSE2-NEXT:    pxor %xmm2, %xmm435; SSE2-NEXT:    psubd %xmm4, %xmm236; SSE2-NEXT:    psrld $1, %xmm237; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]38; SSE2-NEXT:    pmuludq %xmm3, %xmm239; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]40; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]41; SSE2-NEXT:    pmuludq %xmm1, %xmm342; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]43; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]44; SSE2-NEXT:    paddd %xmm2, %xmm045; SSE2-NEXT:    retq46;47; SSE41-LABEL: vec128_i32_signed_reg_reg:48; SSE41:       # %bb.0:49; SSE41-NEXT:    movdqa %xmm0, %xmm250; SSE41-NEXT:    pcmpgtd %xmm1, %xmm251; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm252; SSE41-NEXT:    movdqa %xmm0, %xmm353; SSE41-NEXT:    pminsd %xmm1, %xmm354; SSE41-NEXT:    pmaxsd %xmm0, %xmm155; SSE41-NEXT:    psubd %xmm3, %xmm156; SSE41-NEXT:    psrld $1, %xmm157; SSE41-NEXT:    pmulld %xmm1, %xmm258; SSE41-NEXT:    paddd %xmm2, %xmm059; SSE41-NEXT:    retq60;61; AVX1-LABEL: vec128_i32_signed_reg_reg:62; AVX1:       # %bb.0:63; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm264; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm265; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm366; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm167; AVX1-NEXT:    vpsubd %xmm3, %xmm1, %xmm168; AVX1-NEXT:    vpsrld $1, %xmm1, %xmm169; AVX1-NEXT:    vpmulld %xmm2, %xmm1, %xmm170; AVX1-NEXT:    vpaddd %xmm0, %xmm1, %xmm071; AVX1-NEXT:    retq72;73; AVX2-LABEL: vec128_i32_signed_reg_reg:74; AVX2:       # %bb.0:75; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm276; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]77; AVX2-NEXT:    vpor %xmm3, %xmm2, %xmm278; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm379; AVX2-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm180; AVX2-NEXT:    vpsubd %xmm3, %xmm1, %xmm181; AVX2-NEXT:    vpsrld $1, %xmm1, %xmm182; AVX2-NEXT:    vpmulld %xmm2, %xmm1, %xmm183; AVX2-NEXT:    vpaddd %xmm0, %xmm1, %xmm084; AVX2-NEXT:    retq85;86; XOP-FALLBACK-LABEL: vec128_i32_signed_reg_reg:87; XOP-FALLBACK:       # %bb.0:88; XOP-FALLBACK-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm289; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm290; XOP-FALLBACK-NEXT:    vpminsd %xmm1, %xmm0, %xmm391; XOP-FALLBACK-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm192; XOP-FALLBACK-NEXT:    vpsubd %xmm3, %xmm1, %xmm193; XOP-FALLBACK-NEXT:    vpsrld $1, %xmm1, %xmm194; XOP-FALLBACK-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm095; XOP-FALLBACK-NEXT:    retq96;97; XOPAVX1-LABEL: vec128_i32_signed_reg_reg:98; XOPAVX1:       # %bb.0:99; XOPAVX1-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm2100; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2101; XOPAVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm3102; XOPAVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1103; XOPAVX1-NEXT:    vpsubd %xmm3, %xmm1, %xmm1104; XOPAVX1-NEXT:    vpsrld $1, %xmm1, %xmm1105; XOPAVX1-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0106; XOPAVX1-NEXT:    retq107;108; XOPAVX2-LABEL: vec128_i32_signed_reg_reg:109; XOPAVX2:       # %bb.0:110; XOPAVX2-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm2111; XOPAVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]112; XOPAVX2-NEXT:    vpor %xmm3, %xmm2, %xmm2113; XOPAVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm3114; XOPAVX2-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1115; XOPAVX2-NEXT:    vpsubd %xmm3, %xmm1, %xmm1116; XOPAVX2-NEXT:    vpsrld $1, %xmm1, %xmm1117; XOPAVX2-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0118; XOPAVX2-NEXT:    retq119;120; AVX512F-LABEL: vec128_i32_signed_reg_reg:121; AVX512F:       # %bb.0:122; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1123; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0124; AVX512F-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1125; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2126; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]127; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}128; AVX512F-NEXT:    vpminsd %xmm1, %xmm0, %xmm2129; AVX512F-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1130; AVX512F-NEXT:    vpsubd %xmm2, %xmm1, %xmm1131; AVX512F-NEXT:    vpsrld $1, %xmm1, %xmm1132; AVX512F-NEXT:    vpmulld %xmm3, %xmm1, %xmm1133; AVX512F-NEXT:    vpaddd %xmm0, %xmm1, %xmm0134; AVX512F-NEXT:    vzeroupper135; AVX512F-NEXT:    retq136;137; AVX512VL-LABEL: vec128_i32_signed_reg_reg:138; AVX512VL:       # %bb.0:139; AVX512VL-NEXT:    vpcmpgtd %xmm1, %xmm0, %k1140; AVX512VL-NEXT:    vpminsd %xmm1, %xmm0, %xmm2141; AVX512VL-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1142; AVX512VL-NEXT:    vpsubd %xmm2, %xmm1, %xmm1143; AVX512VL-NEXT:    vpsrld $1, %xmm1, %xmm1144; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2145; AVX512VL-NEXT:    vpsubd %xmm1, %xmm2, %xmm1 {%k1}146; AVX512VL-NEXT:    vpaddd %xmm0, %xmm1, %xmm0147; AVX512VL-NEXT:    retq148;149; AVX512BW-FALLBACK-LABEL: vec128_i32_signed_reg_reg:150; AVX512BW-FALLBACK:       # %bb.0:151; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1152; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0153; AVX512BW-FALLBACK-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1154; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2155; AVX512BW-FALLBACK-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]156; AVX512BW-FALLBACK-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}157; AVX512BW-FALLBACK-NEXT:    vpminsd %xmm1, %xmm0, %xmm2158; AVX512BW-FALLBACK-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1159; AVX512BW-FALLBACK-NEXT:    vpsubd %xmm2, %xmm1, %xmm1160; AVX512BW-FALLBACK-NEXT:    vpsrld $1, %xmm1, %xmm1161; AVX512BW-FALLBACK-NEXT:    vpmulld %xmm3, %xmm1, %xmm1162; AVX512BW-FALLBACK-NEXT:    vpaddd %xmm0, %xmm1, %xmm0163; AVX512BW-FALLBACK-NEXT:    vzeroupper164; AVX512BW-FALLBACK-NEXT:    retq165  %t3 = icmp sgt <4 x i32> %a1, %a2 ; signed166  %t4 = select <4 x i1> %t3, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>167  %t5 = select <4 x i1> %t3, <4 x i32> %a2, <4 x i32> %a1168  %t6 = select <4 x i1> %t3, <4 x i32> %a1, <4 x i32> %a2169  %t7 = sub <4 x i32> %t6, %t5170  %t8 = lshr <4 x i32> %t7, <i32 1, i32 1, i32 1, i32 1>171  %t9 = mul nsw <4 x i32> %t8, %t4 ; signed172  %a10 = add nsw <4 x i32> %t9, %a1 ; signed173  ret <4 x i32> %a10174}175 176define <4 x i32> @vec128_i32_unsigned_reg_reg(<4 x i32> %a1, <4 x i32> %a2) nounwind {177; SSE2-LABEL: vec128_i32_unsigned_reg_reg:178; SSE2:       # %bb.0:179; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]180; SSE2-NEXT:    movdqa %xmm0, %xmm3181; SSE2-NEXT:    psubd %xmm1, %xmm3182; SSE2-NEXT:    pxor %xmm2, %xmm1183; SSE2-NEXT:    pxor %xmm0, %xmm2184; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2185; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [1,1,1,1]186; SSE2-NEXT:    por %xmm2, %xmm1187; SSE2-NEXT:    pxor %xmm2, %xmm3188; SSE2-NEXT:    psubd %xmm3, %xmm2189; SSE2-NEXT:    psrld $1, %xmm2190; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]191; SSE2-NEXT:    pmuludq %xmm1, %xmm2192; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]193; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]194; SSE2-NEXT:    pmuludq %xmm3, %xmm1195; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]196; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]197; SSE2-NEXT:    paddd %xmm2, %xmm0198; SSE2-NEXT:    retq199;200; SSE41-LABEL: vec128_i32_unsigned_reg_reg:201; SSE41:       # %bb.0:202; SSE41-NEXT:    movdqa %xmm0, %xmm2203; SSE41-NEXT:    pminud %xmm1, %xmm2204; SSE41-NEXT:    movdqa %xmm0, %xmm3205; SSE41-NEXT:    pcmpeqd %xmm2, %xmm3206; SSE41-NEXT:    pcmpeqd %xmm4, %xmm4207; SSE41-NEXT:    pxor %xmm3, %xmm4208; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4209; SSE41-NEXT:    pmaxud %xmm0, %xmm1210; SSE41-NEXT:    psubd %xmm2, %xmm1211; SSE41-NEXT:    psrld $1, %xmm1212; SSE41-NEXT:    pmulld %xmm1, %xmm4213; SSE41-NEXT:    paddd %xmm4, %xmm0214; SSE41-NEXT:    retq215;216; AVX1-LABEL: vec128_i32_unsigned_reg_reg:217; AVX1:       # %bb.0:218; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm2219; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm3220; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4221; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3222; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3223; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1224; AVX1-NEXT:    vpsubd %xmm2, %xmm1, %xmm1225; AVX1-NEXT:    vpsrld $1, %xmm1, %xmm1226; AVX1-NEXT:    vpmulld %xmm3, %xmm1, %xmm1227; AVX1-NEXT:    vpaddd %xmm0, %xmm1, %xmm0228; AVX1-NEXT:    retq229;230; AVX2-LABEL: vec128_i32_unsigned_reg_reg:231; AVX2:       # %bb.0:232; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm2233; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm3234; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4235; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm3236; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm4 = [1,1,1,1]237; AVX2-NEXT:    vpor %xmm4, %xmm3, %xmm3238; AVX2-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1239; AVX2-NEXT:    vpsubd %xmm2, %xmm1, %xmm1240; AVX2-NEXT:    vpsrld $1, %xmm1, %xmm1241; AVX2-NEXT:    vpmulld %xmm3, %xmm1, %xmm1242; AVX2-NEXT:    vpaddd %xmm0, %xmm1, %xmm0243; AVX2-NEXT:    retq244;245; XOP-FALLBACK-LABEL: vec128_i32_unsigned_reg_reg:246; XOP-FALLBACK:       # %bb.0:247; XOP-FALLBACK-NEXT:    vpcomgtud %xmm1, %xmm0, %xmm2248; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2249; XOP-FALLBACK-NEXT:    vpminud %xmm1, %xmm0, %xmm3250; XOP-FALLBACK-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1251; XOP-FALLBACK-NEXT:    vpsubd %xmm3, %xmm1, %xmm1252; XOP-FALLBACK-NEXT:    vpsrld $1, %xmm1, %xmm1253; XOP-FALLBACK-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0254; XOP-FALLBACK-NEXT:    retq255;256; XOPAVX1-LABEL: vec128_i32_unsigned_reg_reg:257; XOPAVX1:       # %bb.0:258; XOPAVX1-NEXT:    vpcomgtud %xmm1, %xmm0, %xmm2259; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2260; XOPAVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm3261; XOPAVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1262; XOPAVX1-NEXT:    vpsubd %xmm3, %xmm1, %xmm1263; XOPAVX1-NEXT:    vpsrld $1, %xmm1, %xmm1264; XOPAVX1-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0265; XOPAVX1-NEXT:    retq266;267; XOPAVX2-LABEL: vec128_i32_unsigned_reg_reg:268; XOPAVX2:       # %bb.0:269; XOPAVX2-NEXT:    vpcomgtud %xmm1, %xmm0, %xmm2270; XOPAVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]271; XOPAVX2-NEXT:    vpor %xmm3, %xmm2, %xmm2272; XOPAVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm3273; XOPAVX2-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1274; XOPAVX2-NEXT:    vpsubd %xmm3, %xmm1, %xmm1275; XOPAVX2-NEXT:    vpsrld $1, %xmm1, %xmm1276; XOPAVX2-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0277; XOPAVX2-NEXT:    retq278;279; AVX512F-LABEL: vec128_i32_unsigned_reg_reg:280; AVX512F:       # %bb.0:281; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1282; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0283; AVX512F-NEXT:    vpcmpnleud %zmm1, %zmm0, %k1284; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2285; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]286; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}287; AVX512F-NEXT:    vpminud %xmm1, %xmm0, %xmm2288; AVX512F-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1289; AVX512F-NEXT:    vpsubd %xmm2, %xmm1, %xmm1290; AVX512F-NEXT:    vpsrld $1, %xmm1, %xmm1291; AVX512F-NEXT:    vpmulld %xmm3, %xmm1, %xmm1292; AVX512F-NEXT:    vpaddd %xmm0, %xmm1, %xmm0293; AVX512F-NEXT:    vzeroupper294; AVX512F-NEXT:    retq295;296; AVX512VL-LABEL: vec128_i32_unsigned_reg_reg:297; AVX512VL:       # %bb.0:298; AVX512VL-NEXT:    vpcmpnleud %xmm1, %xmm0, %k1299; AVX512VL-NEXT:    vpminud %xmm1, %xmm0, %xmm2300; AVX512VL-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1301; AVX512VL-NEXT:    vpsubd %xmm2, %xmm1, %xmm1302; AVX512VL-NEXT:    vpsrld $1, %xmm1, %xmm1303; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2304; AVX512VL-NEXT:    vpsubd %xmm1, %xmm2, %xmm1 {%k1}305; AVX512VL-NEXT:    vpaddd %xmm0, %xmm1, %xmm0306; AVX512VL-NEXT:    retq307;308; AVX512BW-FALLBACK-LABEL: vec128_i32_unsigned_reg_reg:309; AVX512BW-FALLBACK:       # %bb.0:310; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1311; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0312; AVX512BW-FALLBACK-NEXT:    vpcmpnleud %zmm1, %zmm0, %k1313; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2314; AVX512BW-FALLBACK-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]315; AVX512BW-FALLBACK-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}316; AVX512BW-FALLBACK-NEXT:    vpminud %xmm1, %xmm0, %xmm2317; AVX512BW-FALLBACK-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1318; AVX512BW-FALLBACK-NEXT:    vpsubd %xmm2, %xmm1, %xmm1319; AVX512BW-FALLBACK-NEXT:    vpsrld $1, %xmm1, %xmm1320; AVX512BW-FALLBACK-NEXT:    vpmulld %xmm3, %xmm1, %xmm1321; AVX512BW-FALLBACK-NEXT:    vpaddd %xmm0, %xmm1, %xmm0322; AVX512BW-FALLBACK-NEXT:    vzeroupper323; AVX512BW-FALLBACK-NEXT:    retq324  %t3 = icmp ugt <4 x i32> %a1, %a2325  %t4 = select <4 x i1> %t3, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>326  %t5 = select <4 x i1> %t3, <4 x i32> %a2, <4 x i32> %a1327  %t6 = select <4 x i1> %t3, <4 x i32> %a1, <4 x i32> %a2328  %t7 = sub <4 x i32> %t6, %t5329  %t8 = lshr <4 x i32> %t7, <i32 1, i32 1, i32 1, i32 1>330  %t9 = mul <4 x i32> %t8, %t4331  %a10 = add <4 x i32> %t9, %a1332  ret <4 x i32> %a10333}334 335; Values are loaded. Only check signed case.336 337define <4 x i32> @vec128_i32_signed_mem_reg(ptr %a1_addr, <4 x i32> %a2) nounwind {338; SSE2-LABEL: vec128_i32_signed_mem_reg:339; SSE2:       # %bb.0:340; SSE2-NEXT:    movdqa (%rdi), %xmm1341; SSE2-NEXT:    movdqa %xmm1, %xmm2342; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2343; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,1,1,1]344; SSE2-NEXT:    por %xmm2, %xmm3345; SSE2-NEXT:    movdqa %xmm1, %xmm4346; SSE2-NEXT:    psubd %xmm0, %xmm4347; SSE2-NEXT:    pxor %xmm2, %xmm4348; SSE2-NEXT:    psubd %xmm4, %xmm2349; SSE2-NEXT:    psrld $1, %xmm2350; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]351; SSE2-NEXT:    pmuludq %xmm3, %xmm2352; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]353; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]354; SSE2-NEXT:    pmuludq %xmm4, %xmm2355; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]356; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]357; SSE2-NEXT:    paddd %xmm1, %xmm0358; SSE2-NEXT:    retq359;360; SSE41-LABEL: vec128_i32_signed_mem_reg:361; SSE41:       # %bb.0:362; SSE41-NEXT:    movdqa (%rdi), %xmm1363; SSE41-NEXT:    movdqa %xmm1, %xmm2364; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2365; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2366; SSE41-NEXT:    movdqa %xmm1, %xmm3367; SSE41-NEXT:    pminsd %xmm0, %xmm3368; SSE41-NEXT:    pmaxsd %xmm1, %xmm0369; SSE41-NEXT:    psubd %xmm3, %xmm0370; SSE41-NEXT:    psrld $1, %xmm0371; SSE41-NEXT:    pmulld %xmm2, %xmm0372; SSE41-NEXT:    paddd %xmm1, %xmm0373; SSE41-NEXT:    retq374;375; AVX1-LABEL: vec128_i32_signed_mem_reg:376; AVX1:       # %bb.0:377; AVX1-NEXT:    vmovdqa (%rdi), %xmm1378; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm2379; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2380; AVX1-NEXT:    vpminsd %xmm0, %xmm1, %xmm3381; AVX1-NEXT:    vpmaxsd %xmm0, %xmm1, %xmm0382; AVX1-NEXT:    vpsubd %xmm3, %xmm0, %xmm0383; AVX1-NEXT:    vpsrld $1, %xmm0, %xmm0384; AVX1-NEXT:    vpmulld %xmm2, %xmm0, %xmm0385; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0386; AVX1-NEXT:    retq387;388; AVX2-LABEL: vec128_i32_signed_mem_reg:389; AVX2:       # %bb.0:390; AVX2-NEXT:    vmovdqa (%rdi), %xmm1391; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm2392; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]393; AVX2-NEXT:    vpor %xmm3, %xmm2, %xmm2394; AVX2-NEXT:    vpminsd %xmm0, %xmm1, %xmm3395; AVX2-NEXT:    vpmaxsd %xmm0, %xmm1, %xmm0396; AVX2-NEXT:    vpsubd %xmm3, %xmm0, %xmm0397; AVX2-NEXT:    vpsrld $1, %xmm0, %xmm0398; AVX2-NEXT:    vpmulld %xmm2, %xmm0, %xmm0399; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0400; AVX2-NEXT:    retq401;402; XOP-FALLBACK-LABEL: vec128_i32_signed_mem_reg:403; XOP-FALLBACK:       # %bb.0:404; XOP-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm1405; XOP-FALLBACK-NEXT:    vpcomgtd %xmm0, %xmm1, %xmm2406; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2407; XOP-FALLBACK-NEXT:    vpminsd %xmm0, %xmm1, %xmm3408; XOP-FALLBACK-NEXT:    vpmaxsd %xmm0, %xmm1, %xmm0409; XOP-FALLBACK-NEXT:    vpsubd %xmm3, %xmm0, %xmm0410; XOP-FALLBACK-NEXT:    vpsrld $1, %xmm0, %xmm0411; XOP-FALLBACK-NEXT:    vpmacsdd %xmm1, %xmm2, %xmm0, %xmm0412; XOP-FALLBACK-NEXT:    retq413;414; XOPAVX1-LABEL: vec128_i32_signed_mem_reg:415; XOPAVX1:       # %bb.0:416; XOPAVX1-NEXT:    vmovdqa (%rdi), %xmm1417; XOPAVX1-NEXT:    vpcomgtd %xmm0, %xmm1, %xmm2418; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2419; XOPAVX1-NEXT:    vpminsd %xmm0, %xmm1, %xmm3420; XOPAVX1-NEXT:    vpmaxsd %xmm0, %xmm1, %xmm0421; XOPAVX1-NEXT:    vpsubd %xmm3, %xmm0, %xmm0422; XOPAVX1-NEXT:    vpsrld $1, %xmm0, %xmm0423; XOPAVX1-NEXT:    vpmacsdd %xmm1, %xmm2, %xmm0, %xmm0424; XOPAVX1-NEXT:    retq425;426; XOPAVX2-LABEL: vec128_i32_signed_mem_reg:427; XOPAVX2:       # %bb.0:428; XOPAVX2-NEXT:    vmovdqa (%rdi), %xmm1429; XOPAVX2-NEXT:    vpcomgtd %xmm0, %xmm1, %xmm2430; XOPAVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]431; XOPAVX2-NEXT:    vpor %xmm3, %xmm2, %xmm2432; XOPAVX2-NEXT:    vpminsd %xmm0, %xmm1, %xmm3433; XOPAVX2-NEXT:    vpmaxsd %xmm0, %xmm1, %xmm0434; XOPAVX2-NEXT:    vpsubd %xmm3, %xmm0, %xmm0435; XOPAVX2-NEXT:    vpsrld $1, %xmm0, %xmm0436; XOPAVX2-NEXT:    vpmacsdd %xmm1, %xmm2, %xmm0, %xmm0437; XOPAVX2-NEXT:    retq438;439; AVX512F-LABEL: vec128_i32_signed_mem_reg:440; AVX512F:       # %bb.0:441; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0442; AVX512F-NEXT:    vmovdqa (%rdi), %xmm1443; AVX512F-NEXT:    vpcmpgtd %zmm0, %zmm1, %k1444; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2445; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]446; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}447; AVX512F-NEXT:    vpminsd %xmm0, %xmm1, %xmm2448; AVX512F-NEXT:    vpmaxsd %xmm0, %xmm1, %xmm0449; AVX512F-NEXT:    vpsubd %xmm2, %xmm0, %xmm0450; AVX512F-NEXT:    vpsrld $1, %xmm0, %xmm0451; AVX512F-NEXT:    vpmulld %xmm3, %xmm0, %xmm0452; AVX512F-NEXT:    vpaddd %xmm1, %xmm0, %xmm0453; AVX512F-NEXT:    vzeroupper454; AVX512F-NEXT:    retq455;456; AVX512VL-LABEL: vec128_i32_signed_mem_reg:457; AVX512VL:       # %bb.0:458; AVX512VL-NEXT:    vmovdqa (%rdi), %xmm1459; AVX512VL-NEXT:    vpcmpgtd %xmm0, %xmm1, %k1460; AVX512VL-NEXT:    vpminsd %xmm0, %xmm1, %xmm2461; AVX512VL-NEXT:    vpmaxsd %xmm0, %xmm1, %xmm0462; AVX512VL-NEXT:    vpsubd %xmm2, %xmm0, %xmm0463; AVX512VL-NEXT:    vpsrld $1, %xmm0, %xmm0464; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2465; AVX512VL-NEXT:    vpsubd %xmm0, %xmm2, %xmm0 {%k1}466; AVX512VL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0467; AVX512VL-NEXT:    retq468;469; AVX512BW-FALLBACK-LABEL: vec128_i32_signed_mem_reg:470; AVX512BW-FALLBACK:       # %bb.0:471; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0472; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm1473; AVX512BW-FALLBACK-NEXT:    vpcmpgtd %zmm0, %zmm1, %k1474; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2475; AVX512BW-FALLBACK-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]476; AVX512BW-FALLBACK-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}477; AVX512BW-FALLBACK-NEXT:    vpminsd %xmm0, %xmm1, %xmm2478; AVX512BW-FALLBACK-NEXT:    vpmaxsd %xmm0, %xmm1, %xmm0479; AVX512BW-FALLBACK-NEXT:    vpsubd %xmm2, %xmm0, %xmm0480; AVX512BW-FALLBACK-NEXT:    vpsrld $1, %xmm0, %xmm0481; AVX512BW-FALLBACK-NEXT:    vpmulld %xmm3, %xmm0, %xmm0482; AVX512BW-FALLBACK-NEXT:    vpaddd %xmm1, %xmm0, %xmm0483; AVX512BW-FALLBACK-NEXT:    vzeroupper484; AVX512BW-FALLBACK-NEXT:    retq485  %a1 = load <4 x i32>, ptr %a1_addr486  %t3 = icmp sgt <4 x i32> %a1, %a2 ; signed487  %t4 = select <4 x i1> %t3, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>488  %t5 = select <4 x i1> %t3, <4 x i32> %a2, <4 x i32> %a1489  %t6 = select <4 x i1> %t3, <4 x i32> %a1, <4 x i32> %a2490  %t7 = sub <4 x i32> %t6, %t5491  %t8 = lshr <4 x i32> %t7, <i32 1, i32 1, i32 1, i32 1>492  %t9 = mul nsw <4 x i32> %t8, %t4 ; signed493  %a10 = add nsw <4 x i32> %t9, %a1 ; signed494  ret <4 x i32> %a10495}496 497define <4 x i32> @vec128_i32_signed_reg_mem(<4 x i32> %a1, ptr %a2_addr) nounwind {498; SSE2-LABEL: vec128_i32_signed_reg_mem:499; SSE2:       # %bb.0:500; SSE2-NEXT:    movdqa (%rdi), %xmm1501; SSE2-NEXT:    movdqa %xmm0, %xmm2502; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2503; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,1,1,1]504; SSE2-NEXT:    por %xmm2, %xmm3505; SSE2-NEXT:    movdqa %xmm0, %xmm4506; SSE2-NEXT:    psubd %xmm1, %xmm4507; SSE2-NEXT:    pxor %xmm2, %xmm4508; SSE2-NEXT:    psubd %xmm4, %xmm2509; SSE2-NEXT:    psrld $1, %xmm2510; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]511; SSE2-NEXT:    pmuludq %xmm3, %xmm2512; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]513; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]514; SSE2-NEXT:    pmuludq %xmm1, %xmm3515; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]516; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]517; SSE2-NEXT:    paddd %xmm2, %xmm0518; SSE2-NEXT:    retq519;520; SSE41-LABEL: vec128_i32_signed_reg_mem:521; SSE41:       # %bb.0:522; SSE41-NEXT:    movdqa (%rdi), %xmm1523; SSE41-NEXT:    movdqa %xmm0, %xmm2524; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2525; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2526; SSE41-NEXT:    movdqa %xmm0, %xmm3527; SSE41-NEXT:    pminsd %xmm1, %xmm3528; SSE41-NEXT:    pmaxsd %xmm0, %xmm1529; SSE41-NEXT:    psubd %xmm3, %xmm1530; SSE41-NEXT:    psrld $1, %xmm1531; SSE41-NEXT:    pmulld %xmm2, %xmm1532; SSE41-NEXT:    paddd %xmm1, %xmm0533; SSE41-NEXT:    retq534;535; AVX1-LABEL: vec128_i32_signed_reg_mem:536; AVX1:       # %bb.0:537; AVX1-NEXT:    vmovdqa (%rdi), %xmm1538; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm2539; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2540; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm3541; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1542; AVX1-NEXT:    vpsubd %xmm3, %xmm1, %xmm1543; AVX1-NEXT:    vpsrld $1, %xmm1, %xmm1544; AVX1-NEXT:    vpmulld %xmm2, %xmm1, %xmm1545; AVX1-NEXT:    vpaddd %xmm0, %xmm1, %xmm0546; AVX1-NEXT:    retq547;548; AVX2-LABEL: vec128_i32_signed_reg_mem:549; AVX2:       # %bb.0:550; AVX2-NEXT:    vmovdqa (%rdi), %xmm1551; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm2552; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]553; AVX2-NEXT:    vpor %xmm3, %xmm2, %xmm2554; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm3555; AVX2-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1556; AVX2-NEXT:    vpsubd %xmm3, %xmm1, %xmm1557; AVX2-NEXT:    vpsrld $1, %xmm1, %xmm1558; AVX2-NEXT:    vpmulld %xmm2, %xmm1, %xmm1559; AVX2-NEXT:    vpaddd %xmm0, %xmm1, %xmm0560; AVX2-NEXT:    retq561;562; XOP-FALLBACK-LABEL: vec128_i32_signed_reg_mem:563; XOP-FALLBACK:       # %bb.0:564; XOP-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm1565; XOP-FALLBACK-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm2566; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2567; XOP-FALLBACK-NEXT:    vpminsd %xmm1, %xmm0, %xmm3568; XOP-FALLBACK-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1569; XOP-FALLBACK-NEXT:    vpsubd %xmm3, %xmm1, %xmm1570; XOP-FALLBACK-NEXT:    vpsrld $1, %xmm1, %xmm1571; XOP-FALLBACK-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0572; XOP-FALLBACK-NEXT:    retq573;574; XOPAVX1-LABEL: vec128_i32_signed_reg_mem:575; XOPAVX1:       # %bb.0:576; XOPAVX1-NEXT:    vmovdqa (%rdi), %xmm1577; XOPAVX1-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm2578; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2579; XOPAVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm3580; XOPAVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1581; XOPAVX1-NEXT:    vpsubd %xmm3, %xmm1, %xmm1582; XOPAVX1-NEXT:    vpsrld $1, %xmm1, %xmm1583; XOPAVX1-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0584; XOPAVX1-NEXT:    retq585;586; XOPAVX2-LABEL: vec128_i32_signed_reg_mem:587; XOPAVX2:       # %bb.0:588; XOPAVX2-NEXT:    vmovdqa (%rdi), %xmm1589; XOPAVX2-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm2590; XOPAVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]591; XOPAVX2-NEXT:    vpor %xmm3, %xmm2, %xmm2592; XOPAVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm3593; XOPAVX2-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1594; XOPAVX2-NEXT:    vpsubd %xmm3, %xmm1, %xmm1595; XOPAVX2-NEXT:    vpsrld $1, %xmm1, %xmm1596; XOPAVX2-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0597; XOPAVX2-NEXT:    retq598;599; AVX512F-LABEL: vec128_i32_signed_reg_mem:600; AVX512F:       # %bb.0:601; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0602; AVX512F-NEXT:    vmovdqa (%rdi), %xmm1603; AVX512F-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1604; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2605; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]606; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}607; AVX512F-NEXT:    vpminsd %xmm1, %xmm0, %xmm2608; AVX512F-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1609; AVX512F-NEXT:    vpsubd %xmm2, %xmm1, %xmm1610; AVX512F-NEXT:    vpsrld $1, %xmm1, %xmm1611; AVX512F-NEXT:    vpmulld %xmm3, %xmm1, %xmm1612; AVX512F-NEXT:    vpaddd %xmm0, %xmm1, %xmm0613; AVX512F-NEXT:    vzeroupper614; AVX512F-NEXT:    retq615;616; AVX512VL-LABEL: vec128_i32_signed_reg_mem:617; AVX512VL:       # %bb.0:618; AVX512VL-NEXT:    vmovdqa (%rdi), %xmm1619; AVX512VL-NEXT:    vpcmpgtd %xmm1, %xmm0, %k1620; AVX512VL-NEXT:    vpminsd %xmm1, %xmm0, %xmm2621; AVX512VL-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1622; AVX512VL-NEXT:    vpsubd %xmm2, %xmm1, %xmm1623; AVX512VL-NEXT:    vpsrld $1, %xmm1, %xmm1624; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2625; AVX512VL-NEXT:    vpsubd %xmm1, %xmm2, %xmm1 {%k1}626; AVX512VL-NEXT:    vpaddd %xmm0, %xmm1, %xmm0627; AVX512VL-NEXT:    retq628;629; AVX512BW-FALLBACK-LABEL: vec128_i32_signed_reg_mem:630; AVX512BW-FALLBACK:       # %bb.0:631; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0632; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm1633; AVX512BW-FALLBACK-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1634; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2635; AVX512BW-FALLBACK-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]636; AVX512BW-FALLBACK-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}637; AVX512BW-FALLBACK-NEXT:    vpminsd %xmm1, %xmm0, %xmm2638; AVX512BW-FALLBACK-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1639; AVX512BW-FALLBACK-NEXT:    vpsubd %xmm2, %xmm1, %xmm1640; AVX512BW-FALLBACK-NEXT:    vpsrld $1, %xmm1, %xmm1641; AVX512BW-FALLBACK-NEXT:    vpmulld %xmm3, %xmm1, %xmm1642; AVX512BW-FALLBACK-NEXT:    vpaddd %xmm0, %xmm1, %xmm0643; AVX512BW-FALLBACK-NEXT:    vzeroupper644; AVX512BW-FALLBACK-NEXT:    retq645  %a2 = load <4 x i32>, ptr %a2_addr646  %t3 = icmp sgt <4 x i32> %a1, %a2 ; signed647  %t4 = select <4 x i1> %t3, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>648  %t5 = select <4 x i1> %t3, <4 x i32> %a2, <4 x i32> %a1649  %t6 = select <4 x i1> %t3, <4 x i32> %a1, <4 x i32> %a2650  %t7 = sub <4 x i32> %t6, %t5651  %t8 = lshr <4 x i32> %t7, <i32 1, i32 1, i32 1, i32 1>652  %t9 = mul nsw <4 x i32> %t8, %t4 ; signed653  %a10 = add nsw <4 x i32> %t9, %a1 ; signed654  ret <4 x i32> %a10655}656 657define <4 x i32> @vec128_i32_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind {658; SSE2-LABEL: vec128_i32_signed_mem_mem:659; SSE2:       # %bb.0:660; SSE2-NEXT:    movdqa (%rdi), %xmm1661; SSE2-NEXT:    movdqa (%rsi), %xmm0662; SSE2-NEXT:    movdqa %xmm1, %xmm2663; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2664; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [1,1,1,1]665; SSE2-NEXT:    por %xmm2, %xmm3666; SSE2-NEXT:    movdqa %xmm1, %xmm4667; SSE2-NEXT:    psubd %xmm0, %xmm4668; SSE2-NEXT:    pxor %xmm2, %xmm4669; SSE2-NEXT:    psubd %xmm4, %xmm2670; SSE2-NEXT:    psrld $1, %xmm2671; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]672; SSE2-NEXT:    pmuludq %xmm3, %xmm2673; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]674; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]675; SSE2-NEXT:    pmuludq %xmm4, %xmm2676; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]677; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]678; SSE2-NEXT:    paddd %xmm1, %xmm0679; SSE2-NEXT:    retq680;681; SSE41-LABEL: vec128_i32_signed_mem_mem:682; SSE41:       # %bb.0:683; SSE41-NEXT:    movdqa (%rdi), %xmm1684; SSE41-NEXT:    movdqa (%rsi), %xmm0685; SSE41-NEXT:    movdqa %xmm1, %xmm2686; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2687; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2688; SSE41-NEXT:    movdqa %xmm1, %xmm3689; SSE41-NEXT:    pminsd %xmm0, %xmm3690; SSE41-NEXT:    pmaxsd %xmm1, %xmm0691; SSE41-NEXT:    psubd %xmm3, %xmm0692; SSE41-NEXT:    psrld $1, %xmm0693; SSE41-NEXT:    pmulld %xmm2, %xmm0694; SSE41-NEXT:    paddd %xmm1, %xmm0695; SSE41-NEXT:    retq696;697; AVX1-LABEL: vec128_i32_signed_mem_mem:698; AVX1:       # %bb.0:699; AVX1-NEXT:    vmovdqa (%rdi), %xmm0700; AVX1-NEXT:    vmovdqa (%rsi), %xmm1701; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm2702; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2703; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm3704; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1705; AVX1-NEXT:    vpsubd %xmm3, %xmm1, %xmm1706; AVX1-NEXT:    vpsrld $1, %xmm1, %xmm1707; AVX1-NEXT:    vpmulld %xmm2, %xmm1, %xmm1708; AVX1-NEXT:    vpaddd %xmm0, %xmm1, %xmm0709; AVX1-NEXT:    retq710;711; AVX2-LABEL: vec128_i32_signed_mem_mem:712; AVX2:       # %bb.0:713; AVX2-NEXT:    vmovdqa (%rdi), %xmm0714; AVX2-NEXT:    vmovdqa (%rsi), %xmm1715; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm2716; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]717; AVX2-NEXT:    vpor %xmm3, %xmm2, %xmm2718; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm3719; AVX2-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1720; AVX2-NEXT:    vpsubd %xmm3, %xmm1, %xmm1721; AVX2-NEXT:    vpsrld $1, %xmm1, %xmm1722; AVX2-NEXT:    vpmulld %xmm2, %xmm1, %xmm1723; AVX2-NEXT:    vpaddd %xmm0, %xmm1, %xmm0724; AVX2-NEXT:    retq725;726; XOP-FALLBACK-LABEL: vec128_i32_signed_mem_mem:727; XOP-FALLBACK:       # %bb.0:728; XOP-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm0729; XOP-FALLBACK-NEXT:    vmovdqa (%rsi), %xmm1730; XOP-FALLBACK-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm2731; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2732; XOP-FALLBACK-NEXT:    vpminsd %xmm1, %xmm0, %xmm3733; XOP-FALLBACK-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1734; XOP-FALLBACK-NEXT:    vpsubd %xmm3, %xmm1, %xmm1735; XOP-FALLBACK-NEXT:    vpsrld $1, %xmm1, %xmm1736; XOP-FALLBACK-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0737; XOP-FALLBACK-NEXT:    retq738;739; XOPAVX1-LABEL: vec128_i32_signed_mem_mem:740; XOPAVX1:       # %bb.0:741; XOPAVX1-NEXT:    vmovdqa (%rdi), %xmm0742; XOPAVX1-NEXT:    vmovdqa (%rsi), %xmm1743; XOPAVX1-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm2744; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2745; XOPAVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm3746; XOPAVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1747; XOPAVX1-NEXT:    vpsubd %xmm3, %xmm1, %xmm1748; XOPAVX1-NEXT:    vpsrld $1, %xmm1, %xmm1749; XOPAVX1-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0750; XOPAVX1-NEXT:    retq751;752; XOPAVX2-LABEL: vec128_i32_signed_mem_mem:753; XOPAVX2:       # %bb.0:754; XOPAVX2-NEXT:    vmovdqa (%rdi), %xmm0755; XOPAVX2-NEXT:    vmovdqa (%rsi), %xmm1756; XOPAVX2-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm2757; XOPAVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]758; XOPAVX2-NEXT:    vpor %xmm3, %xmm2, %xmm2759; XOPAVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm3760; XOPAVX2-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1761; XOPAVX2-NEXT:    vpsubd %xmm3, %xmm1, %xmm1762; XOPAVX2-NEXT:    vpsrld $1, %xmm1, %xmm1763; XOPAVX2-NEXT:    vpmacsdd %xmm0, %xmm2, %xmm1, %xmm0764; XOPAVX2-NEXT:    retq765;766; AVX512F-LABEL: vec128_i32_signed_mem_mem:767; AVX512F:       # %bb.0:768; AVX512F-NEXT:    vmovdqa (%rdi), %xmm0769; AVX512F-NEXT:    vmovdqa (%rsi), %xmm1770; AVX512F-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1771; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2772; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]773; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}774; AVX512F-NEXT:    vpminsd %xmm1, %xmm0, %xmm2775; AVX512F-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1776; AVX512F-NEXT:    vpsubd %xmm2, %xmm1, %xmm1777; AVX512F-NEXT:    vpsrld $1, %xmm1, %xmm1778; AVX512F-NEXT:    vpmulld %xmm3, %xmm1, %xmm1779; AVX512F-NEXT:    vpaddd %xmm0, %xmm1, %xmm0780; AVX512F-NEXT:    vzeroupper781; AVX512F-NEXT:    retq782;783; AVX512VL-LABEL: vec128_i32_signed_mem_mem:784; AVX512VL:       # %bb.0:785; AVX512VL-NEXT:    vmovdqa (%rdi), %xmm0786; AVX512VL-NEXT:    vmovdqa (%rsi), %xmm1787; AVX512VL-NEXT:    vpcmpgtd %xmm1, %xmm0, %k1788; AVX512VL-NEXT:    vpminsd %xmm1, %xmm0, %xmm2789; AVX512VL-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1790; AVX512VL-NEXT:    vpsubd %xmm2, %xmm1, %xmm1791; AVX512VL-NEXT:    vpsrld $1, %xmm1, %xmm1792; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2793; AVX512VL-NEXT:    vpsubd %xmm1, %xmm2, %xmm1 {%k1}794; AVX512VL-NEXT:    vpaddd %xmm0, %xmm1, %xmm0795; AVX512VL-NEXT:    retq796;797; AVX512BW-FALLBACK-LABEL: vec128_i32_signed_mem_mem:798; AVX512BW-FALLBACK:       # %bb.0:799; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm0800; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rsi), %xmm1801; AVX512BW-FALLBACK-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1802; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2803; AVX512BW-FALLBACK-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]804; AVX512BW-FALLBACK-NEXT:    vmovdqa32 %zmm2, %zmm3 {%k1}805; AVX512BW-FALLBACK-NEXT:    vpminsd %xmm1, %xmm0, %xmm2806; AVX512BW-FALLBACK-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm1807; AVX512BW-FALLBACK-NEXT:    vpsubd %xmm2, %xmm1, %xmm1808; AVX512BW-FALLBACK-NEXT:    vpsrld $1, %xmm1, %xmm1809; AVX512BW-FALLBACK-NEXT:    vpmulld %xmm3, %xmm1, %xmm1810; AVX512BW-FALLBACK-NEXT:    vpaddd %xmm0, %xmm1, %xmm0811; AVX512BW-FALLBACK-NEXT:    vzeroupper812; AVX512BW-FALLBACK-NEXT:    retq813  %a1 = load <4 x i32>, ptr %a1_addr814  %a2 = load <4 x i32>, ptr %a2_addr815  %t3 = icmp sgt <4 x i32> %a1, %a2 ; signed816  %t4 = select <4 x i1> %t3, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>817  %t5 = select <4 x i1> %t3, <4 x i32> %a2, <4 x i32> %a1818  %t6 = select <4 x i1> %t3, <4 x i32> %a1, <4 x i32> %a2819  %t7 = sub <4 x i32> %t6, %t5820  %t8 = lshr <4 x i32> %t7, <i32 1, i32 1, i32 1, i32 1>821  %t9 = mul nsw <4 x i32> %t8, %t4 ; signed822  %a10 = add nsw <4 x i32> %t9, %a1 ; signed823  ret <4 x i32> %a10824}825 826; ---------------------------------------------------------------------------- ;827; 64-bit width. 128 / 64 = 2 elts.828; ---------------------------------------------------------------------------- ;829 830; Values come from regs831 832define <2 x i64> @vec128_i64_signed_reg_reg(<2 x i64> %a1, <2 x i64> %a2) nounwind {833; SSE2-LABEL: vec128_i64_signed_reg_reg:834; SSE2:       # %bb.0:835; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]836; SSE2-NEXT:    movdqa %xmm0, %xmm3837; SSE2-NEXT:    psubq %xmm1, %xmm3838; SSE2-NEXT:    pxor %xmm2, %xmm1839; SSE2-NEXT:    pxor %xmm0, %xmm2840; SSE2-NEXT:    movdqa %xmm2, %xmm4841; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4842; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]843; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2844; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]845; SSE2-NEXT:    pand %xmm5, %xmm1846; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]847; SSE2-NEXT:    por %xmm1, %xmm2848; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [1,1]849; SSE2-NEXT:    por %xmm2, %xmm1850; SSE2-NEXT:    pxor %xmm2, %xmm3851; SSE2-NEXT:    movdqa %xmm2, %xmm4852; SSE2-NEXT:    psubq %xmm3, %xmm4853; SSE2-NEXT:    movdqa %xmm4, %xmm3854; SSE2-NEXT:    psrlq $1, %xmm3855; SSE2-NEXT:    psrlq $33, %xmm4856; SSE2-NEXT:    pmuludq %xmm1, %xmm4857; SSE2-NEXT:    psrlq $32, %xmm2858; SSE2-NEXT:    pmuludq %xmm3, %xmm2859; SSE2-NEXT:    paddq %xmm4, %xmm2860; SSE2-NEXT:    psllq $32, %xmm2861; SSE2-NEXT:    pmuludq %xmm1, %xmm3862; SSE2-NEXT:    paddq %xmm3, %xmm0863; SSE2-NEXT:    paddq %xmm2, %xmm0864; SSE2-NEXT:    retq865;866; SSE41-LABEL: vec128_i64_signed_reg_reg:867; SSE41:       # %bb.0:868; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm2 = [2147483648,2147483648]869; SSE41-NEXT:    movdqa %xmm0, %xmm3870; SSE41-NEXT:    psubq %xmm1, %xmm3871; SSE41-NEXT:    pxor %xmm2, %xmm1872; SSE41-NEXT:    pxor %xmm0, %xmm2873; SSE41-NEXT:    movdqa %xmm2, %xmm4874; SSE41-NEXT:    pcmpgtd %xmm1, %xmm4875; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]876; SSE41-NEXT:    pcmpeqd %xmm1, %xmm2877; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]878; SSE41-NEXT:    pand %xmm5, %xmm1879; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]880; SSE41-NEXT:    por %xmm1, %xmm2881; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm1 = [1,1]882; SSE41-NEXT:    por %xmm2, %xmm1883; SSE41-NEXT:    pxor %xmm2, %xmm3884; SSE41-NEXT:    movdqa %xmm2, %xmm4885; SSE41-NEXT:    psubq %xmm3, %xmm4886; SSE41-NEXT:    movdqa %xmm4, %xmm3887; SSE41-NEXT:    psrlq $1, %xmm3888; SSE41-NEXT:    psrlq $33, %xmm4889; SSE41-NEXT:    pmuludq %xmm1, %xmm4890; SSE41-NEXT:    psrlq $32, %xmm2891; SSE41-NEXT:    pmuludq %xmm3, %xmm2892; SSE41-NEXT:    paddq %xmm4, %xmm2893; SSE41-NEXT:    psllq $32, %xmm2894; SSE41-NEXT:    pmuludq %xmm1, %xmm3895; SSE41-NEXT:    paddq %xmm3, %xmm0896; SSE41-NEXT:    paddq %xmm2, %xmm0897; SSE41-NEXT:    retq898;899; AVX-LABEL: vec128_i64_signed_reg_reg:900; AVX:       # %bb.0:901; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2902; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm3903; AVX-NEXT:    vpsubq %xmm1, %xmm0, %xmm1904; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1905; AVX-NEXT:    vpsubq %xmm1, %xmm2, %xmm1906; AVX-NEXT:    vpsrlq $1, %xmm1, %xmm4907; AVX-NEXT:    vpsrlq $33, %xmm1, %xmm1908; AVX-NEXT:    vpmuludq %xmm3, %xmm1, %xmm1909; AVX-NEXT:    vpsrlq $32, %xmm2, %xmm2910; AVX-NEXT:    vpmuludq %xmm2, %xmm4, %xmm2911; AVX-NEXT:    vpaddq %xmm1, %xmm2, %xmm1912; AVX-NEXT:    vpsllq $32, %xmm1, %xmm1913; AVX-NEXT:    vpmuludq %xmm3, %xmm4, %xmm2914; AVX-NEXT:    vpaddq %xmm0, %xmm2, %xmm0915; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0916; AVX-NEXT:    retq917;918; XOP-LABEL: vec128_i64_signed_reg_reg:919; XOP:       # %bb.0:920; XOP-NEXT:    vpcomgtq %xmm1, %xmm0, %xmm2921; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm3922; XOP-NEXT:    vpsubq %xmm1, %xmm0, %xmm1923; XOP-NEXT:    vpxor %xmm2, %xmm1, %xmm1924; XOP-NEXT:    vpsubq %xmm1, %xmm2, %xmm1925; XOP-NEXT:    vpsrlq $1, %xmm1, %xmm4926; XOP-NEXT:    vpsrlq $33, %xmm1, %xmm1927; XOP-NEXT:    vpmuludq %xmm3, %xmm1, %xmm1928; XOP-NEXT:    vpsrlq $32, %xmm2, %xmm2929; XOP-NEXT:    vpmuludq %xmm2, %xmm4, %xmm2930; XOP-NEXT:    vpaddq %xmm1, %xmm2, %xmm1931; XOP-NEXT:    vpsllq $32, %xmm1, %xmm1932; XOP-NEXT:    vpmuludq %xmm3, %xmm4, %xmm2933; XOP-NEXT:    vpaddq %xmm0, %xmm2, %xmm0934; XOP-NEXT:    vpaddq %xmm1, %xmm0, %xmm0935; XOP-NEXT:    retq936;937; AVX512F-LABEL: vec128_i64_signed_reg_reg:938; AVX512F:       # %bb.0:939; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1940; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0941; AVX512F-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1942; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2943; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]944; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}945; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm2946; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm1947; AVX512F-NEXT:    vpsubq %xmm2, %xmm1, %xmm1948; AVX512F-NEXT:    vpsrlq $1, %xmm1, %xmm2949; AVX512F-NEXT:    vpsrlq $33, %xmm1, %xmm1950; AVX512F-NEXT:    vpmuludq %xmm3, %xmm1, %xmm1951; AVX512F-NEXT:    vpsrlq $32, %xmm3, %xmm4952; AVX512F-NEXT:    vpmuludq %xmm4, %xmm2, %xmm4953; AVX512F-NEXT:    vpaddq %xmm1, %xmm4, %xmm1954; AVX512F-NEXT:    vpsllq $32, %xmm1, %xmm1955; AVX512F-NEXT:    vpmuludq %xmm3, %xmm2, %xmm2956; AVX512F-NEXT:    vpaddq %xmm0, %xmm2, %xmm0957; AVX512F-NEXT:    vpaddq %xmm1, %xmm0, %xmm0958; AVX512F-NEXT:    vzeroupper959; AVX512F-NEXT:    retq960;961; AVX512VL-LABEL: vec128_i64_signed_reg_reg:962; AVX512VL:       # %bb.0:963; AVX512VL-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1964; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm2965; AVX512VL-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm1966; AVX512VL-NEXT:    vpsubq %xmm2, %xmm1, %xmm1967; AVX512VL-NEXT:    vpsrlq $1, %xmm1, %xmm1968; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2969; AVX512VL-NEXT:    vpsubq %xmm1, %xmm2, %xmm1 {%k1}970; AVX512VL-NEXT:    vpaddq %xmm0, %xmm1, %xmm0971; AVX512VL-NEXT:    retq972;973; AVX512BW-FALLBACK-LABEL: vec128_i64_signed_reg_reg:974; AVX512BW-FALLBACK:       # %bb.0:975; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1976; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0977; AVX512BW-FALLBACK-NEXT:    vpcmpgtq %zmm1, %zmm0, %k1978; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2979; AVX512BW-FALLBACK-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]980; AVX512BW-FALLBACK-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}981; AVX512BW-FALLBACK-NEXT:    vpminsq %zmm1, %zmm0, %zmm2982; AVX512BW-FALLBACK-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm1983; AVX512BW-FALLBACK-NEXT:    vpsubq %xmm2, %xmm1, %xmm1984; AVX512BW-FALLBACK-NEXT:    vpsrlq $1, %xmm1, %xmm2985; AVX512BW-FALLBACK-NEXT:    vpsrlq $33, %xmm1, %xmm1986; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm1, %xmm1987; AVX512BW-FALLBACK-NEXT:    vpsrlq $32, %xmm3, %xmm4988; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm4, %xmm2, %xmm4989; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm1, %xmm4, %xmm1990; AVX512BW-FALLBACK-NEXT:    vpsllq $32, %xmm1, %xmm1991; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm2, %xmm2992; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm0, %xmm2, %xmm0993; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm1, %xmm0, %xmm0994; AVX512BW-FALLBACK-NEXT:    vzeroupper995; AVX512BW-FALLBACK-NEXT:    retq996  %t3 = icmp sgt <2 x i64> %a1, %a2 ; signed997  %t4 = select <2 x i1> %t3, <2 x i64> <i64 -1, i64 -1>, <2 x i64> <i64 1, i64 1>998  %t5 = select <2 x i1> %t3, <2 x i64> %a2, <2 x i64> %a1999  %t6 = select <2 x i1> %t3, <2 x i64> %a1, <2 x i64> %a21000  %t7 = sub <2 x i64> %t6, %t51001  %t8 = lshr <2 x i64> %t7, <i64 1, i64 1>1002  %t9 = mul nsw <2 x i64> %t8, %t4 ; signed1003  %a10 = add nsw <2 x i64> %t9, %a1 ; signed1004  ret <2 x i64> %a101005}1006 1007define <2 x i64> @vec128_i64_unsigned_reg_reg(<2 x i64> %a1, <2 x i64> %a2) nounwind {1008; SSE2-LABEL: vec128_i64_unsigned_reg_reg:1009; SSE2:       # %bb.0:1010; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]1011; SSE2-NEXT:    movdqa %xmm0, %xmm31012; SSE2-NEXT:    psubq %xmm1, %xmm31013; SSE2-NEXT:    pxor %xmm2, %xmm11014; SSE2-NEXT:    pxor %xmm0, %xmm21015; SSE2-NEXT:    movdqa %xmm2, %xmm41016; SSE2-NEXT:    pcmpgtd %xmm1, %xmm41017; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1018; SSE2-NEXT:    pcmpeqd %xmm1, %xmm21019; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]1020; SSE2-NEXT:    pand %xmm5, %xmm11021; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]1022; SSE2-NEXT:    por %xmm1, %xmm21023; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [1,1]1024; SSE2-NEXT:    por %xmm2, %xmm11025; SSE2-NEXT:    pxor %xmm2, %xmm31026; SSE2-NEXT:    movdqa %xmm2, %xmm41027; SSE2-NEXT:    psubq %xmm3, %xmm41028; SSE2-NEXT:    movdqa %xmm4, %xmm31029; SSE2-NEXT:    psrlq $1, %xmm31030; SSE2-NEXT:    psrlq $33, %xmm41031; SSE2-NEXT:    pmuludq %xmm1, %xmm41032; SSE2-NEXT:    psrlq $32, %xmm21033; SSE2-NEXT:    pmuludq %xmm3, %xmm21034; SSE2-NEXT:    paddq %xmm4, %xmm21035; SSE2-NEXT:    psllq $32, %xmm21036; SSE2-NEXT:    pmuludq %xmm1, %xmm31037; SSE2-NEXT:    paddq %xmm3, %xmm01038; SSE2-NEXT:    paddq %xmm2, %xmm01039; SSE2-NEXT:    retq1040;1041; SSE41-LABEL: vec128_i64_unsigned_reg_reg:1042; SSE41:       # %bb.0:1043; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]1044; SSE41-NEXT:    movdqa %xmm0, %xmm31045; SSE41-NEXT:    psubq %xmm1, %xmm31046; SSE41-NEXT:    pxor %xmm2, %xmm11047; SSE41-NEXT:    pxor %xmm0, %xmm21048; SSE41-NEXT:    movdqa %xmm2, %xmm41049; SSE41-NEXT:    pcmpgtd %xmm1, %xmm41050; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1051; SSE41-NEXT:    pcmpeqd %xmm1, %xmm21052; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]1053; SSE41-NEXT:    pand %xmm5, %xmm11054; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]1055; SSE41-NEXT:    por %xmm1, %xmm21056; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm1 = [1,1]1057; SSE41-NEXT:    por %xmm2, %xmm11058; SSE41-NEXT:    pxor %xmm2, %xmm31059; SSE41-NEXT:    movdqa %xmm2, %xmm41060; SSE41-NEXT:    psubq %xmm3, %xmm41061; SSE41-NEXT:    movdqa %xmm4, %xmm31062; SSE41-NEXT:    psrlq $1, %xmm31063; SSE41-NEXT:    psrlq $33, %xmm41064; SSE41-NEXT:    pmuludq %xmm1, %xmm41065; SSE41-NEXT:    psrlq $32, %xmm21066; SSE41-NEXT:    pmuludq %xmm3, %xmm21067; SSE41-NEXT:    paddq %xmm4, %xmm21068; SSE41-NEXT:    psllq $32, %xmm21069; SSE41-NEXT:    pmuludq %xmm1, %xmm31070; SSE41-NEXT:    paddq %xmm3, %xmm01071; SSE41-NEXT:    paddq %xmm2, %xmm01072; SSE41-NEXT:    retq1073;1074; AVX1-LABEL: vec128_i64_unsigned_reg_reg:1075; AVX1:       # %bb.0:1076; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]1077; AVX1-NEXT:    # xmm2 = mem[0,0]1078; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm31079; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm21080; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm21081; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31082; AVX1-NEXT:    vpsubq %xmm1, %xmm0, %xmm11083; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm11084; AVX1-NEXT:    vpsubq %xmm1, %xmm2, %xmm11085; AVX1-NEXT:    vpsrlq $1, %xmm1, %xmm41086; AVX1-NEXT:    vpsrlq $33, %xmm1, %xmm11087; AVX1-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11088; AVX1-NEXT:    vpsrlq $32, %xmm2, %xmm21089; AVX1-NEXT:    vpmuludq %xmm2, %xmm4, %xmm21090; AVX1-NEXT:    vpaddq %xmm1, %xmm2, %xmm11091; AVX1-NEXT:    vpsllq $32, %xmm1, %xmm11092; AVX1-NEXT:    vpmuludq %xmm3, %xmm4, %xmm21093; AVX1-NEXT:    vpaddq %xmm0, %xmm2, %xmm01094; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm01095; AVX1-NEXT:    retq1096;1097; AVX2-LABEL: vec128_i64_unsigned_reg_reg:1098; AVX2:       # %bb.0:1099; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]1100; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm31101; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm21102; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm21103; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31104; AVX2-NEXT:    vpsubq %xmm1, %xmm0, %xmm11105; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm11106; AVX2-NEXT:    vpsubq %xmm1, %xmm2, %xmm11107; AVX2-NEXT:    vpsrlq $1, %xmm1, %xmm41108; AVX2-NEXT:    vpsrlq $33, %xmm1, %xmm11109; AVX2-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11110; AVX2-NEXT:    vpsrlq $32, %xmm2, %xmm21111; AVX2-NEXT:    vpmuludq %xmm2, %xmm4, %xmm21112; AVX2-NEXT:    vpaddq %xmm1, %xmm2, %xmm11113; AVX2-NEXT:    vpsllq $32, %xmm1, %xmm11114; AVX2-NEXT:    vpmuludq %xmm3, %xmm4, %xmm21115; AVX2-NEXT:    vpaddq %xmm0, %xmm2, %xmm01116; AVX2-NEXT:    vpaddq %xmm1, %xmm0, %xmm01117; AVX2-NEXT:    retq1118;1119; XOP-LABEL: vec128_i64_unsigned_reg_reg:1120; XOP:       # %bb.0:1121; XOP-NEXT:    vpcomgtuq %xmm1, %xmm0, %xmm21122; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31123; XOP-NEXT:    vpsubq %xmm1, %xmm0, %xmm11124; XOP-NEXT:    vpxor %xmm2, %xmm1, %xmm11125; XOP-NEXT:    vpsubq %xmm1, %xmm2, %xmm11126; XOP-NEXT:    vpsrlq $1, %xmm1, %xmm41127; XOP-NEXT:    vpsrlq $33, %xmm1, %xmm11128; XOP-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11129; XOP-NEXT:    vpsrlq $32, %xmm2, %xmm21130; XOP-NEXT:    vpmuludq %xmm2, %xmm4, %xmm21131; XOP-NEXT:    vpaddq %xmm1, %xmm2, %xmm11132; XOP-NEXT:    vpsllq $32, %xmm1, %xmm11133; XOP-NEXT:    vpmuludq %xmm3, %xmm4, %xmm21134; XOP-NEXT:    vpaddq %xmm0, %xmm2, %xmm01135; XOP-NEXT:    vpaddq %xmm1, %xmm0, %xmm01136; XOP-NEXT:    retq1137;1138; AVX512F-LABEL: vec128_i64_unsigned_reg_reg:1139; AVX512F:       # %bb.0:1140; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11141; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01142; AVX512F-NEXT:    vpcmpnleuq %zmm1, %zmm0, %k11143; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21144; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]1145; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}1146; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm21147; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm11148; AVX512F-NEXT:    vpsubq %xmm2, %xmm1, %xmm11149; AVX512F-NEXT:    vpsrlq $1, %xmm1, %xmm21150; AVX512F-NEXT:    vpsrlq $33, %xmm1, %xmm11151; AVX512F-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11152; AVX512F-NEXT:    vpsrlq $32, %xmm3, %xmm41153; AVX512F-NEXT:    vpmuludq %xmm4, %xmm2, %xmm41154; AVX512F-NEXT:    vpaddq %xmm1, %xmm4, %xmm11155; AVX512F-NEXT:    vpsllq $32, %xmm1, %xmm11156; AVX512F-NEXT:    vpmuludq %xmm3, %xmm2, %xmm21157; AVX512F-NEXT:    vpaddq %xmm0, %xmm2, %xmm01158; AVX512F-NEXT:    vpaddq %xmm1, %xmm0, %xmm01159; AVX512F-NEXT:    vzeroupper1160; AVX512F-NEXT:    retq1161;1162; AVX512VL-LABEL: vec128_i64_unsigned_reg_reg:1163; AVX512VL:       # %bb.0:1164; AVX512VL-NEXT:    vpcmpnleuq %xmm1, %xmm0, %k11165; AVX512VL-NEXT:    vpminuq %xmm1, %xmm0, %xmm21166; AVX512VL-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm11167; AVX512VL-NEXT:    vpsubq %xmm2, %xmm1, %xmm11168; AVX512VL-NEXT:    vpsrlq $1, %xmm1, %xmm11169; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm21170; AVX512VL-NEXT:    vpsubq %xmm1, %xmm2, %xmm1 {%k1}1171; AVX512VL-NEXT:    vpaddq %xmm0, %xmm1, %xmm01172; AVX512VL-NEXT:    retq1173;1174; AVX512BW-FALLBACK-LABEL: vec128_i64_unsigned_reg_reg:1175; AVX512BW-FALLBACK:       # %bb.0:1176; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11177; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01178; AVX512BW-FALLBACK-NEXT:    vpcmpnleuq %zmm1, %zmm0, %k11179; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21180; AVX512BW-FALLBACK-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]1181; AVX512BW-FALLBACK-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}1182; AVX512BW-FALLBACK-NEXT:    vpminuq %zmm1, %zmm0, %zmm21183; AVX512BW-FALLBACK-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm11184; AVX512BW-FALLBACK-NEXT:    vpsubq %xmm2, %xmm1, %xmm11185; AVX512BW-FALLBACK-NEXT:    vpsrlq $1, %xmm1, %xmm21186; AVX512BW-FALLBACK-NEXT:    vpsrlq $33, %xmm1, %xmm11187; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11188; AVX512BW-FALLBACK-NEXT:    vpsrlq $32, %xmm3, %xmm41189; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm4, %xmm2, %xmm41190; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm1, %xmm4, %xmm11191; AVX512BW-FALLBACK-NEXT:    vpsllq $32, %xmm1, %xmm11192; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm2, %xmm21193; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm0, %xmm2, %xmm01194; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm1, %xmm0, %xmm01195; AVX512BW-FALLBACK-NEXT:    vzeroupper1196; AVX512BW-FALLBACK-NEXT:    retq1197  %t3 = icmp ugt <2 x i64> %a1, %a21198  %t4 = select <2 x i1> %t3, <2 x i64> <i64 -1, i64 -1>, <2 x i64> <i64 1, i64 1>1199  %t5 = select <2 x i1> %t3, <2 x i64> %a2, <2 x i64> %a11200  %t6 = select <2 x i1> %t3, <2 x i64> %a1, <2 x i64> %a21201  %t7 = sub <2 x i64> %t6, %t51202  %t8 = lshr <2 x i64> %t7, <i64 1, i64 1>1203  %t9 = mul <2 x i64> %t8, %t41204  %a10 = add <2 x i64> %t9, %a11205  ret <2 x i64> %a101206}1207 1208; Values are loaded. Only check signed case.1209 1210define <2 x i64> @vec128_i64_signed_mem_reg(ptr %a1_addr, <2 x i64> %a2) nounwind {1211; SSE2-LABEL: vec128_i64_signed_mem_reg:1212; SSE2:       # %bb.0:1213; SSE2-NEXT:    movdqa (%rdi), %xmm11214; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]1215; SSE2-NEXT:    movdqa %xmm1, %xmm31216; SSE2-NEXT:    psubq %xmm0, %xmm31217; SSE2-NEXT:    pxor %xmm2, %xmm01218; SSE2-NEXT:    pxor %xmm1, %xmm21219; SSE2-NEXT:    movdqa %xmm2, %xmm41220; SSE2-NEXT:    pcmpgtd %xmm0, %xmm41221; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1222; SSE2-NEXT:    pcmpeqd %xmm0, %xmm21223; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]1224; SSE2-NEXT:    pand %xmm5, %xmm01225; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]1226; SSE2-NEXT:    por %xmm0, %xmm21227; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1,1]1228; SSE2-NEXT:    por %xmm2, %xmm41229; SSE2-NEXT:    pxor %xmm2, %xmm31230; SSE2-NEXT:    movdqa %xmm2, %xmm51231; SSE2-NEXT:    psubq %xmm3, %xmm51232; SSE2-NEXT:    movdqa %xmm5, %xmm01233; SSE2-NEXT:    psrlq $1, %xmm01234; SSE2-NEXT:    psrlq $33, %xmm51235; SSE2-NEXT:    pmuludq %xmm4, %xmm51236; SSE2-NEXT:    psrlq $32, %xmm21237; SSE2-NEXT:    pmuludq %xmm0, %xmm21238; SSE2-NEXT:    paddq %xmm5, %xmm21239; SSE2-NEXT:    psllq $32, %xmm21240; SSE2-NEXT:    pmuludq %xmm4, %xmm01241; SSE2-NEXT:    paddq %xmm1, %xmm01242; SSE2-NEXT:    paddq %xmm2, %xmm01243; SSE2-NEXT:    retq1244;1245; SSE41-LABEL: vec128_i64_signed_mem_reg:1246; SSE41:       # %bb.0:1247; SSE41-NEXT:    movdqa (%rdi), %xmm11248; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm2 = [2147483648,2147483648]1249; SSE41-NEXT:    movdqa %xmm1, %xmm31250; SSE41-NEXT:    psubq %xmm0, %xmm31251; SSE41-NEXT:    pxor %xmm2, %xmm01252; SSE41-NEXT:    pxor %xmm1, %xmm21253; SSE41-NEXT:    movdqa %xmm2, %xmm41254; SSE41-NEXT:    pcmpgtd %xmm0, %xmm41255; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1256; SSE41-NEXT:    pcmpeqd %xmm0, %xmm21257; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]1258; SSE41-NEXT:    pand %xmm5, %xmm01259; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]1260; SSE41-NEXT:    por %xmm0, %xmm21261; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm4 = [1,1]1262; SSE41-NEXT:    por %xmm2, %xmm41263; SSE41-NEXT:    pxor %xmm2, %xmm31264; SSE41-NEXT:    movdqa %xmm2, %xmm51265; SSE41-NEXT:    psubq %xmm3, %xmm51266; SSE41-NEXT:    movdqa %xmm5, %xmm01267; SSE41-NEXT:    psrlq $1, %xmm01268; SSE41-NEXT:    psrlq $33, %xmm51269; SSE41-NEXT:    pmuludq %xmm4, %xmm51270; SSE41-NEXT:    psrlq $32, %xmm21271; SSE41-NEXT:    pmuludq %xmm0, %xmm21272; SSE41-NEXT:    paddq %xmm5, %xmm21273; SSE41-NEXT:    psllq $32, %xmm21274; SSE41-NEXT:    pmuludq %xmm4, %xmm01275; SSE41-NEXT:    paddq %xmm1, %xmm01276; SSE41-NEXT:    paddq %xmm2, %xmm01277; SSE41-NEXT:    retq1278;1279; AVX-LABEL: vec128_i64_signed_mem_reg:1280; AVX:       # %bb.0:1281; AVX-NEXT:    vmovdqa (%rdi), %xmm11282; AVX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm21283; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31284; AVX-NEXT:    vpsubq %xmm0, %xmm1, %xmm01285; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm01286; AVX-NEXT:    vpsubq %xmm0, %xmm2, %xmm01287; AVX-NEXT:    vpsrlq $1, %xmm0, %xmm41288; AVX-NEXT:    vpsrlq $33, %xmm0, %xmm01289; AVX-NEXT:    vpmuludq %xmm3, %xmm0, %xmm01290; AVX-NEXT:    vpsrlq $32, %xmm2, %xmm21291; AVX-NEXT:    vpmuludq %xmm2, %xmm4, %xmm21292; AVX-NEXT:    vpaddq %xmm0, %xmm2, %xmm01293; AVX-NEXT:    vpsllq $32, %xmm0, %xmm01294; AVX-NEXT:    vpmuludq %xmm3, %xmm4, %xmm21295; AVX-NEXT:    vpaddq %xmm1, %xmm2, %xmm11296; AVX-NEXT:    vpaddq %xmm0, %xmm1, %xmm01297; AVX-NEXT:    retq1298;1299; XOP-LABEL: vec128_i64_signed_mem_reg:1300; XOP:       # %bb.0:1301; XOP-NEXT:    vmovdqa (%rdi), %xmm11302; XOP-NEXT:    vpcomgtq %xmm0, %xmm1, %xmm21303; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31304; XOP-NEXT:    vpsubq %xmm0, %xmm1, %xmm01305; XOP-NEXT:    vpxor %xmm2, %xmm0, %xmm01306; XOP-NEXT:    vpsubq %xmm0, %xmm2, %xmm01307; XOP-NEXT:    vpsrlq $1, %xmm0, %xmm41308; XOP-NEXT:    vpsrlq $33, %xmm0, %xmm01309; XOP-NEXT:    vpmuludq %xmm3, %xmm0, %xmm01310; XOP-NEXT:    vpsrlq $32, %xmm2, %xmm21311; XOP-NEXT:    vpmuludq %xmm2, %xmm4, %xmm21312; XOP-NEXT:    vpaddq %xmm0, %xmm2, %xmm01313; XOP-NEXT:    vpsllq $32, %xmm0, %xmm01314; XOP-NEXT:    vpmuludq %xmm3, %xmm4, %xmm21315; XOP-NEXT:    vpaddq %xmm1, %xmm2, %xmm11316; XOP-NEXT:    vpaddq %xmm0, %xmm1, %xmm01317; XOP-NEXT:    retq1318;1319; AVX512F-LABEL: vec128_i64_signed_mem_reg:1320; AVX512F:       # %bb.0:1321; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01322; AVX512F-NEXT:    vmovdqa (%rdi), %xmm11323; AVX512F-NEXT:    vpcmpgtq %zmm0, %zmm1, %k11324; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21325; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]1326; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}1327; AVX512F-NEXT:    vpminsq %zmm0, %zmm1, %zmm21328; AVX512F-NEXT:    vpmaxsq %zmm0, %zmm1, %zmm01329; AVX512F-NEXT:    vpsubq %xmm2, %xmm0, %xmm01330; AVX512F-NEXT:    vpsrlq $1, %xmm0, %xmm21331; AVX512F-NEXT:    vpsrlq $33, %xmm0, %xmm01332; AVX512F-NEXT:    vpmuludq %xmm3, %xmm0, %xmm01333; AVX512F-NEXT:    vpsrlq $32, %xmm3, %xmm41334; AVX512F-NEXT:    vpmuludq %xmm4, %xmm2, %xmm41335; AVX512F-NEXT:    vpaddq %xmm0, %xmm4, %xmm01336; AVX512F-NEXT:    vpsllq $32, %xmm0, %xmm01337; AVX512F-NEXT:    vpmuludq %xmm3, %xmm2, %xmm21338; AVX512F-NEXT:    vpaddq %xmm1, %xmm2, %xmm11339; AVX512F-NEXT:    vpaddq %xmm0, %xmm1, %xmm01340; AVX512F-NEXT:    vzeroupper1341; AVX512F-NEXT:    retq1342;1343; AVX512VL-LABEL: vec128_i64_signed_mem_reg:1344; AVX512VL:       # %bb.0:1345; AVX512VL-NEXT:    vmovdqa (%rdi), %xmm11346; AVX512VL-NEXT:    vpcmpgtq %xmm0, %xmm1, %k11347; AVX512VL-NEXT:    vpminsq %xmm0, %xmm1, %xmm21348; AVX512VL-NEXT:    vpmaxsq %xmm0, %xmm1, %xmm01349; AVX512VL-NEXT:    vpsubq %xmm2, %xmm0, %xmm01350; AVX512VL-NEXT:    vpsrlq $1, %xmm0, %xmm01351; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm21352; AVX512VL-NEXT:    vpsubq %xmm0, %xmm2, %xmm0 {%k1}1353; AVX512VL-NEXT:    vpaddq %xmm1, %xmm0, %xmm01354; AVX512VL-NEXT:    retq1355;1356; AVX512BW-FALLBACK-LABEL: vec128_i64_signed_mem_reg:1357; AVX512BW-FALLBACK:       # %bb.0:1358; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01359; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm11360; AVX512BW-FALLBACK-NEXT:    vpcmpgtq %zmm0, %zmm1, %k11361; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21362; AVX512BW-FALLBACK-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]1363; AVX512BW-FALLBACK-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}1364; AVX512BW-FALLBACK-NEXT:    vpminsq %zmm0, %zmm1, %zmm21365; AVX512BW-FALLBACK-NEXT:    vpmaxsq %zmm0, %zmm1, %zmm01366; AVX512BW-FALLBACK-NEXT:    vpsubq %xmm2, %xmm0, %xmm01367; AVX512BW-FALLBACK-NEXT:    vpsrlq $1, %xmm0, %xmm21368; AVX512BW-FALLBACK-NEXT:    vpsrlq $33, %xmm0, %xmm01369; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm0, %xmm01370; AVX512BW-FALLBACK-NEXT:    vpsrlq $32, %xmm3, %xmm41371; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm4, %xmm2, %xmm41372; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm0, %xmm4, %xmm01373; AVX512BW-FALLBACK-NEXT:    vpsllq $32, %xmm0, %xmm01374; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm2, %xmm21375; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm1, %xmm2, %xmm11376; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm0, %xmm1, %xmm01377; AVX512BW-FALLBACK-NEXT:    vzeroupper1378; AVX512BW-FALLBACK-NEXT:    retq1379  %a1 = load <2 x i64>, ptr %a1_addr1380  %t3 = icmp sgt <2 x i64> %a1, %a2 ; signed1381  %t4 = select <2 x i1> %t3, <2 x i64> <i64 -1, i64 -1>, <2 x i64> <i64 1, i64 1>1382  %t5 = select <2 x i1> %t3, <2 x i64> %a2, <2 x i64> %a11383  %t6 = select <2 x i1> %t3, <2 x i64> %a1, <2 x i64> %a21384  %t7 = sub <2 x i64> %t6, %t51385  %t8 = lshr <2 x i64> %t7, <i64 1, i64 1>1386  %t9 = mul nsw <2 x i64> %t8, %t4 ; signed1387  %a10 = add nsw <2 x i64> %t9, %a1 ; signed1388  ret <2 x i64> %a101389}1390 1391define <2 x i64> @vec128_i64_signed_reg_mem(<2 x i64> %a1, ptr %a2_addr) nounwind {1392; SSE2-LABEL: vec128_i64_signed_reg_mem:1393; SSE2:       # %bb.0:1394; SSE2-NEXT:    movdqa (%rdi), %xmm11395; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]1396; SSE2-NEXT:    movdqa %xmm0, %xmm31397; SSE2-NEXT:    pxor %xmm2, %xmm31398; SSE2-NEXT:    pxor %xmm1, %xmm21399; SSE2-NEXT:    movdqa %xmm3, %xmm41400; SSE2-NEXT:    pcmpgtd %xmm2, %xmm41401; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1402; SSE2-NEXT:    pcmpeqd %xmm3, %xmm21403; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1404; SSE2-NEXT:    pand %xmm5, %xmm21405; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]1406; SSE2-NEXT:    por %xmm2, %xmm31407; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [1,1]1408; SSE2-NEXT:    por %xmm3, %xmm21409; SSE2-NEXT:    movdqa %xmm0, %xmm41410; SSE2-NEXT:    psubq %xmm1, %xmm41411; SSE2-NEXT:    pxor %xmm3, %xmm41412; SSE2-NEXT:    movdqa %xmm3, %xmm11413; SSE2-NEXT:    psubq %xmm4, %xmm11414; SSE2-NEXT:    movdqa %xmm1, %xmm41415; SSE2-NEXT:    psrlq $1, %xmm41416; SSE2-NEXT:    psrlq $33, %xmm11417; SSE2-NEXT:    pmuludq %xmm2, %xmm11418; SSE2-NEXT:    psrlq $32, %xmm31419; SSE2-NEXT:    pmuludq %xmm4, %xmm31420; SSE2-NEXT:    paddq %xmm1, %xmm31421; SSE2-NEXT:    psllq $32, %xmm31422; SSE2-NEXT:    pmuludq %xmm2, %xmm41423; SSE2-NEXT:    paddq %xmm4, %xmm01424; SSE2-NEXT:    paddq %xmm3, %xmm01425; SSE2-NEXT:    retq1426;1427; SSE41-LABEL: vec128_i64_signed_reg_mem:1428; SSE41:       # %bb.0:1429; SSE41-NEXT:    movdqa (%rdi), %xmm11430; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm2 = [2147483648,2147483648]1431; SSE41-NEXT:    movdqa %xmm0, %xmm31432; SSE41-NEXT:    pxor %xmm2, %xmm31433; SSE41-NEXT:    pxor %xmm1, %xmm21434; SSE41-NEXT:    movdqa %xmm3, %xmm41435; SSE41-NEXT:    pcmpgtd %xmm2, %xmm41436; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1437; SSE41-NEXT:    pcmpeqd %xmm3, %xmm21438; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1439; SSE41-NEXT:    pand %xmm5, %xmm21440; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]1441; SSE41-NEXT:    por %xmm2, %xmm31442; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm2 = [1,1]1443; SSE41-NEXT:    por %xmm3, %xmm21444; SSE41-NEXT:    movdqa %xmm0, %xmm41445; SSE41-NEXT:    psubq %xmm1, %xmm41446; SSE41-NEXT:    pxor %xmm3, %xmm41447; SSE41-NEXT:    movdqa %xmm3, %xmm11448; SSE41-NEXT:    psubq %xmm4, %xmm11449; SSE41-NEXT:    movdqa %xmm1, %xmm41450; SSE41-NEXT:    psrlq $1, %xmm41451; SSE41-NEXT:    psrlq $33, %xmm11452; SSE41-NEXT:    pmuludq %xmm2, %xmm11453; SSE41-NEXT:    psrlq $32, %xmm31454; SSE41-NEXT:    pmuludq %xmm4, %xmm31455; SSE41-NEXT:    paddq %xmm1, %xmm31456; SSE41-NEXT:    psllq $32, %xmm31457; SSE41-NEXT:    pmuludq %xmm2, %xmm41458; SSE41-NEXT:    paddq %xmm4, %xmm01459; SSE41-NEXT:    paddq %xmm3, %xmm01460; SSE41-NEXT:    retq1461;1462; AVX-LABEL: vec128_i64_signed_reg_mem:1463; AVX:       # %bb.0:1464; AVX-NEXT:    vmovdqa (%rdi), %xmm11465; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm21466; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31467; AVX-NEXT:    vpsubq %xmm1, %xmm0, %xmm11468; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm11469; AVX-NEXT:    vpsubq %xmm1, %xmm2, %xmm11470; AVX-NEXT:    vpsrlq $1, %xmm1, %xmm41471; AVX-NEXT:    vpsrlq $33, %xmm1, %xmm11472; AVX-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11473; AVX-NEXT:    vpsrlq $32, %xmm2, %xmm21474; AVX-NEXT:    vpmuludq %xmm2, %xmm4, %xmm21475; AVX-NEXT:    vpaddq %xmm1, %xmm2, %xmm11476; AVX-NEXT:    vpsllq $32, %xmm1, %xmm11477; AVX-NEXT:    vpmuludq %xmm3, %xmm4, %xmm21478; AVX-NEXT:    vpaddq %xmm0, %xmm2, %xmm01479; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm01480; AVX-NEXT:    retq1481;1482; XOP-LABEL: vec128_i64_signed_reg_mem:1483; XOP:       # %bb.0:1484; XOP-NEXT:    vmovdqa (%rdi), %xmm11485; XOP-NEXT:    vpcomgtq %xmm1, %xmm0, %xmm21486; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31487; XOP-NEXT:    vpsubq %xmm1, %xmm0, %xmm11488; XOP-NEXT:    vpxor %xmm2, %xmm1, %xmm11489; XOP-NEXT:    vpsubq %xmm1, %xmm2, %xmm11490; XOP-NEXT:    vpsrlq $1, %xmm1, %xmm41491; XOP-NEXT:    vpsrlq $33, %xmm1, %xmm11492; XOP-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11493; XOP-NEXT:    vpsrlq $32, %xmm2, %xmm21494; XOP-NEXT:    vpmuludq %xmm2, %xmm4, %xmm21495; XOP-NEXT:    vpaddq %xmm1, %xmm2, %xmm11496; XOP-NEXT:    vpsllq $32, %xmm1, %xmm11497; XOP-NEXT:    vpmuludq %xmm3, %xmm4, %xmm21498; XOP-NEXT:    vpaddq %xmm0, %xmm2, %xmm01499; XOP-NEXT:    vpaddq %xmm1, %xmm0, %xmm01500; XOP-NEXT:    retq1501;1502; AVX512F-LABEL: vec128_i64_signed_reg_mem:1503; AVX512F:       # %bb.0:1504; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01505; AVX512F-NEXT:    vmovdqa (%rdi), %xmm11506; AVX512F-NEXT:    vpcmpgtq %zmm1, %zmm0, %k11507; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21508; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]1509; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}1510; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm21511; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm11512; AVX512F-NEXT:    vpsubq %xmm2, %xmm1, %xmm11513; AVX512F-NEXT:    vpsrlq $1, %xmm1, %xmm21514; AVX512F-NEXT:    vpsrlq $33, %xmm1, %xmm11515; AVX512F-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11516; AVX512F-NEXT:    vpsrlq $32, %xmm3, %xmm41517; AVX512F-NEXT:    vpmuludq %xmm4, %xmm2, %xmm41518; AVX512F-NEXT:    vpaddq %xmm1, %xmm4, %xmm11519; AVX512F-NEXT:    vpsllq $32, %xmm1, %xmm11520; AVX512F-NEXT:    vpmuludq %xmm3, %xmm2, %xmm21521; AVX512F-NEXT:    vpaddq %xmm0, %xmm2, %xmm01522; AVX512F-NEXT:    vpaddq %xmm1, %xmm0, %xmm01523; AVX512F-NEXT:    vzeroupper1524; AVX512F-NEXT:    retq1525;1526; AVX512VL-LABEL: vec128_i64_signed_reg_mem:1527; AVX512VL:       # %bb.0:1528; AVX512VL-NEXT:    vmovdqa (%rdi), %xmm11529; AVX512VL-NEXT:    vpcmpgtq %xmm1, %xmm0, %k11530; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm21531; AVX512VL-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm11532; AVX512VL-NEXT:    vpsubq %xmm2, %xmm1, %xmm11533; AVX512VL-NEXT:    vpsrlq $1, %xmm1, %xmm11534; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm21535; AVX512VL-NEXT:    vpsubq %xmm1, %xmm2, %xmm1 {%k1}1536; AVX512VL-NEXT:    vpaddq %xmm0, %xmm1, %xmm01537; AVX512VL-NEXT:    retq1538;1539; AVX512BW-FALLBACK-LABEL: vec128_i64_signed_reg_mem:1540; AVX512BW-FALLBACK:       # %bb.0:1541; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01542; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm11543; AVX512BW-FALLBACK-NEXT:    vpcmpgtq %zmm1, %zmm0, %k11544; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21545; AVX512BW-FALLBACK-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]1546; AVX512BW-FALLBACK-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}1547; AVX512BW-FALLBACK-NEXT:    vpminsq %zmm1, %zmm0, %zmm21548; AVX512BW-FALLBACK-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm11549; AVX512BW-FALLBACK-NEXT:    vpsubq %xmm2, %xmm1, %xmm11550; AVX512BW-FALLBACK-NEXT:    vpsrlq $1, %xmm1, %xmm21551; AVX512BW-FALLBACK-NEXT:    vpsrlq $33, %xmm1, %xmm11552; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11553; AVX512BW-FALLBACK-NEXT:    vpsrlq $32, %xmm3, %xmm41554; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm4, %xmm2, %xmm41555; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm1, %xmm4, %xmm11556; AVX512BW-FALLBACK-NEXT:    vpsllq $32, %xmm1, %xmm11557; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm2, %xmm21558; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm0, %xmm2, %xmm01559; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm1, %xmm0, %xmm01560; AVX512BW-FALLBACK-NEXT:    vzeroupper1561; AVX512BW-FALLBACK-NEXT:    retq1562  %a2 = load <2 x i64>, ptr %a2_addr1563  %t3 = icmp sgt <2 x i64> %a1, %a2 ; signed1564  %t4 = select <2 x i1> %t3, <2 x i64> <i64 -1, i64 -1>, <2 x i64> <i64 1, i64 1>1565  %t5 = select <2 x i1> %t3, <2 x i64> %a2, <2 x i64> %a11566  %t6 = select <2 x i1> %t3, <2 x i64> %a1, <2 x i64> %a21567  %t7 = sub <2 x i64> %t6, %t51568  %t8 = lshr <2 x i64> %t7, <i64 1, i64 1>1569  %t9 = mul nsw <2 x i64> %t8, %t4 ; signed1570  %a10 = add nsw <2 x i64> %t9, %a1 ; signed1571  ret <2 x i64> %a101572}1573 1574define <2 x i64> @vec128_i64_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind {1575; SSE2-LABEL: vec128_i64_signed_mem_mem:1576; SSE2:       # %bb.0:1577; SSE2-NEXT:    movdqa (%rdi), %xmm11578; SSE2-NEXT:    movdqa (%rsi), %xmm01579; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]1580; SSE2-NEXT:    movdqa %xmm1, %xmm31581; SSE2-NEXT:    psubq %xmm0, %xmm31582; SSE2-NEXT:    pxor %xmm2, %xmm01583; SSE2-NEXT:    pxor %xmm1, %xmm21584; SSE2-NEXT:    movdqa %xmm2, %xmm41585; SSE2-NEXT:    pcmpgtd %xmm0, %xmm41586; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1587; SSE2-NEXT:    pcmpeqd %xmm0, %xmm21588; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]1589; SSE2-NEXT:    pand %xmm5, %xmm01590; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]1591; SSE2-NEXT:    por %xmm0, %xmm21592; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1,1]1593; SSE2-NEXT:    por %xmm2, %xmm41594; SSE2-NEXT:    pxor %xmm2, %xmm31595; SSE2-NEXT:    movdqa %xmm2, %xmm51596; SSE2-NEXT:    psubq %xmm3, %xmm51597; SSE2-NEXT:    movdqa %xmm5, %xmm01598; SSE2-NEXT:    psrlq $1, %xmm01599; SSE2-NEXT:    psrlq $33, %xmm51600; SSE2-NEXT:    pmuludq %xmm4, %xmm51601; SSE2-NEXT:    psrlq $32, %xmm21602; SSE2-NEXT:    pmuludq %xmm0, %xmm21603; SSE2-NEXT:    paddq %xmm5, %xmm21604; SSE2-NEXT:    psllq $32, %xmm21605; SSE2-NEXT:    pmuludq %xmm4, %xmm01606; SSE2-NEXT:    paddq %xmm1, %xmm01607; SSE2-NEXT:    paddq %xmm2, %xmm01608; SSE2-NEXT:    retq1609;1610; SSE41-LABEL: vec128_i64_signed_mem_mem:1611; SSE41:       # %bb.0:1612; SSE41-NEXT:    movdqa (%rdi), %xmm11613; SSE41-NEXT:    movdqa (%rsi), %xmm01614; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm2 = [2147483648,2147483648]1615; SSE41-NEXT:    movdqa %xmm1, %xmm31616; SSE41-NEXT:    psubq %xmm0, %xmm31617; SSE41-NEXT:    pxor %xmm2, %xmm01618; SSE41-NEXT:    pxor %xmm1, %xmm21619; SSE41-NEXT:    movdqa %xmm2, %xmm41620; SSE41-NEXT:    pcmpgtd %xmm0, %xmm41621; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1622; SSE41-NEXT:    pcmpeqd %xmm0, %xmm21623; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]1624; SSE41-NEXT:    pand %xmm5, %xmm01625; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]1626; SSE41-NEXT:    por %xmm0, %xmm21627; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm4 = [1,1]1628; SSE41-NEXT:    por %xmm2, %xmm41629; SSE41-NEXT:    pxor %xmm2, %xmm31630; SSE41-NEXT:    movdqa %xmm2, %xmm51631; SSE41-NEXT:    psubq %xmm3, %xmm51632; SSE41-NEXT:    movdqa %xmm5, %xmm01633; SSE41-NEXT:    psrlq $1, %xmm01634; SSE41-NEXT:    psrlq $33, %xmm51635; SSE41-NEXT:    pmuludq %xmm4, %xmm51636; SSE41-NEXT:    psrlq $32, %xmm21637; SSE41-NEXT:    pmuludq %xmm0, %xmm21638; SSE41-NEXT:    paddq %xmm5, %xmm21639; SSE41-NEXT:    psllq $32, %xmm21640; SSE41-NEXT:    pmuludq %xmm4, %xmm01641; SSE41-NEXT:    paddq %xmm1, %xmm01642; SSE41-NEXT:    paddq %xmm2, %xmm01643; SSE41-NEXT:    retq1644;1645; AVX-LABEL: vec128_i64_signed_mem_mem:1646; AVX:       # %bb.0:1647; AVX-NEXT:    vmovdqa (%rdi), %xmm01648; AVX-NEXT:    vmovdqa (%rsi), %xmm11649; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm21650; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31651; AVX-NEXT:    vpsubq %xmm1, %xmm0, %xmm11652; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm11653; AVX-NEXT:    vpsubq %xmm1, %xmm2, %xmm11654; AVX-NEXT:    vpsrlq $1, %xmm1, %xmm41655; AVX-NEXT:    vpsrlq $33, %xmm1, %xmm11656; AVX-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11657; AVX-NEXT:    vpsrlq $32, %xmm2, %xmm21658; AVX-NEXT:    vpmuludq %xmm2, %xmm4, %xmm21659; AVX-NEXT:    vpaddq %xmm1, %xmm2, %xmm11660; AVX-NEXT:    vpsllq $32, %xmm1, %xmm11661; AVX-NEXT:    vpmuludq %xmm3, %xmm4, %xmm21662; AVX-NEXT:    vpaddq %xmm0, %xmm2, %xmm01663; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm01664; AVX-NEXT:    retq1665;1666; XOP-LABEL: vec128_i64_signed_mem_mem:1667; XOP:       # %bb.0:1668; XOP-NEXT:    vmovdqa (%rdi), %xmm01669; XOP-NEXT:    vmovdqa (%rsi), %xmm11670; XOP-NEXT:    vpcomgtq %xmm1, %xmm0, %xmm21671; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm31672; XOP-NEXT:    vpsubq %xmm1, %xmm0, %xmm11673; XOP-NEXT:    vpxor %xmm2, %xmm1, %xmm11674; XOP-NEXT:    vpsubq %xmm1, %xmm2, %xmm11675; XOP-NEXT:    vpsrlq $1, %xmm1, %xmm41676; XOP-NEXT:    vpsrlq $33, %xmm1, %xmm11677; XOP-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11678; XOP-NEXT:    vpsrlq $32, %xmm2, %xmm21679; XOP-NEXT:    vpmuludq %xmm2, %xmm4, %xmm21680; XOP-NEXT:    vpaddq %xmm1, %xmm2, %xmm11681; XOP-NEXT:    vpsllq $32, %xmm1, %xmm11682; XOP-NEXT:    vpmuludq %xmm3, %xmm4, %xmm21683; XOP-NEXT:    vpaddq %xmm0, %xmm2, %xmm01684; XOP-NEXT:    vpaddq %xmm1, %xmm0, %xmm01685; XOP-NEXT:    retq1686;1687; AVX512F-LABEL: vec128_i64_signed_mem_mem:1688; AVX512F:       # %bb.0:1689; AVX512F-NEXT:    vmovdqa (%rdi), %xmm01690; AVX512F-NEXT:    vmovdqa (%rsi), %xmm11691; AVX512F-NEXT:    vpcmpgtq %zmm1, %zmm0, %k11692; AVX512F-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21693; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]1694; AVX512F-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}1695; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm21696; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm11697; AVX512F-NEXT:    vpsubq %xmm2, %xmm1, %xmm11698; AVX512F-NEXT:    vpsrlq $1, %xmm1, %xmm21699; AVX512F-NEXT:    vpsrlq $33, %xmm1, %xmm11700; AVX512F-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11701; AVX512F-NEXT:    vpsrlq $32, %xmm3, %xmm41702; AVX512F-NEXT:    vpmuludq %xmm4, %xmm2, %xmm41703; AVX512F-NEXT:    vpaddq %xmm1, %xmm4, %xmm11704; AVX512F-NEXT:    vpsllq $32, %xmm1, %xmm11705; AVX512F-NEXT:    vpmuludq %xmm3, %xmm2, %xmm21706; AVX512F-NEXT:    vpaddq %xmm0, %xmm2, %xmm01707; AVX512F-NEXT:    vpaddq %xmm1, %xmm0, %xmm01708; AVX512F-NEXT:    vzeroupper1709; AVX512F-NEXT:    retq1710;1711; AVX512VL-LABEL: vec128_i64_signed_mem_mem:1712; AVX512VL:       # %bb.0:1713; AVX512VL-NEXT:    vmovdqa (%rdi), %xmm01714; AVX512VL-NEXT:    vmovdqa (%rsi), %xmm11715; AVX512VL-NEXT:    vpcmpgtq %xmm1, %xmm0, %k11716; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm21717; AVX512VL-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm11718; AVX512VL-NEXT:    vpsubq %xmm2, %xmm1, %xmm11719; AVX512VL-NEXT:    vpsrlq $1, %xmm1, %xmm11720; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm21721; AVX512VL-NEXT:    vpsubq %xmm1, %xmm2, %xmm1 {%k1}1722; AVX512VL-NEXT:    vpaddq %xmm0, %xmm1, %xmm01723; AVX512VL-NEXT:    retq1724;1725; AVX512BW-FALLBACK-LABEL: vec128_i64_signed_mem_mem:1726; AVX512BW-FALLBACK:       # %bb.0:1727; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm01728; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rsi), %xmm11729; AVX512BW-FALLBACK-NEXT:    vpcmpgtq %zmm1, %zmm0, %k11730; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21731; AVX512BW-FALLBACK-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,1]1732; AVX512BW-FALLBACK-NEXT:    vmovdqa64 %zmm2, %zmm3 {%k1}1733; AVX512BW-FALLBACK-NEXT:    vpminsq %zmm1, %zmm0, %zmm21734; AVX512BW-FALLBACK-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm11735; AVX512BW-FALLBACK-NEXT:    vpsubq %xmm2, %xmm1, %xmm11736; AVX512BW-FALLBACK-NEXT:    vpsrlq $1, %xmm1, %xmm21737; AVX512BW-FALLBACK-NEXT:    vpsrlq $33, %xmm1, %xmm11738; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm1, %xmm11739; AVX512BW-FALLBACK-NEXT:    vpsrlq $32, %xmm3, %xmm41740; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm4, %xmm2, %xmm41741; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm1, %xmm4, %xmm11742; AVX512BW-FALLBACK-NEXT:    vpsllq $32, %xmm1, %xmm11743; AVX512BW-FALLBACK-NEXT:    vpmuludq %xmm3, %xmm2, %xmm21744; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm0, %xmm2, %xmm01745; AVX512BW-FALLBACK-NEXT:    vpaddq %xmm1, %xmm0, %xmm01746; AVX512BW-FALLBACK-NEXT:    vzeroupper1747; AVX512BW-FALLBACK-NEXT:    retq1748  %a1 = load <2 x i64>, ptr %a1_addr1749  %a2 = load <2 x i64>, ptr %a2_addr1750  %t3 = icmp sgt <2 x i64> %a1, %a2 ; signed1751  %t4 = select <2 x i1> %t3, <2 x i64> <i64 -1, i64 -1>, <2 x i64> <i64 1, i64 1>1752  %t5 = select <2 x i1> %t3, <2 x i64> %a2, <2 x i64> %a11753  %t6 = select <2 x i1> %t3, <2 x i64> %a1, <2 x i64> %a21754  %t7 = sub <2 x i64> %t6, %t51755  %t8 = lshr <2 x i64> %t7, <i64 1, i64 1>1756  %t9 = mul nsw <2 x i64> %t8, %t4 ; signed1757  %a10 = add nsw <2 x i64> %t9, %a1 ; signed1758  ret <2 x i64> %a101759}1760 1761; ---------------------------------------------------------------------------- ;1762; 16-bit width. 128 / 16 = 8 elts.1763; ---------------------------------------------------------------------------- ;1764 1765; Values come from regs1766 1767define <8 x i16> @vec128_i16_signed_reg_reg(<8 x i16> %a1, <8 x i16> %a2) nounwind {1768; SSE-LABEL: vec128_i16_signed_reg_reg:1769; SSE:       # %bb.0:1770; SSE-NEXT:    movdqa %xmm0, %xmm21771; SSE-NEXT:    pcmpgtw %xmm1, %xmm21772; SSE-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21773; SSE-NEXT:    movdqa %xmm0, %xmm31774; SSE-NEXT:    pminsw %xmm1, %xmm31775; SSE-NEXT:    pmaxsw %xmm0, %xmm11776; SSE-NEXT:    psubw %xmm3, %xmm11777; SSE-NEXT:    psrlw $1, %xmm11778; SSE-NEXT:    pmullw %xmm1, %xmm21779; SSE-NEXT:    paddw %xmm2, %xmm01780; SSE-NEXT:    retq1781;1782; AVX-LABEL: vec128_i16_signed_reg_reg:1783; AVX:       # %bb.0:1784; AVX-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm21785; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21786; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm31787; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm11788; AVX-NEXT:    vpsubw %xmm3, %xmm1, %xmm11789; AVX-NEXT:    vpsrlw $1, %xmm1, %xmm11790; AVX-NEXT:    vpmullw %xmm2, %xmm1, %xmm11791; AVX-NEXT:    vpaddw %xmm0, %xmm1, %xmm01792; AVX-NEXT:    retq1793;1794; XOP-LABEL: vec128_i16_signed_reg_reg:1795; XOP:       # %bb.0:1796; XOP-NEXT:    vpcomgtw %xmm1, %xmm0, %xmm21797; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21798; XOP-NEXT:    vpminsw %xmm1, %xmm0, %xmm31799; XOP-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm11800; XOP-NEXT:    vpsubw %xmm3, %xmm1, %xmm11801; XOP-NEXT:    vpsrlw $1, %xmm1, %xmm11802; XOP-NEXT:    vpmacsww %xmm0, %xmm2, %xmm1, %xmm01803; XOP-NEXT:    retq1804;1805; AVX512F-LABEL: vec128_i16_signed_reg_reg:1806; AVX512F:       # %bb.0:1807; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm21808; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21809; AVX512F-NEXT:    vpminsw %xmm1, %xmm0, %xmm31810; AVX512F-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm11811; AVX512F-NEXT:    vpsubw %xmm3, %xmm1, %xmm11812; AVX512F-NEXT:    vpsrlw $1, %xmm1, %xmm11813; AVX512F-NEXT:    vpmullw %xmm2, %xmm1, %xmm11814; AVX512F-NEXT:    vpaddw %xmm0, %xmm1, %xmm01815; AVX512F-NEXT:    retq1816;1817; AVX512VL-FALLBACK-LABEL: vec128_i16_signed_reg_reg:1818; AVX512VL-FALLBACK:       # %bb.0:1819; AVX512VL-FALLBACK-NEXT:    vpminsw %xmm1, %xmm0, %xmm21820; AVX512VL-FALLBACK-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm31821; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm2, %xmm3, %xmm21822; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm2, %xmm21823; AVX512VL-FALLBACK-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm11824; AVX512VL-FALLBACK-NEXT:    vpxor %xmm1, %xmm2, %xmm21825; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm1, %xmm2, %xmm11826; AVX512VL-FALLBACK-NEXT:    vpaddw %xmm0, %xmm1, %xmm01827; AVX512VL-FALLBACK-NEXT:    retq1828;1829; AVX512BW-FALLBACK-LABEL: vec128_i16_signed_reg_reg:1830; AVX512BW-FALLBACK:       # %bb.0:1831; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11832; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01833; AVX512BW-FALLBACK-NEXT:    vpcmpgtw %zmm1, %zmm0, %k11834; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21835; AVX512BW-FALLBACK-NEXT:    vpbroadcastw {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1]1836; AVX512BW-FALLBACK-NEXT:    vmovdqu16 %zmm2, %zmm3 {%k1}1837; AVX512BW-FALLBACK-NEXT:    vpminsw %xmm1, %xmm0, %xmm21838; AVX512BW-FALLBACK-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm11839; AVX512BW-FALLBACK-NEXT:    vpsubw %xmm2, %xmm1, %xmm11840; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm11841; AVX512BW-FALLBACK-NEXT:    vpmullw %xmm3, %xmm1, %xmm11842; AVX512BW-FALLBACK-NEXT:    vpaddw %xmm0, %xmm1, %xmm01843; AVX512BW-FALLBACK-NEXT:    vzeroupper1844; AVX512BW-FALLBACK-NEXT:    retq1845;1846; AVX512VLBW-LABEL: vec128_i16_signed_reg_reg:1847; AVX512VLBW:       # %bb.0:1848; AVX512VLBW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k11849; AVX512VLBW-NEXT:    vpminsw %xmm1, %xmm0, %xmm21850; AVX512VLBW-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm11851; AVX512VLBW-NEXT:    vpsubw %xmm2, %xmm1, %xmm11852; AVX512VLBW-NEXT:    vpsrlw $1, %xmm1, %xmm11853; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm21854; AVX512VLBW-NEXT:    vpsubw %xmm1, %xmm2, %xmm1 {%k1}1855; AVX512VLBW-NEXT:    vpaddw %xmm0, %xmm1, %xmm01856; AVX512VLBW-NEXT:    retq1857  %t3 = icmp sgt <8 x i16> %a1, %a2 ; signed1858  %t4 = select <8 x i1> %t3, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1859  %t5 = select <8 x i1> %t3, <8 x i16> %a2, <8 x i16> %a11860  %t6 = select <8 x i1> %t3, <8 x i16> %a1, <8 x i16> %a21861  %t7 = sub <8 x i16> %t6, %t51862  %t8 = lshr <8 x i16> %t7, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1863  %t9 = mul nsw <8 x i16> %t8, %t4 ; signed1864  %a10 = add nsw <8 x i16> %t9, %a1 ; signed1865  ret <8 x i16> %a101866}1867 1868define <8 x i16> @vec128_i16_unsigned_reg_reg(<8 x i16> %a1, <8 x i16> %a2) nounwind {1869; SSE2-LABEL: vec128_i16_unsigned_reg_reg:1870; SSE2:       # %bb.0:1871; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]1872; SSE2-NEXT:    movdqa %xmm1, %xmm31873; SSE2-NEXT:    pxor %xmm2, %xmm31874; SSE2-NEXT:    pxor %xmm0, %xmm21875; SSE2-NEXT:    pcmpgtw %xmm3, %xmm21876; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21877; SSE2-NEXT:    movdqa %xmm0, %xmm31878; SSE2-NEXT:    psubusw %xmm1, %xmm31879; SSE2-NEXT:    psubusw %xmm0, %xmm11880; SSE2-NEXT:    por %xmm1, %xmm31881; SSE2-NEXT:    psrlw $1, %xmm31882; SSE2-NEXT:    pmullw %xmm2, %xmm31883; SSE2-NEXT:    paddw %xmm3, %xmm01884; SSE2-NEXT:    retq1885;1886; SSE41-LABEL: vec128_i16_unsigned_reg_reg:1887; SSE41:       # %bb.0:1888; SSE41-NEXT:    movdqa %xmm0, %xmm21889; SSE41-NEXT:    pminuw %xmm1, %xmm21890; SSE41-NEXT:    movdqa %xmm0, %xmm31891; SSE41-NEXT:    pcmpeqw %xmm2, %xmm31892; SSE41-NEXT:    pcmpeqd %xmm4, %xmm41893; SSE41-NEXT:    pxor %xmm3, %xmm41894; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm41895; SSE41-NEXT:    pmaxuw %xmm0, %xmm11896; SSE41-NEXT:    psubw %xmm2, %xmm11897; SSE41-NEXT:    psrlw $1, %xmm11898; SSE41-NEXT:    pmullw %xmm1, %xmm41899; SSE41-NEXT:    paddw %xmm4, %xmm01900; SSE41-NEXT:    retq1901;1902; AVX-LABEL: vec128_i16_unsigned_reg_reg:1903; AVX:       # %bb.0:1904; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm21905; AVX-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm31906; AVX-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm41907; AVX-NEXT:    vpxor %xmm4, %xmm3, %xmm31908; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31909; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm11910; AVX-NEXT:    vpsubw %xmm2, %xmm1, %xmm11911; AVX-NEXT:    vpsrlw $1, %xmm1, %xmm11912; AVX-NEXT:    vpmullw %xmm3, %xmm1, %xmm11913; AVX-NEXT:    vpaddw %xmm0, %xmm1, %xmm01914; AVX-NEXT:    retq1915;1916; XOP-LABEL: vec128_i16_unsigned_reg_reg:1917; XOP:       # %bb.0:1918; XOP-NEXT:    vpcomgtuw %xmm1, %xmm0, %xmm21919; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm21920; XOP-NEXT:    vpminuw %xmm1, %xmm0, %xmm31921; XOP-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm11922; XOP-NEXT:    vpsubw %xmm3, %xmm1, %xmm11923; XOP-NEXT:    vpsrlw $1, %xmm1, %xmm11924; XOP-NEXT:    vpmacsww %xmm0, %xmm2, %xmm1, %xmm01925; XOP-NEXT:    retq1926;1927; AVX512F-LABEL: vec128_i16_unsigned_reg_reg:1928; AVX512F:       # %bb.0:1929; AVX512F-NEXT:    vpminuw %xmm1, %xmm0, %xmm21930; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm31931; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm3 = ~zmm31932; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31933; AVX512F-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm11934; AVX512F-NEXT:    vpsubw %xmm2, %xmm1, %xmm11935; AVX512F-NEXT:    vpsrlw $1, %xmm1, %xmm11936; AVX512F-NEXT:    vpmullw %xmm3, %xmm1, %xmm11937; AVX512F-NEXT:    vpaddw %xmm0, %xmm1, %xmm01938; AVX512F-NEXT:    vzeroupper1939; AVX512F-NEXT:    retq1940;1941; AVX512VL-FALLBACK-LABEL: vec128_i16_unsigned_reg_reg:1942; AVX512VL-FALLBACK:       # %bb.0:1943; AVX512VL-FALLBACK-NEXT:    vpminuw %xmm1, %xmm0, %xmm21944; AVX512VL-FALLBACK-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm11945; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm2, %xmm1, %xmm11946; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm11947; AVX512VL-FALLBACK-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm21948; AVX512VL-FALLBACK-NEXT:    vpternlogq {{.*#+}} xmm2 = ~xmm21949; AVX512VL-FALLBACK-NEXT:    vpxor %xmm2, %xmm1, %xmm11950; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm2, %xmm1, %xmm11951; AVX512VL-FALLBACK-NEXT:    vpaddw %xmm0, %xmm1, %xmm01952; AVX512VL-FALLBACK-NEXT:    retq1953;1954; AVX512BW-FALLBACK-LABEL: vec128_i16_unsigned_reg_reg:1955; AVX512BW-FALLBACK:       # %bb.0:1956; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11957; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01958; AVX512BW-FALLBACK-NEXT:    vpcmpnleuw %zmm1, %zmm0, %k11959; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm21960; AVX512BW-FALLBACK-NEXT:    vpbroadcastw {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1]1961; AVX512BW-FALLBACK-NEXT:    vmovdqu16 %zmm2, %zmm3 {%k1}1962; AVX512BW-FALLBACK-NEXT:    vpminuw %xmm1, %xmm0, %xmm21963; AVX512BW-FALLBACK-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm11964; AVX512BW-FALLBACK-NEXT:    vpsubw %xmm2, %xmm1, %xmm11965; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm11966; AVX512BW-FALLBACK-NEXT:    vpmullw %xmm3, %xmm1, %xmm11967; AVX512BW-FALLBACK-NEXT:    vpaddw %xmm0, %xmm1, %xmm01968; AVX512BW-FALLBACK-NEXT:    vzeroupper1969; AVX512BW-FALLBACK-NEXT:    retq1970;1971; AVX512VLBW-LABEL: vec128_i16_unsigned_reg_reg:1972; AVX512VLBW:       # %bb.0:1973; AVX512VLBW-NEXT:    vpcmpnleuw %xmm1, %xmm0, %k11974; AVX512VLBW-NEXT:    vpminuw %xmm1, %xmm0, %xmm21975; AVX512VLBW-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm11976; AVX512VLBW-NEXT:    vpsubw %xmm2, %xmm1, %xmm11977; AVX512VLBW-NEXT:    vpsrlw $1, %xmm1, %xmm11978; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm21979; AVX512VLBW-NEXT:    vpsubw %xmm1, %xmm2, %xmm1 {%k1}1980; AVX512VLBW-NEXT:    vpaddw %xmm0, %xmm1, %xmm01981; AVX512VLBW-NEXT:    retq1982  %t3 = icmp ugt <8 x i16> %a1, %a21983  %t4 = select <8 x i1> %t3, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1984  %t5 = select <8 x i1> %t3, <8 x i16> %a2, <8 x i16> %a11985  %t6 = select <8 x i1> %t3, <8 x i16> %a1, <8 x i16> %a21986  %t7 = sub <8 x i16> %t6, %t51987  %t8 = lshr <8 x i16> %t7, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1988  %t9 = mul <8 x i16> %t8, %t41989  %a10 = add <8 x i16> %t9, %a11990  ret <8 x i16> %a101991}1992 1993; Values are loaded. Only check signed case.1994 1995define <8 x i16> @vec128_i16_signed_mem_reg(ptr %a1_addr, <8 x i16> %a2) nounwind {1996; SSE-LABEL: vec128_i16_signed_mem_reg:1997; SSE:       # %bb.0:1998; SSE-NEXT:    movdqa (%rdi), %xmm11999; SSE-NEXT:    movdqa %xmm1, %xmm22000; SSE-NEXT:    pcmpgtw %xmm0, %xmm22001; SSE-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm22002; SSE-NEXT:    movdqa %xmm1, %xmm32003; SSE-NEXT:    pminsw %xmm0, %xmm32004; SSE-NEXT:    pmaxsw %xmm1, %xmm02005; SSE-NEXT:    psubw %xmm3, %xmm02006; SSE-NEXT:    psrlw $1, %xmm02007; SSE-NEXT:    pmullw %xmm2, %xmm02008; SSE-NEXT:    paddw %xmm1, %xmm02009; SSE-NEXT:    retq2010;2011; AVX-LABEL: vec128_i16_signed_mem_reg:2012; AVX:       # %bb.0:2013; AVX-NEXT:    vmovdqa (%rdi), %xmm12014; AVX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm22015; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22016; AVX-NEXT:    vpminsw %xmm0, %xmm1, %xmm32017; AVX-NEXT:    vpmaxsw %xmm0, %xmm1, %xmm02018; AVX-NEXT:    vpsubw %xmm3, %xmm0, %xmm02019; AVX-NEXT:    vpsrlw $1, %xmm0, %xmm02020; AVX-NEXT:    vpmullw %xmm2, %xmm0, %xmm02021; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm02022; AVX-NEXT:    retq2023;2024; XOP-LABEL: vec128_i16_signed_mem_reg:2025; XOP:       # %bb.0:2026; XOP-NEXT:    vmovdqa (%rdi), %xmm12027; XOP-NEXT:    vpcomgtw %xmm0, %xmm1, %xmm22028; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22029; XOP-NEXT:    vpminsw %xmm0, %xmm1, %xmm32030; XOP-NEXT:    vpmaxsw %xmm0, %xmm1, %xmm02031; XOP-NEXT:    vpsubw %xmm3, %xmm0, %xmm02032; XOP-NEXT:    vpsrlw $1, %xmm0, %xmm02033; XOP-NEXT:    vpmacsww %xmm1, %xmm2, %xmm0, %xmm02034; XOP-NEXT:    retq2035;2036; AVX512F-LABEL: vec128_i16_signed_mem_reg:2037; AVX512F:       # %bb.0:2038; AVX512F-NEXT:    vmovdqa (%rdi), %xmm12039; AVX512F-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm22040; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22041; AVX512F-NEXT:    vpminsw %xmm0, %xmm1, %xmm32042; AVX512F-NEXT:    vpmaxsw %xmm0, %xmm1, %xmm02043; AVX512F-NEXT:    vpsubw %xmm3, %xmm0, %xmm02044; AVX512F-NEXT:    vpsrlw $1, %xmm0, %xmm02045; AVX512F-NEXT:    vpmullw %xmm2, %xmm0, %xmm02046; AVX512F-NEXT:    vpaddw %xmm1, %xmm0, %xmm02047; AVX512F-NEXT:    retq2048;2049; AVX512VL-FALLBACK-LABEL: vec128_i16_signed_mem_reg:2050; AVX512VL-FALLBACK:       # %bb.0:2051; AVX512VL-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm12052; AVX512VL-FALLBACK-NEXT:    vpminsw %xmm0, %xmm1, %xmm22053; AVX512VL-FALLBACK-NEXT:    vpmaxsw %xmm0, %xmm1, %xmm32054; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm2, %xmm3, %xmm22055; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm2, %xmm22056; AVX512VL-FALLBACK-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm02057; AVX512VL-FALLBACK-NEXT:    vpxor %xmm0, %xmm2, %xmm22058; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm0, %xmm2, %xmm02059; AVX512VL-FALLBACK-NEXT:    vpaddw %xmm1, %xmm0, %xmm02060; AVX512VL-FALLBACK-NEXT:    retq2061;2062; AVX512BW-FALLBACK-LABEL: vec128_i16_signed_mem_reg:2063; AVX512BW-FALLBACK:       # %bb.0:2064; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02065; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm12066; AVX512BW-FALLBACK-NEXT:    vpcmpgtw %zmm0, %zmm1, %k12067; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm22068; AVX512BW-FALLBACK-NEXT:    vpbroadcastw {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1]2069; AVX512BW-FALLBACK-NEXT:    vmovdqu16 %zmm2, %zmm3 {%k1}2070; AVX512BW-FALLBACK-NEXT:    vpminsw %xmm0, %xmm1, %xmm22071; AVX512BW-FALLBACK-NEXT:    vpmaxsw %xmm0, %xmm1, %xmm02072; AVX512BW-FALLBACK-NEXT:    vpsubw %xmm2, %xmm0, %xmm02073; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm0, %xmm02074; AVX512BW-FALLBACK-NEXT:    vpmullw %xmm3, %xmm0, %xmm02075; AVX512BW-FALLBACK-NEXT:    vpaddw %xmm1, %xmm0, %xmm02076; AVX512BW-FALLBACK-NEXT:    vzeroupper2077; AVX512BW-FALLBACK-NEXT:    retq2078;2079; AVX512VLBW-LABEL: vec128_i16_signed_mem_reg:2080; AVX512VLBW:       # %bb.0:2081; AVX512VLBW-NEXT:    vmovdqa (%rdi), %xmm12082; AVX512VLBW-NEXT:    vpcmpgtw %xmm0, %xmm1, %k12083; AVX512VLBW-NEXT:    vpminsw %xmm0, %xmm1, %xmm22084; AVX512VLBW-NEXT:    vpmaxsw %xmm0, %xmm1, %xmm02085; AVX512VLBW-NEXT:    vpsubw %xmm2, %xmm0, %xmm02086; AVX512VLBW-NEXT:    vpsrlw $1, %xmm0, %xmm02087; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm22088; AVX512VLBW-NEXT:    vpsubw %xmm0, %xmm2, %xmm0 {%k1}2089; AVX512VLBW-NEXT:    vpaddw %xmm1, %xmm0, %xmm02090; AVX512VLBW-NEXT:    retq2091  %a1 = load <8 x i16>, ptr %a1_addr2092  %t3 = icmp sgt <8 x i16> %a1, %a2 ; signed2093  %t4 = select <8 x i1> %t3, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>2094  %t5 = select <8 x i1> %t3, <8 x i16> %a2, <8 x i16> %a12095  %t6 = select <8 x i1> %t3, <8 x i16> %a1, <8 x i16> %a22096  %t7 = sub <8 x i16> %t6, %t52097  %t8 = lshr <8 x i16> %t7, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>2098  %t9 = mul nsw <8 x i16> %t8, %t4 ; signed2099  %a10 = add nsw <8 x i16> %t9, %a1 ; signed2100  ret <8 x i16> %a102101}2102 2103define <8 x i16> @vec128_i16_signed_reg_mem(<8 x i16> %a1, ptr %a2_addr) nounwind {2104; SSE-LABEL: vec128_i16_signed_reg_mem:2105; SSE:       # %bb.0:2106; SSE-NEXT:    movdqa (%rdi), %xmm12107; SSE-NEXT:    movdqa %xmm0, %xmm22108; SSE-NEXT:    pcmpgtw %xmm1, %xmm22109; SSE-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm22110; SSE-NEXT:    movdqa %xmm0, %xmm32111; SSE-NEXT:    pminsw %xmm1, %xmm32112; SSE-NEXT:    pmaxsw %xmm0, %xmm12113; SSE-NEXT:    psubw %xmm3, %xmm12114; SSE-NEXT:    psrlw $1, %xmm12115; SSE-NEXT:    pmullw %xmm2, %xmm12116; SSE-NEXT:    paddw %xmm1, %xmm02117; SSE-NEXT:    retq2118;2119; AVX-LABEL: vec128_i16_signed_reg_mem:2120; AVX:       # %bb.0:2121; AVX-NEXT:    vmovdqa (%rdi), %xmm12122; AVX-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm22123; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22124; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm32125; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12126; AVX-NEXT:    vpsubw %xmm3, %xmm1, %xmm12127; AVX-NEXT:    vpsrlw $1, %xmm1, %xmm12128; AVX-NEXT:    vpmullw %xmm2, %xmm1, %xmm12129; AVX-NEXT:    vpaddw %xmm0, %xmm1, %xmm02130; AVX-NEXT:    retq2131;2132; XOP-LABEL: vec128_i16_signed_reg_mem:2133; XOP:       # %bb.0:2134; XOP-NEXT:    vmovdqa (%rdi), %xmm12135; XOP-NEXT:    vpcomgtw %xmm1, %xmm0, %xmm22136; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22137; XOP-NEXT:    vpminsw %xmm1, %xmm0, %xmm32138; XOP-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12139; XOP-NEXT:    vpsubw %xmm3, %xmm1, %xmm12140; XOP-NEXT:    vpsrlw $1, %xmm1, %xmm12141; XOP-NEXT:    vpmacsww %xmm0, %xmm2, %xmm1, %xmm02142; XOP-NEXT:    retq2143;2144; AVX512F-LABEL: vec128_i16_signed_reg_mem:2145; AVX512F:       # %bb.0:2146; AVX512F-NEXT:    vmovdqa (%rdi), %xmm12147; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm22148; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22149; AVX512F-NEXT:    vpminsw %xmm1, %xmm0, %xmm32150; AVX512F-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12151; AVX512F-NEXT:    vpsubw %xmm3, %xmm1, %xmm12152; AVX512F-NEXT:    vpsrlw $1, %xmm1, %xmm12153; AVX512F-NEXT:    vpmullw %xmm2, %xmm1, %xmm12154; AVX512F-NEXT:    vpaddw %xmm0, %xmm1, %xmm02155; AVX512F-NEXT:    retq2156;2157; AVX512VL-FALLBACK-LABEL: vec128_i16_signed_reg_mem:2158; AVX512VL-FALLBACK:       # %bb.0:2159; AVX512VL-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm12160; AVX512VL-FALLBACK-NEXT:    vpminsw %xmm1, %xmm0, %xmm22161; AVX512VL-FALLBACK-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm32162; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm2, %xmm3, %xmm22163; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm2, %xmm22164; AVX512VL-FALLBACK-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm12165; AVX512VL-FALLBACK-NEXT:    vpxor %xmm1, %xmm2, %xmm22166; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm1, %xmm2, %xmm12167; AVX512VL-FALLBACK-NEXT:    vpaddw %xmm0, %xmm1, %xmm02168; AVX512VL-FALLBACK-NEXT:    retq2169;2170; AVX512BW-FALLBACK-LABEL: vec128_i16_signed_reg_mem:2171; AVX512BW-FALLBACK:       # %bb.0:2172; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02173; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm12174; AVX512BW-FALLBACK-NEXT:    vpcmpgtw %zmm1, %zmm0, %k12175; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm22176; AVX512BW-FALLBACK-NEXT:    vpbroadcastw {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1]2177; AVX512BW-FALLBACK-NEXT:    vmovdqu16 %zmm2, %zmm3 {%k1}2178; AVX512BW-FALLBACK-NEXT:    vpminsw %xmm1, %xmm0, %xmm22179; AVX512BW-FALLBACK-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12180; AVX512BW-FALLBACK-NEXT:    vpsubw %xmm2, %xmm1, %xmm12181; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm12182; AVX512BW-FALLBACK-NEXT:    vpmullw %xmm3, %xmm1, %xmm12183; AVX512BW-FALLBACK-NEXT:    vpaddw %xmm0, %xmm1, %xmm02184; AVX512BW-FALLBACK-NEXT:    vzeroupper2185; AVX512BW-FALLBACK-NEXT:    retq2186;2187; AVX512VLBW-LABEL: vec128_i16_signed_reg_mem:2188; AVX512VLBW:       # %bb.0:2189; AVX512VLBW-NEXT:    vmovdqa (%rdi), %xmm12190; AVX512VLBW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k12191; AVX512VLBW-NEXT:    vpminsw %xmm1, %xmm0, %xmm22192; AVX512VLBW-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12193; AVX512VLBW-NEXT:    vpsubw %xmm2, %xmm1, %xmm12194; AVX512VLBW-NEXT:    vpsrlw $1, %xmm1, %xmm12195; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm22196; AVX512VLBW-NEXT:    vpsubw %xmm1, %xmm2, %xmm1 {%k1}2197; AVX512VLBW-NEXT:    vpaddw %xmm0, %xmm1, %xmm02198; AVX512VLBW-NEXT:    retq2199  %a2 = load <8 x i16>, ptr %a2_addr2200  %t3 = icmp sgt <8 x i16> %a1, %a2 ; signed2201  %t4 = select <8 x i1> %t3, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>2202  %t5 = select <8 x i1> %t3, <8 x i16> %a2, <8 x i16> %a12203  %t6 = select <8 x i1> %t3, <8 x i16> %a1, <8 x i16> %a22204  %t7 = sub <8 x i16> %t6, %t52205  %t8 = lshr <8 x i16> %t7, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>2206  %t9 = mul nsw <8 x i16> %t8, %t4 ; signed2207  %a10 = add nsw <8 x i16> %t9, %a1 ; signed2208  ret <8 x i16> %a102209}2210 2211define <8 x i16> @vec128_i16_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind {2212; SSE-LABEL: vec128_i16_signed_mem_mem:2213; SSE:       # %bb.0:2214; SSE-NEXT:    movdqa (%rdi), %xmm12215; SSE-NEXT:    movdqa (%rsi), %xmm02216; SSE-NEXT:    movdqa %xmm1, %xmm22217; SSE-NEXT:    pcmpgtw %xmm0, %xmm22218; SSE-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm22219; SSE-NEXT:    movdqa %xmm1, %xmm32220; SSE-NEXT:    pminsw %xmm0, %xmm32221; SSE-NEXT:    pmaxsw %xmm1, %xmm02222; SSE-NEXT:    psubw %xmm3, %xmm02223; SSE-NEXT:    psrlw $1, %xmm02224; SSE-NEXT:    pmullw %xmm2, %xmm02225; SSE-NEXT:    paddw %xmm1, %xmm02226; SSE-NEXT:    retq2227;2228; AVX-LABEL: vec128_i16_signed_mem_mem:2229; AVX:       # %bb.0:2230; AVX-NEXT:    vmovdqa (%rdi), %xmm02231; AVX-NEXT:    vmovdqa (%rsi), %xmm12232; AVX-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm22233; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22234; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm32235; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12236; AVX-NEXT:    vpsubw %xmm3, %xmm1, %xmm12237; AVX-NEXT:    vpsrlw $1, %xmm1, %xmm12238; AVX-NEXT:    vpmullw %xmm2, %xmm1, %xmm12239; AVX-NEXT:    vpaddw %xmm0, %xmm1, %xmm02240; AVX-NEXT:    retq2241;2242; XOP-LABEL: vec128_i16_signed_mem_mem:2243; XOP:       # %bb.0:2244; XOP-NEXT:    vmovdqa (%rdi), %xmm02245; XOP-NEXT:    vmovdqa (%rsi), %xmm12246; XOP-NEXT:    vpcomgtw %xmm1, %xmm0, %xmm22247; XOP-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22248; XOP-NEXT:    vpminsw %xmm1, %xmm0, %xmm32249; XOP-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12250; XOP-NEXT:    vpsubw %xmm3, %xmm1, %xmm12251; XOP-NEXT:    vpsrlw $1, %xmm1, %xmm12252; XOP-NEXT:    vpmacsww %xmm0, %xmm2, %xmm1, %xmm02253; XOP-NEXT:    retq2254;2255; AVX512F-LABEL: vec128_i16_signed_mem_mem:2256; AVX512F:       # %bb.0:2257; AVX512F-NEXT:    vmovdqa (%rdi), %xmm02258; AVX512F-NEXT:    vmovdqa (%rsi), %xmm12259; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm22260; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22261; AVX512F-NEXT:    vpminsw %xmm1, %xmm0, %xmm32262; AVX512F-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12263; AVX512F-NEXT:    vpsubw %xmm3, %xmm1, %xmm12264; AVX512F-NEXT:    vpsrlw $1, %xmm1, %xmm12265; AVX512F-NEXT:    vpmullw %xmm2, %xmm1, %xmm12266; AVX512F-NEXT:    vpaddw %xmm0, %xmm1, %xmm02267; AVX512F-NEXT:    retq2268;2269; AVX512VL-FALLBACK-LABEL: vec128_i16_signed_mem_mem:2270; AVX512VL-FALLBACK:       # %bb.0:2271; AVX512VL-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm02272; AVX512VL-FALLBACK-NEXT:    vmovdqa (%rsi), %xmm12273; AVX512VL-FALLBACK-NEXT:    vpminsw %xmm1, %xmm0, %xmm22274; AVX512VL-FALLBACK-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm32275; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm2, %xmm3, %xmm22276; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm2, %xmm22277; AVX512VL-FALLBACK-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm12278; AVX512VL-FALLBACK-NEXT:    vpxor %xmm1, %xmm2, %xmm22279; AVX512VL-FALLBACK-NEXT:    vpsubw %xmm1, %xmm2, %xmm12280; AVX512VL-FALLBACK-NEXT:    vpaddw %xmm0, %xmm1, %xmm02281; AVX512VL-FALLBACK-NEXT:    retq2282;2283; AVX512BW-FALLBACK-LABEL: vec128_i16_signed_mem_mem:2284; AVX512BW-FALLBACK:       # %bb.0:2285; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm02286; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rsi), %xmm12287; AVX512BW-FALLBACK-NEXT:    vpcmpgtw %zmm1, %zmm0, %k12288; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm22289; AVX512BW-FALLBACK-NEXT:    vpbroadcastw {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1]2290; AVX512BW-FALLBACK-NEXT:    vmovdqu16 %zmm2, %zmm3 {%k1}2291; AVX512BW-FALLBACK-NEXT:    vpminsw %xmm1, %xmm0, %xmm22292; AVX512BW-FALLBACK-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12293; AVX512BW-FALLBACK-NEXT:    vpsubw %xmm2, %xmm1, %xmm12294; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm12295; AVX512BW-FALLBACK-NEXT:    vpmullw %xmm3, %xmm1, %xmm12296; AVX512BW-FALLBACK-NEXT:    vpaddw %xmm0, %xmm1, %xmm02297; AVX512BW-FALLBACK-NEXT:    vzeroupper2298; AVX512BW-FALLBACK-NEXT:    retq2299;2300; AVX512VLBW-LABEL: vec128_i16_signed_mem_mem:2301; AVX512VLBW:       # %bb.0:2302; AVX512VLBW-NEXT:    vmovdqa (%rdi), %xmm02303; AVX512VLBW-NEXT:    vmovdqa (%rsi), %xmm12304; AVX512VLBW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k12305; AVX512VLBW-NEXT:    vpminsw %xmm1, %xmm0, %xmm22306; AVX512VLBW-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm12307; AVX512VLBW-NEXT:    vpsubw %xmm2, %xmm1, %xmm12308; AVX512VLBW-NEXT:    vpsrlw $1, %xmm1, %xmm12309; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm22310; AVX512VLBW-NEXT:    vpsubw %xmm1, %xmm2, %xmm1 {%k1}2311; AVX512VLBW-NEXT:    vpaddw %xmm0, %xmm1, %xmm02312; AVX512VLBW-NEXT:    retq2313  %a1 = load <8 x i16>, ptr %a1_addr2314  %a2 = load <8 x i16>, ptr %a2_addr2315  %t3 = icmp sgt <8 x i16> %a1, %a2 ; signed2316  %t4 = select <8 x i1> %t3, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>2317  %t5 = select <8 x i1> %t3, <8 x i16> %a2, <8 x i16> %a12318  %t6 = select <8 x i1> %t3, <8 x i16> %a1, <8 x i16> %a22319  %t7 = sub <8 x i16> %t6, %t52320  %t8 = lshr <8 x i16> %t7, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>2321  %t9 = mul nsw <8 x i16> %t8, %t4 ; signed2322  %a10 = add nsw <8 x i16> %t9, %a1 ; signed2323  ret <8 x i16> %a102324}2325 2326; ---------------------------------------------------------------------------- ;2327; 8-bit width. 128 / 8 = 16 elts.2328; ---------------------------------------------------------------------------- ;2329 2330; Values come from regs2331 2332define <16 x i8> @vec128_i8_signed_reg_reg(<16 x i8> %a1, <16 x i8> %a2) nounwind {2333; SSE2-LABEL: vec128_i8_signed_reg_reg:2334; SSE2:       # %bb.0:2335; SSE2-NEXT:    movdqa %xmm0, %xmm32336; SSE2-NEXT:    pcmpgtb %xmm1, %xmm32337; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2338; SSE2-NEXT:    por %xmm3, %xmm22339; SSE2-NEXT:    movdqa %xmm0, %xmm42340; SSE2-NEXT:    psubb %xmm1, %xmm42341; SSE2-NEXT:    pxor %xmm3, %xmm42342; SSE2-NEXT:    psubb %xmm4, %xmm32343; SSE2-NEXT:    psrlw $1, %xmm32344; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32345; SSE2-NEXT:    movdqa %xmm3, %xmm12346; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2347; SSE2-NEXT:    movdqa %xmm2, %xmm42348; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2349; SSE2-NEXT:    pmullw %xmm1, %xmm42350; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]2351; SSE2-NEXT:    pand %xmm1, %xmm42352; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2353; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2354; SSE2-NEXT:    pmullw %xmm3, %xmm22355; SSE2-NEXT:    pand %xmm1, %xmm22356; SSE2-NEXT:    packuswb %xmm4, %xmm22357; SSE2-NEXT:    paddb %xmm2, %xmm02358; SSE2-NEXT:    retq2359;2360; SSE41-LABEL: vec128_i8_signed_reg_reg:2361; SSE41:       # %bb.0:2362; SSE41-NEXT:    movdqa %xmm0, %xmm22363; SSE41-NEXT:    pcmpgtb %xmm1, %xmm22364; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm22365; SSE41-NEXT:    movdqa %xmm0, %xmm32366; SSE41-NEXT:    pminsb %xmm1, %xmm32367; SSE41-NEXT:    pmaxsb %xmm0, %xmm12368; SSE41-NEXT:    psubb %xmm3, %xmm12369; SSE41-NEXT:    psrlw $1, %xmm12370; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12371; SSE41-NEXT:    movdqa %xmm1, %xmm32372; SSE41-NEXT:    pmullw %xmm2, %xmm32373; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]2374; SSE41-NEXT:    pand %xmm4, %xmm32375; SSE41-NEXT:    pandn %xmm2, %xmm42376; SSE41-NEXT:    pmaddubsw %xmm4, %xmm12377; SSE41-NEXT:    psllw $8, %xmm12378; SSE41-NEXT:    por %xmm1, %xmm32379; SSE41-NEXT:    paddb %xmm3, %xmm02380; SSE41-NEXT:    retq2381;2382; AVX1-LABEL: vec128_i8_signed_reg_reg:2383; AVX1:       # %bb.0:2384; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm22385; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22386; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm32387; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm12388; AVX1-NEXT:    vpsubb %xmm3, %xmm1, %xmm12389; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm12390; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12391; AVX1-NEXT:    vpmullw %xmm2, %xmm1, %xmm32392; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]2393; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm32394; AVX1-NEXT:    vpandn %xmm2, %xmm4, %xmm22395; AVX1-NEXT:    vpmaddubsw %xmm2, %xmm1, %xmm12396; AVX1-NEXT:    vpsllw $8, %xmm1, %xmm12397; AVX1-NEXT:    vpor %xmm1, %xmm3, %xmm12398; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm02399; AVX1-NEXT:    retq2400;2401; AVX2-LABEL: vec128_i8_signed_reg_reg:2402; AVX2:       # %bb.0:2403; AVX2-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm22404; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22405; AVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm32406; AVX2-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm12407; AVX2-NEXT:    vpsubb %xmm3, %xmm1, %xmm12408; AVX2-NEXT:    vpsrlw $1, %xmm1, %xmm12409; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12410; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2411; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero2412; AVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm12413; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm12414; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm22415; AVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm12416; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm02417; AVX2-NEXT:    vzeroupper2418; AVX2-NEXT:    retq2419;2420; XOP-FALLBACK-LABEL: vec128_i8_signed_reg_reg:2421; XOP-FALLBACK:       # %bb.0:2422; XOP-FALLBACK-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm22423; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22424; XOP-FALLBACK-NEXT:    vpminsb %xmm1, %xmm0, %xmm32425; XOP-FALLBACK-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm12426; XOP-FALLBACK-NEXT:    vpsubb %xmm3, %xmm1, %xmm12427; XOP-FALLBACK-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm32428; XOP-FALLBACK-NEXT:    vpshlb %xmm3, %xmm1, %xmm12429; XOP-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm32430; XOP-FALLBACK-NEXT:    vpmaddubsw %xmm3, %xmm1, %xmm32431; XOP-FALLBACK-NEXT:    vpmullw %xmm2, %xmm1, %xmm12432; XOP-FALLBACK-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[2],xmm3[2],xmm1[4],xmm3[4],xmm1[6],xmm3[6],xmm1[8],xmm3[8],xmm1[10],xmm3[10],xmm1[12],xmm3[12],xmm1[14],xmm3[14]2433; XOP-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm02434; XOP-FALLBACK-NEXT:    retq2435;2436; XOPAVX1-LABEL: vec128_i8_signed_reg_reg:2437; XOPAVX1:       # %bb.0:2438; XOPAVX1-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm22439; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22440; XOPAVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm32441; XOPAVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm12442; XOPAVX1-NEXT:    vpsubb %xmm3, %xmm1, %xmm12443; XOPAVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm32444; XOPAVX1-NEXT:    vpshlb %xmm3, %xmm1, %xmm12445; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm32446; XOPAVX1-NEXT:    vpmaddubsw %xmm3, %xmm1, %xmm32447; XOPAVX1-NEXT:    vpmullw %xmm2, %xmm1, %xmm12448; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[2],xmm3[2],xmm1[4],xmm3[4],xmm1[6],xmm3[6],xmm1[8],xmm3[8],xmm1[10],xmm3[10],xmm1[12],xmm3[12],xmm1[14],xmm3[14]2449; XOPAVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm02450; XOPAVX1-NEXT:    retq2451;2452; XOPAVX2-LABEL: vec128_i8_signed_reg_reg:2453; XOPAVX2:       # %bb.0:2454; XOPAVX2-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm22455; XOPAVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22456; XOPAVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm32457; XOPAVX2-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm12458; XOPAVX2-NEXT:    vpsubb %xmm3, %xmm1, %xmm12459; XOPAVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm32460; XOPAVX2-NEXT:    vpshlb %xmm3, %xmm1, %xmm12461; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2462; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero2463; XOPAVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm12464; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm12465; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm22466; XOPAVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm12467; XOPAVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm02468; XOPAVX2-NEXT:    vzeroupper2469; XOPAVX2-NEXT:    retq2470;2471; AVX512F-LABEL: vec128_i8_signed_reg_reg:2472; AVX512F:       # %bb.0:2473; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm22474; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22475; AVX512F-NEXT:    vpminsb %xmm1, %xmm0, %xmm32476; AVX512F-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm12477; AVX512F-NEXT:    vpsubb %xmm3, %xmm1, %xmm12478; AVX512F-NEXT:    vpsrlw $1, %xmm1, %xmm12479; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12480; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2481; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero2482; AVX512F-NEXT:    vpmullw %ymm2, %ymm1, %ymm12483; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero2484; AVX512F-NEXT:    vpmovdb %zmm1, %xmm12485; AVX512F-NEXT:    vpaddb %xmm0, %xmm1, %xmm02486; AVX512F-NEXT:    vzeroupper2487; AVX512F-NEXT:    retq2488;2489; AVX512VL-FALLBACK-LABEL: vec128_i8_signed_reg_reg:2490; AVX512VL-FALLBACK:       # %bb.0:2491; AVX512VL-FALLBACK-NEXT:    vpminsb %xmm1, %xmm0, %xmm22492; AVX512VL-FALLBACK-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm32493; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm2, %xmm3, %xmm22494; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm2, %xmm22495; AVX512VL-FALLBACK-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm12496; AVX512VL-FALLBACK-NEXT:    vpternlogd {{.*#+}} xmm2 = xmm1 ^ (xmm2 & m32bcst)2497; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm1, %xmm2, %xmm12498; AVX512VL-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm02499; AVX512VL-FALLBACK-NEXT:    retq2500;2501; AVX512BW-FALLBACK-LABEL: vec128_i8_signed_reg_reg:2502; AVX512BW-FALLBACK:       # %bb.0:2503; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12504; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02505; AVX512BW-FALLBACK-NEXT:    vpcmpgtb %zmm1, %zmm0, %k12506; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm22507; AVX512BW-FALLBACK-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2508; AVX512BW-FALLBACK-NEXT:    vmovdqu8 %zmm2, %zmm3 {%k1}2509; AVX512BW-FALLBACK-NEXT:    vpminsb %xmm1, %xmm0, %xmm22510; AVX512BW-FALLBACK-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm12511; AVX512BW-FALLBACK-NEXT:    vpsubb %xmm2, %xmm1, %xmm12512; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm12513; AVX512BW-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12514; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2515; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero,xmm3[8],zero,xmm3[9],zero,xmm3[10],zero,xmm3[11],zero,xmm3[12],zero,xmm3[13],zero,xmm3[14],zero,xmm3[15],zero2516; AVX512BW-FALLBACK-NEXT:    vpmullw %ymm2, %ymm1, %ymm12517; AVX512BW-FALLBACK-NEXT:    vpmovwb %zmm1, %ymm12518; AVX512BW-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm02519; AVX512BW-FALLBACK-NEXT:    vzeroupper2520; AVX512BW-FALLBACK-NEXT:    retq2521;2522; AVX512VLBW-LABEL: vec128_i8_signed_reg_reg:2523; AVX512VLBW:       # %bb.0:2524; AVX512VLBW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k12525; AVX512VLBW-NEXT:    vpminsb %xmm1, %xmm0, %xmm22526; AVX512VLBW-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm12527; AVX512VLBW-NEXT:    vpsubb %xmm2, %xmm1, %xmm12528; AVX512VLBW-NEXT:    vpsrlw $1, %xmm1, %xmm12529; AVX512VLBW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm12530; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm22531; AVX512VLBW-NEXT:    vpsubb %xmm1, %xmm2, %xmm1 {%k1}2532; AVX512VLBW-NEXT:    vpaddb %xmm0, %xmm1, %xmm02533; AVX512VLBW-NEXT:    retq2534  %t3 = icmp sgt <16 x i8> %a1, %a2 ; signed2535  %t4 = select <16 x i1> %t3, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>2536  %t5 = select <16 x i1> %t3, <16 x i8> %a2, <16 x i8> %a12537  %t6 = select <16 x i1> %t3, <16 x i8> %a1, <16 x i8> %a22538  %t7 = sub <16 x i8> %t6, %t52539  %t8 = lshr <16 x i8> %t7, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>2540  %t9 = mul nsw <16 x i8> %t8, %t4 ; signed2541  %a10 = add nsw <16 x i8> %t9, %a1 ; signed2542  ret <16 x i8> %a102543}2544 2545define <16 x i8> @vec128_i8_unsigned_reg_reg(<16 x i8> %a1, <16 x i8> %a2) nounwind {2546; SSE2-LABEL: vec128_i8_unsigned_reg_reg:2547; SSE2:       # %bb.0:2548; SSE2-NEXT:    movdqa %xmm0, %xmm32549; SSE2-NEXT:    pminub %xmm1, %xmm32550; SSE2-NEXT:    movdqa %xmm0, %xmm42551; SSE2-NEXT:    pcmpeqb %xmm3, %xmm42552; SSE2-NEXT:    pcmpeqd %xmm2, %xmm22553; SSE2-NEXT:    pxor %xmm4, %xmm22554; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm22555; SSE2-NEXT:    pmaxub %xmm0, %xmm12556; SSE2-NEXT:    psubb %xmm3, %xmm12557; SSE2-NEXT:    psrlw $1, %xmm12558; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12559; SSE2-NEXT:    movdqa %xmm1, %xmm32560; SSE2-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2561; SSE2-NEXT:    movdqa %xmm2, %xmm42562; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2563; SSE2-NEXT:    pmullw %xmm3, %xmm42564; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]2565; SSE2-NEXT:    pand %xmm3, %xmm42566; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2567; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2568; SSE2-NEXT:    pmullw %xmm1, %xmm22569; SSE2-NEXT:    pand %xmm3, %xmm22570; SSE2-NEXT:    packuswb %xmm4, %xmm22571; SSE2-NEXT:    paddb %xmm2, %xmm02572; SSE2-NEXT:    retq2573;2574; SSE41-LABEL: vec128_i8_unsigned_reg_reg:2575; SSE41:       # %bb.0:2576; SSE41-NEXT:    movdqa %xmm0, %xmm22577; SSE41-NEXT:    pminub %xmm1, %xmm22578; SSE41-NEXT:    movdqa %xmm0, %xmm32579; SSE41-NEXT:    pcmpeqb %xmm2, %xmm32580; SSE41-NEXT:    pcmpeqd %xmm4, %xmm42581; SSE41-NEXT:    pxor %xmm3, %xmm42582; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm42583; SSE41-NEXT:    pmaxub %xmm0, %xmm12584; SSE41-NEXT:    psubb %xmm2, %xmm12585; SSE41-NEXT:    psrlw $1, %xmm12586; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12587; SSE41-NEXT:    movdqa %xmm1, %xmm22588; SSE41-NEXT:    pmullw %xmm4, %xmm22589; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm3 = [255,255,255,255,255,255,255,255]2590; SSE41-NEXT:    pand %xmm3, %xmm22591; SSE41-NEXT:    pandn %xmm4, %xmm32592; SSE41-NEXT:    pmaddubsw %xmm3, %xmm12593; SSE41-NEXT:    psllw $8, %xmm12594; SSE41-NEXT:    por %xmm1, %xmm22595; SSE41-NEXT:    paddb %xmm2, %xmm02596; SSE41-NEXT:    retq2597;2598; AVX1-LABEL: vec128_i8_unsigned_reg_reg:2599; AVX1:       # %bb.0:2600; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm22601; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm32602; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm42603; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm32604; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm32605; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm12606; AVX1-NEXT:    vpsubb %xmm2, %xmm1, %xmm12607; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm12608; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12609; AVX1-NEXT:    vpmullw %xmm3, %xmm1, %xmm22610; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]2611; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm22612; AVX1-NEXT:    vpandn %xmm3, %xmm4, %xmm32613; AVX1-NEXT:    vpmaddubsw %xmm3, %xmm1, %xmm12614; AVX1-NEXT:    vpsllw $8, %xmm1, %xmm12615; AVX1-NEXT:    vpor %xmm1, %xmm2, %xmm12616; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm02617; AVX1-NEXT:    retq2618;2619; AVX2-LABEL: vec128_i8_unsigned_reg_reg:2620; AVX2:       # %bb.0:2621; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm22622; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm32623; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm42624; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm32625; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm32626; AVX2-NEXT:    vpmaxub %xmm1, %xmm0, %xmm12627; AVX2-NEXT:    vpsubb %xmm2, %xmm1, %xmm12628; AVX2-NEXT:    vpsrlw $1, %xmm1, %xmm12629; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12630; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2631; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero,xmm3[8],zero,xmm3[9],zero,xmm3[10],zero,xmm3[11],zero,xmm3[12],zero,xmm3[13],zero,xmm3[14],zero,xmm3[15],zero2632; AVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm12633; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm12634; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm22635; AVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm12636; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm02637; AVX2-NEXT:    vzeroupper2638; AVX2-NEXT:    retq2639;2640; XOP-FALLBACK-LABEL: vec128_i8_unsigned_reg_reg:2641; XOP-FALLBACK:       # %bb.0:2642; XOP-FALLBACK-NEXT:    vpcomgtub %xmm1, %xmm0, %xmm22643; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22644; XOP-FALLBACK-NEXT:    vpminub %xmm1, %xmm0, %xmm32645; XOP-FALLBACK-NEXT:    vpmaxub %xmm1, %xmm0, %xmm12646; XOP-FALLBACK-NEXT:    vpsubb %xmm3, %xmm1, %xmm12647; XOP-FALLBACK-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm32648; XOP-FALLBACK-NEXT:    vpshlb %xmm3, %xmm1, %xmm12649; XOP-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm32650; XOP-FALLBACK-NEXT:    vpmaddubsw %xmm3, %xmm1, %xmm32651; XOP-FALLBACK-NEXT:    vpmullw %xmm2, %xmm1, %xmm12652; XOP-FALLBACK-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[2],xmm3[2],xmm1[4],xmm3[4],xmm1[6],xmm3[6],xmm1[8],xmm3[8],xmm1[10],xmm3[10],xmm1[12],xmm3[12],xmm1[14],xmm3[14]2653; XOP-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm02654; XOP-FALLBACK-NEXT:    retq2655;2656; XOPAVX1-LABEL: vec128_i8_unsigned_reg_reg:2657; XOPAVX1:       # %bb.0:2658; XOPAVX1-NEXT:    vpcomgtub %xmm1, %xmm0, %xmm22659; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22660; XOPAVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm32661; XOPAVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm12662; XOPAVX1-NEXT:    vpsubb %xmm3, %xmm1, %xmm12663; XOPAVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm32664; XOPAVX1-NEXT:    vpshlb %xmm3, %xmm1, %xmm12665; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm32666; XOPAVX1-NEXT:    vpmaddubsw %xmm3, %xmm1, %xmm32667; XOPAVX1-NEXT:    vpmullw %xmm2, %xmm1, %xmm12668; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[2],xmm3[2],xmm1[4],xmm3[4],xmm1[6],xmm3[6],xmm1[8],xmm3[8],xmm1[10],xmm3[10],xmm1[12],xmm3[12],xmm1[14],xmm3[14]2669; XOPAVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm02670; XOPAVX1-NEXT:    retq2671;2672; XOPAVX2-LABEL: vec128_i8_unsigned_reg_reg:2673; XOPAVX2:       # %bb.0:2674; XOPAVX2-NEXT:    vpcomgtub %xmm1, %xmm0, %xmm22675; XOPAVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22676; XOPAVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm32677; XOPAVX2-NEXT:    vpmaxub %xmm1, %xmm0, %xmm12678; XOPAVX2-NEXT:    vpsubb %xmm3, %xmm1, %xmm12679; XOPAVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm32680; XOPAVX2-NEXT:    vpshlb %xmm3, %xmm1, %xmm12681; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2682; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero2683; XOPAVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm12684; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm12685; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm22686; XOPAVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm12687; XOPAVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm02688; XOPAVX2-NEXT:    vzeroupper2689; XOPAVX2-NEXT:    retq2690;2691; AVX512F-LABEL: vec128_i8_unsigned_reg_reg:2692; AVX512F:       # %bb.0:2693; AVX512F-NEXT:    vpminub %xmm1, %xmm0, %xmm22694; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm32695; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm3 = ~zmm32696; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm32697; AVX512F-NEXT:    vpmaxub %xmm1, %xmm0, %xmm12698; AVX512F-NEXT:    vpsubb %xmm2, %xmm1, %xmm12699; AVX512F-NEXT:    vpsrlw $1, %xmm1, %xmm12700; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12701; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2702; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero,xmm3[8],zero,xmm3[9],zero,xmm3[10],zero,xmm3[11],zero,xmm3[12],zero,xmm3[13],zero,xmm3[14],zero,xmm3[15],zero2703; AVX512F-NEXT:    vpmullw %ymm2, %ymm1, %ymm12704; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero2705; AVX512F-NEXT:    vpmovdb %zmm1, %xmm12706; AVX512F-NEXT:    vpaddb %xmm0, %xmm1, %xmm02707; AVX512F-NEXT:    vzeroupper2708; AVX512F-NEXT:    retq2709;2710; AVX512VL-FALLBACK-LABEL: vec128_i8_unsigned_reg_reg:2711; AVX512VL-FALLBACK:       # %bb.0:2712; AVX512VL-FALLBACK-NEXT:    vpminub %xmm1, %xmm0, %xmm22713; AVX512VL-FALLBACK-NEXT:    vpmaxub %xmm1, %xmm0, %xmm12714; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm2, %xmm1, %xmm12715; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm12716; AVX512VL-FALLBACK-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm22717; AVX512VL-FALLBACK-NEXT:    vpternlogq {{.*#+}} xmm2 = ~xmm22718; AVX512VL-FALLBACK-NEXT:    vpternlogd {{.*#+}} xmm1 = xmm2 ^ (xmm1 & m32bcst)2719; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm2, %xmm1, %xmm12720; AVX512VL-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm02721; AVX512VL-FALLBACK-NEXT:    retq2722;2723; AVX512BW-FALLBACK-LABEL: vec128_i8_unsigned_reg_reg:2724; AVX512BW-FALLBACK:       # %bb.0:2725; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12726; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02727; AVX512BW-FALLBACK-NEXT:    vpcmpnleub %zmm1, %zmm0, %k12728; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm22729; AVX512BW-FALLBACK-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2730; AVX512BW-FALLBACK-NEXT:    vmovdqu8 %zmm2, %zmm3 {%k1}2731; AVX512BW-FALLBACK-NEXT:    vpminub %xmm1, %xmm0, %xmm22732; AVX512BW-FALLBACK-NEXT:    vpmaxub %xmm1, %xmm0, %xmm12733; AVX512BW-FALLBACK-NEXT:    vpsubb %xmm2, %xmm1, %xmm12734; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm12735; AVX512BW-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12736; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero2737; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero,xmm3[8],zero,xmm3[9],zero,xmm3[10],zero,xmm3[11],zero,xmm3[12],zero,xmm3[13],zero,xmm3[14],zero,xmm3[15],zero2738; AVX512BW-FALLBACK-NEXT:    vpmullw %ymm2, %ymm1, %ymm12739; AVX512BW-FALLBACK-NEXT:    vpmovwb %zmm1, %ymm12740; AVX512BW-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm02741; AVX512BW-FALLBACK-NEXT:    vzeroupper2742; AVX512BW-FALLBACK-NEXT:    retq2743;2744; AVX512VLBW-LABEL: vec128_i8_unsigned_reg_reg:2745; AVX512VLBW:       # %bb.0:2746; AVX512VLBW-NEXT:    vpcmpnleub %xmm1, %xmm0, %k12747; AVX512VLBW-NEXT:    vpminub %xmm1, %xmm0, %xmm22748; AVX512VLBW-NEXT:    vpmaxub %xmm1, %xmm0, %xmm12749; AVX512VLBW-NEXT:    vpsubb %xmm2, %xmm1, %xmm12750; AVX512VLBW-NEXT:    vpsrlw $1, %xmm1, %xmm12751; AVX512VLBW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm12752; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm22753; AVX512VLBW-NEXT:    vpsubb %xmm1, %xmm2, %xmm1 {%k1}2754; AVX512VLBW-NEXT:    vpaddb %xmm0, %xmm1, %xmm02755; AVX512VLBW-NEXT:    retq2756  %t3 = icmp ugt <16 x i8> %a1, %a22757  %t4 = select <16 x i1> %t3, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>2758  %t5 = select <16 x i1> %t3, <16 x i8> %a2, <16 x i8> %a12759  %t6 = select <16 x i1> %t3, <16 x i8> %a1, <16 x i8> %a22760  %t7 = sub <16 x i8> %t6, %t52761  %t8 = lshr <16 x i8> %t7, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>2762  %t9 = mul <16 x i8> %t8, %t42763  %a10 = add <16 x i8> %t9, %a12764  ret <16 x i8> %a102765}2766 2767; Values are loaded. Only check signed case.2768 2769define <16 x i8> @vec128_i8_signed_mem_reg(ptr %a1_addr, <16 x i8> %a2) nounwind {2770; SSE2-LABEL: vec128_i8_signed_mem_reg:2771; SSE2:       # %bb.0:2772; SSE2-NEXT:    movdqa %xmm0, %xmm12773; SSE2-NEXT:    movdqa (%rdi), %xmm22774; SSE2-NEXT:    movdqa %xmm2, %xmm32775; SSE2-NEXT:    pcmpgtb %xmm0, %xmm32776; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2777; SSE2-NEXT:    por %xmm3, %xmm02778; SSE2-NEXT:    movdqa %xmm2, %xmm42779; SSE2-NEXT:    psubb %xmm1, %xmm42780; SSE2-NEXT:    pxor %xmm3, %xmm42781; SSE2-NEXT:    psubb %xmm4, %xmm32782; SSE2-NEXT:    psrlw $1, %xmm32783; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32784; SSE2-NEXT:    movdqa %xmm3, %xmm12785; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2786; SSE2-NEXT:    movdqa %xmm0, %xmm42787; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]2788; SSE2-NEXT:    pmullw %xmm1, %xmm42789; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]2790; SSE2-NEXT:    pand %xmm1, %xmm42791; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2792; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2793; SSE2-NEXT:    pmullw %xmm3, %xmm02794; SSE2-NEXT:    pand %xmm1, %xmm02795; SSE2-NEXT:    packuswb %xmm4, %xmm02796; SSE2-NEXT:    paddb %xmm2, %xmm02797; SSE2-NEXT:    retq2798;2799; SSE41-LABEL: vec128_i8_signed_mem_reg:2800; SSE41:       # %bb.0:2801; SSE41-NEXT:    movdqa (%rdi), %xmm12802; SSE41-NEXT:    movdqa %xmm1, %xmm22803; SSE41-NEXT:    pcmpgtb %xmm0, %xmm22804; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm22805; SSE41-NEXT:    movdqa %xmm1, %xmm32806; SSE41-NEXT:    pminsb %xmm0, %xmm32807; SSE41-NEXT:    pmaxsb %xmm1, %xmm02808; SSE41-NEXT:    psubb %xmm3, %xmm02809; SSE41-NEXT:    psrlw $1, %xmm02810; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02811; SSE41-NEXT:    movdqa %xmm0, %xmm32812; SSE41-NEXT:    pmullw %xmm2, %xmm32813; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]2814; SSE41-NEXT:    pand %xmm4, %xmm32815; SSE41-NEXT:    pandn %xmm2, %xmm42816; SSE41-NEXT:    pmaddubsw %xmm4, %xmm02817; SSE41-NEXT:    psllw $8, %xmm02818; SSE41-NEXT:    por %xmm3, %xmm02819; SSE41-NEXT:    paddb %xmm1, %xmm02820; SSE41-NEXT:    retq2821;2822; AVX1-LABEL: vec128_i8_signed_mem_reg:2823; AVX1:       # %bb.0:2824; AVX1-NEXT:    vmovdqa (%rdi), %xmm12825; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm22826; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22827; AVX1-NEXT:    vpminsb %xmm0, %xmm1, %xmm32828; AVX1-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm02829; AVX1-NEXT:    vpsubb %xmm3, %xmm0, %xmm02830; AVX1-NEXT:    vpsrlw $1, %xmm0, %xmm02831; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02832; AVX1-NEXT:    vpmullw %xmm2, %xmm0, %xmm32833; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]2834; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm32835; AVX1-NEXT:    vpandn %xmm2, %xmm4, %xmm22836; AVX1-NEXT:    vpmaddubsw %xmm2, %xmm0, %xmm02837; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm02838; AVX1-NEXT:    vpor %xmm0, %xmm3, %xmm02839; AVX1-NEXT:    vpaddb %xmm1, %xmm0, %xmm02840; AVX1-NEXT:    retq2841;2842; AVX2-LABEL: vec128_i8_signed_mem_reg:2843; AVX2:       # %bb.0:2844; AVX2-NEXT:    vmovdqa (%rdi), %xmm12845; AVX2-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm22846; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22847; AVX2-NEXT:    vpminsb %xmm0, %xmm1, %xmm32848; AVX2-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm02849; AVX2-NEXT:    vpsubb %xmm3, %xmm0, %xmm02850; AVX2-NEXT:    vpsrlw $1, %xmm0, %xmm02851; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02852; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero2853; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero2854; AVX2-NEXT:    vpmullw %ymm2, %ymm0, %ymm02855; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02856; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm22857; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm02858; AVX2-NEXT:    vpaddb %xmm1, %xmm0, %xmm02859; AVX2-NEXT:    vzeroupper2860; AVX2-NEXT:    retq2861;2862; XOP-FALLBACK-LABEL: vec128_i8_signed_mem_reg:2863; XOP-FALLBACK:       # %bb.0:2864; XOP-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm12865; XOP-FALLBACK-NEXT:    vpcomgtb %xmm0, %xmm1, %xmm22866; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22867; XOP-FALLBACK-NEXT:    vpminsb %xmm0, %xmm1, %xmm32868; XOP-FALLBACK-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm02869; XOP-FALLBACK-NEXT:    vpsubb %xmm3, %xmm0, %xmm02870; XOP-FALLBACK-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm32871; XOP-FALLBACK-NEXT:    vpshlb %xmm3, %xmm0, %xmm02872; XOP-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm32873; XOP-FALLBACK-NEXT:    vpmaddubsw %xmm3, %xmm0, %xmm32874; XOP-FALLBACK-NEXT:    vpmullw %xmm2, %xmm0, %xmm02875; XOP-FALLBACK-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[2],xmm3[2],xmm0[4],xmm3[4],xmm0[6],xmm3[6],xmm0[8],xmm3[8],xmm0[10],xmm3[10],xmm0[12],xmm3[12],xmm0[14],xmm3[14]2876; XOP-FALLBACK-NEXT:    vpaddb %xmm1, %xmm0, %xmm02877; XOP-FALLBACK-NEXT:    retq2878;2879; XOPAVX1-LABEL: vec128_i8_signed_mem_reg:2880; XOPAVX1:       # %bb.0:2881; XOPAVX1-NEXT:    vmovdqa (%rdi), %xmm12882; XOPAVX1-NEXT:    vpcomgtb %xmm0, %xmm1, %xmm22883; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22884; XOPAVX1-NEXT:    vpminsb %xmm0, %xmm1, %xmm32885; XOPAVX1-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm02886; XOPAVX1-NEXT:    vpsubb %xmm3, %xmm0, %xmm02887; XOPAVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm32888; XOPAVX1-NEXT:    vpshlb %xmm3, %xmm0, %xmm02889; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm32890; XOPAVX1-NEXT:    vpmaddubsw %xmm3, %xmm0, %xmm32891; XOPAVX1-NEXT:    vpmullw %xmm2, %xmm0, %xmm02892; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[2],xmm3[2],xmm0[4],xmm3[4],xmm0[6],xmm3[6],xmm0[8],xmm3[8],xmm0[10],xmm3[10],xmm0[12],xmm3[12],xmm0[14],xmm3[14]2893; XOPAVX1-NEXT:    vpaddb %xmm1, %xmm0, %xmm02894; XOPAVX1-NEXT:    retq2895;2896; XOPAVX2-LABEL: vec128_i8_signed_mem_reg:2897; XOPAVX2:       # %bb.0:2898; XOPAVX2-NEXT:    vmovdqa (%rdi), %xmm12899; XOPAVX2-NEXT:    vpcomgtb %xmm0, %xmm1, %xmm22900; XOPAVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22901; XOPAVX2-NEXT:    vpminsb %xmm0, %xmm1, %xmm32902; XOPAVX2-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm02903; XOPAVX2-NEXT:    vpsubb %xmm3, %xmm0, %xmm02904; XOPAVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm32905; XOPAVX2-NEXT:    vpshlb %xmm3, %xmm0, %xmm02906; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero2907; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero2908; XOPAVX2-NEXT:    vpmullw %ymm2, %ymm0, %ymm02909; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02910; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm22911; XOPAVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm02912; XOPAVX2-NEXT:    vpaddb %xmm1, %xmm0, %xmm02913; XOPAVX2-NEXT:    vzeroupper2914; XOPAVX2-NEXT:    retq2915;2916; AVX512F-LABEL: vec128_i8_signed_mem_reg:2917; AVX512F:       # %bb.0:2918; AVX512F-NEXT:    vmovdqa (%rdi), %xmm12919; AVX512F-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm22920; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm22921; AVX512F-NEXT:    vpminsb %xmm0, %xmm1, %xmm32922; AVX512F-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm02923; AVX512F-NEXT:    vpsubb %xmm3, %xmm0, %xmm02924; AVX512F-NEXT:    vpsrlw $1, %xmm0, %xmm02925; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02926; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero2927; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero2928; AVX512F-NEXT:    vpmullw %ymm2, %ymm0, %ymm02929; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero2930; AVX512F-NEXT:    vpmovdb %zmm0, %xmm02931; AVX512F-NEXT:    vpaddb %xmm1, %xmm0, %xmm02932; AVX512F-NEXT:    vzeroupper2933; AVX512F-NEXT:    retq2934;2935; AVX512VL-FALLBACK-LABEL: vec128_i8_signed_mem_reg:2936; AVX512VL-FALLBACK:       # %bb.0:2937; AVX512VL-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm12938; AVX512VL-FALLBACK-NEXT:    vpminsb %xmm0, %xmm1, %xmm22939; AVX512VL-FALLBACK-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm32940; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm2, %xmm3, %xmm22941; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm2, %xmm22942; AVX512VL-FALLBACK-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm02943; AVX512VL-FALLBACK-NEXT:    vpternlogd {{.*#+}} xmm2 = xmm0 ^ (xmm2 & m32bcst)2944; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm0, %xmm2, %xmm02945; AVX512VL-FALLBACK-NEXT:    vpaddb %xmm1, %xmm0, %xmm02946; AVX512VL-FALLBACK-NEXT:    retq2947;2948; AVX512BW-FALLBACK-LABEL: vec128_i8_signed_mem_reg:2949; AVX512BW-FALLBACK:       # %bb.0:2950; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02951; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm12952; AVX512BW-FALLBACK-NEXT:    vpcmpgtb %zmm0, %zmm1, %k12953; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm22954; AVX512BW-FALLBACK-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2955; AVX512BW-FALLBACK-NEXT:    vmovdqu8 %zmm2, %zmm3 {%k1}2956; AVX512BW-FALLBACK-NEXT:    vpminsb %xmm0, %xmm1, %xmm22957; AVX512BW-FALLBACK-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm02958; AVX512BW-FALLBACK-NEXT:    vpsubb %xmm2, %xmm0, %xmm02959; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm0, %xmm02960; AVX512BW-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02961; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero2962; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero,xmm3[8],zero,xmm3[9],zero,xmm3[10],zero,xmm3[11],zero,xmm3[12],zero,xmm3[13],zero,xmm3[14],zero,xmm3[15],zero2963; AVX512BW-FALLBACK-NEXT:    vpmullw %ymm2, %ymm0, %ymm02964; AVX512BW-FALLBACK-NEXT:    vpmovwb %zmm0, %ymm02965; AVX512BW-FALLBACK-NEXT:    vpaddb %xmm1, %xmm0, %xmm02966; AVX512BW-FALLBACK-NEXT:    vzeroupper2967; AVX512BW-FALLBACK-NEXT:    retq2968;2969; AVX512VLBW-LABEL: vec128_i8_signed_mem_reg:2970; AVX512VLBW:       # %bb.0:2971; AVX512VLBW-NEXT:    vmovdqa (%rdi), %xmm12972; AVX512VLBW-NEXT:    vpcmpgtb %xmm0, %xmm1, %k12973; AVX512VLBW-NEXT:    vpminsb %xmm0, %xmm1, %xmm22974; AVX512VLBW-NEXT:    vpmaxsb %xmm0, %xmm1, %xmm02975; AVX512VLBW-NEXT:    vpsubb %xmm2, %xmm0, %xmm02976; AVX512VLBW-NEXT:    vpsrlw $1, %xmm0, %xmm02977; AVX512VLBW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm02978; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm22979; AVX512VLBW-NEXT:    vpsubb %xmm0, %xmm2, %xmm0 {%k1}2980; AVX512VLBW-NEXT:    vpaddb %xmm1, %xmm0, %xmm02981; AVX512VLBW-NEXT:    retq2982  %a1 = load <16 x i8>, ptr %a1_addr2983  %t3 = icmp sgt <16 x i8> %a1, %a2 ; signed2984  %t4 = select <16 x i1> %t3, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>2985  %t5 = select <16 x i1> %t3, <16 x i8> %a2, <16 x i8> %a12986  %t6 = select <16 x i1> %t3, <16 x i8> %a1, <16 x i8> %a22987  %t7 = sub <16 x i8> %t6, %t52988  %t8 = lshr <16 x i8> %t7, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>2989  %t9 = mul nsw <16 x i8> %t8, %t4 ; signed2990  %a10 = add nsw <16 x i8> %t9, %a1 ; signed2991  ret <16 x i8> %a102992}2993 2994define <16 x i8> @vec128_i8_signed_reg_mem(<16 x i8> %a1, ptr %a2_addr) nounwind {2995; SSE2-LABEL: vec128_i8_signed_reg_mem:2996; SSE2:       # %bb.0:2997; SSE2-NEXT:    movdqa (%rdi), %xmm22998; SSE2-NEXT:    movdqa %xmm0, %xmm32999; SSE2-NEXT:    pcmpgtb %xmm2, %xmm33000; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]3001; SSE2-NEXT:    por %xmm3, %xmm13002; SSE2-NEXT:    movdqa %xmm0, %xmm43003; SSE2-NEXT:    psubb %xmm2, %xmm43004; SSE2-NEXT:    pxor %xmm3, %xmm43005; SSE2-NEXT:    psubb %xmm4, %xmm33006; SSE2-NEXT:    psrlw $1, %xmm33007; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm33008; SSE2-NEXT:    movdqa %xmm3, %xmm23009; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]3010; SSE2-NEXT:    movdqa %xmm1, %xmm43011; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]3012; SSE2-NEXT:    pmullw %xmm2, %xmm43013; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]3014; SSE2-NEXT:    pand %xmm2, %xmm43015; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]3016; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]3017; SSE2-NEXT:    pmullw %xmm3, %xmm13018; SSE2-NEXT:    pand %xmm2, %xmm13019; SSE2-NEXT:    packuswb %xmm4, %xmm13020; SSE2-NEXT:    paddb %xmm1, %xmm03021; SSE2-NEXT:    retq3022;3023; SSE41-LABEL: vec128_i8_signed_reg_mem:3024; SSE41:       # %bb.0:3025; SSE41-NEXT:    movdqa (%rdi), %xmm13026; SSE41-NEXT:    movdqa %xmm0, %xmm23027; SSE41-NEXT:    pcmpgtb %xmm1, %xmm23028; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm23029; SSE41-NEXT:    movdqa %xmm0, %xmm33030; SSE41-NEXT:    pminsb %xmm1, %xmm33031; SSE41-NEXT:    pmaxsb %xmm0, %xmm13032; SSE41-NEXT:    psubb %xmm3, %xmm13033; SSE41-NEXT:    psrlw $1, %xmm13034; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13035; SSE41-NEXT:    movdqa %xmm1, %xmm33036; SSE41-NEXT:    pmullw %xmm2, %xmm33037; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]3038; SSE41-NEXT:    pand %xmm4, %xmm33039; SSE41-NEXT:    pandn %xmm2, %xmm43040; SSE41-NEXT:    pmaddubsw %xmm4, %xmm13041; SSE41-NEXT:    psllw $8, %xmm13042; SSE41-NEXT:    por %xmm3, %xmm13043; SSE41-NEXT:    paddb %xmm1, %xmm03044; SSE41-NEXT:    retq3045;3046; AVX1-LABEL: vec128_i8_signed_reg_mem:3047; AVX1:       # %bb.0:3048; AVX1-NEXT:    vmovdqa (%rdi), %xmm13049; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm23050; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23051; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm33052; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13053; AVX1-NEXT:    vpsubb %xmm3, %xmm1, %xmm13054; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm13055; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13056; AVX1-NEXT:    vpmullw %xmm2, %xmm1, %xmm33057; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]3058; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm33059; AVX1-NEXT:    vpandn %xmm2, %xmm4, %xmm23060; AVX1-NEXT:    vpmaddubsw %xmm2, %xmm1, %xmm13061; AVX1-NEXT:    vpsllw $8, %xmm1, %xmm13062; AVX1-NEXT:    vpor %xmm1, %xmm3, %xmm13063; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm03064; AVX1-NEXT:    retq3065;3066; AVX2-LABEL: vec128_i8_signed_reg_mem:3067; AVX2:       # %bb.0:3068; AVX2-NEXT:    vmovdqa (%rdi), %xmm13069; AVX2-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm23070; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23071; AVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm33072; AVX2-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13073; AVX2-NEXT:    vpsubb %xmm3, %xmm1, %xmm13074; AVX2-NEXT:    vpsrlw $1, %xmm1, %xmm13075; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13076; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero3077; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero3078; AVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm13079; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm13080; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm23081; AVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm13082; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm03083; AVX2-NEXT:    vzeroupper3084; AVX2-NEXT:    retq3085;3086; XOP-FALLBACK-LABEL: vec128_i8_signed_reg_mem:3087; XOP-FALLBACK:       # %bb.0:3088; XOP-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm13089; XOP-FALLBACK-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm23090; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23091; XOP-FALLBACK-NEXT:    vpminsb %xmm1, %xmm0, %xmm33092; XOP-FALLBACK-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13093; XOP-FALLBACK-NEXT:    vpsubb %xmm3, %xmm1, %xmm13094; XOP-FALLBACK-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm33095; XOP-FALLBACK-NEXT:    vpshlb %xmm3, %xmm1, %xmm13096; XOP-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm33097; XOP-FALLBACK-NEXT:    vpmaddubsw %xmm3, %xmm1, %xmm33098; XOP-FALLBACK-NEXT:    vpmullw %xmm2, %xmm1, %xmm13099; XOP-FALLBACK-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[2],xmm3[2],xmm1[4],xmm3[4],xmm1[6],xmm3[6],xmm1[8],xmm3[8],xmm1[10],xmm3[10],xmm1[12],xmm3[12],xmm1[14],xmm3[14]3100; XOP-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm03101; XOP-FALLBACK-NEXT:    retq3102;3103; XOPAVX1-LABEL: vec128_i8_signed_reg_mem:3104; XOPAVX1:       # %bb.0:3105; XOPAVX1-NEXT:    vmovdqa (%rdi), %xmm13106; XOPAVX1-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm23107; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23108; XOPAVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm33109; XOPAVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13110; XOPAVX1-NEXT:    vpsubb %xmm3, %xmm1, %xmm13111; XOPAVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm33112; XOPAVX1-NEXT:    vpshlb %xmm3, %xmm1, %xmm13113; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm33114; XOPAVX1-NEXT:    vpmaddubsw %xmm3, %xmm1, %xmm33115; XOPAVX1-NEXT:    vpmullw %xmm2, %xmm1, %xmm13116; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[2],xmm3[2],xmm1[4],xmm3[4],xmm1[6],xmm3[6],xmm1[8],xmm3[8],xmm1[10],xmm3[10],xmm1[12],xmm3[12],xmm1[14],xmm3[14]3117; XOPAVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm03118; XOPAVX1-NEXT:    retq3119;3120; XOPAVX2-LABEL: vec128_i8_signed_reg_mem:3121; XOPAVX2:       # %bb.0:3122; XOPAVX2-NEXT:    vmovdqa (%rdi), %xmm13123; XOPAVX2-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm23124; XOPAVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23125; XOPAVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm33126; XOPAVX2-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13127; XOPAVX2-NEXT:    vpsubb %xmm3, %xmm1, %xmm13128; XOPAVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm33129; XOPAVX2-NEXT:    vpshlb %xmm3, %xmm1, %xmm13130; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero3131; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero3132; XOPAVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm13133; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm13134; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm23135; XOPAVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm13136; XOPAVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm03137; XOPAVX2-NEXT:    vzeroupper3138; XOPAVX2-NEXT:    retq3139;3140; AVX512F-LABEL: vec128_i8_signed_reg_mem:3141; AVX512F:       # %bb.0:3142; AVX512F-NEXT:    vmovdqa (%rdi), %xmm13143; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm23144; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23145; AVX512F-NEXT:    vpminsb %xmm1, %xmm0, %xmm33146; AVX512F-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13147; AVX512F-NEXT:    vpsubb %xmm3, %xmm1, %xmm13148; AVX512F-NEXT:    vpsrlw $1, %xmm1, %xmm13149; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13150; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero3151; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero3152; AVX512F-NEXT:    vpmullw %ymm2, %ymm1, %ymm13153; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero3154; AVX512F-NEXT:    vpmovdb %zmm1, %xmm13155; AVX512F-NEXT:    vpaddb %xmm0, %xmm1, %xmm03156; AVX512F-NEXT:    vzeroupper3157; AVX512F-NEXT:    retq3158;3159; AVX512VL-FALLBACK-LABEL: vec128_i8_signed_reg_mem:3160; AVX512VL-FALLBACK:       # %bb.0:3161; AVX512VL-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm13162; AVX512VL-FALLBACK-NEXT:    vpminsb %xmm1, %xmm0, %xmm23163; AVX512VL-FALLBACK-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm33164; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm2, %xmm3, %xmm23165; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm2, %xmm23166; AVX512VL-FALLBACK-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm13167; AVX512VL-FALLBACK-NEXT:    vpternlogd {{.*#+}} xmm2 = xmm1 ^ (xmm2 & m32bcst)3168; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm1, %xmm2, %xmm13169; AVX512VL-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm03170; AVX512VL-FALLBACK-NEXT:    retq3171;3172; AVX512BW-FALLBACK-LABEL: vec128_i8_signed_reg_mem:3173; AVX512BW-FALLBACK:       # %bb.0:3174; AVX512BW-FALLBACK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm03175; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm13176; AVX512BW-FALLBACK-NEXT:    vpcmpgtb %zmm1, %zmm0, %k13177; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm23178; AVX512BW-FALLBACK-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]3179; AVX512BW-FALLBACK-NEXT:    vmovdqu8 %zmm2, %zmm3 {%k1}3180; AVX512BW-FALLBACK-NEXT:    vpminsb %xmm1, %xmm0, %xmm23181; AVX512BW-FALLBACK-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13182; AVX512BW-FALLBACK-NEXT:    vpsubb %xmm2, %xmm1, %xmm13183; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm13184; AVX512BW-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13185; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero3186; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero,xmm3[8],zero,xmm3[9],zero,xmm3[10],zero,xmm3[11],zero,xmm3[12],zero,xmm3[13],zero,xmm3[14],zero,xmm3[15],zero3187; AVX512BW-FALLBACK-NEXT:    vpmullw %ymm2, %ymm1, %ymm13188; AVX512BW-FALLBACK-NEXT:    vpmovwb %zmm1, %ymm13189; AVX512BW-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm03190; AVX512BW-FALLBACK-NEXT:    vzeroupper3191; AVX512BW-FALLBACK-NEXT:    retq3192;3193; AVX512VLBW-LABEL: vec128_i8_signed_reg_mem:3194; AVX512VLBW:       # %bb.0:3195; AVX512VLBW-NEXT:    vmovdqa (%rdi), %xmm13196; AVX512VLBW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k13197; AVX512VLBW-NEXT:    vpminsb %xmm1, %xmm0, %xmm23198; AVX512VLBW-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13199; AVX512VLBW-NEXT:    vpsubb %xmm2, %xmm1, %xmm13200; AVX512VLBW-NEXT:    vpsrlw $1, %xmm1, %xmm13201; AVX512VLBW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm13202; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm23203; AVX512VLBW-NEXT:    vpsubb %xmm1, %xmm2, %xmm1 {%k1}3204; AVX512VLBW-NEXT:    vpaddb %xmm0, %xmm1, %xmm03205; AVX512VLBW-NEXT:    retq3206  %a2 = load <16 x i8>, ptr %a2_addr3207  %t3 = icmp sgt <16 x i8> %a1, %a2 ; signed3208  %t4 = select <16 x i1> %t3, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>3209  %t5 = select <16 x i1> %t3, <16 x i8> %a2, <16 x i8> %a13210  %t6 = select <16 x i1> %t3, <16 x i8> %a1, <16 x i8> %a23211  %t7 = sub <16 x i8> %t6, %t53212  %t8 = lshr <16 x i8> %t7, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>3213  %t9 = mul nsw <16 x i8> %t8, %t4 ; signed3214  %a10 = add nsw <16 x i8> %t9, %a1 ; signed3215  ret <16 x i8> %a103216}3217 3218define <16 x i8> @vec128_i8_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind {3219; SSE2-LABEL: vec128_i8_signed_mem_mem:3220; SSE2:       # %bb.0:3221; SSE2-NEXT:    movdqa (%rdi), %xmm13222; SSE2-NEXT:    movdqa (%rsi), %xmm23223; SSE2-NEXT:    movdqa %xmm1, %xmm33224; SSE2-NEXT:    pcmpgtb %xmm2, %xmm33225; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]3226; SSE2-NEXT:    por %xmm3, %xmm03227; SSE2-NEXT:    movdqa %xmm1, %xmm43228; SSE2-NEXT:    psubb %xmm2, %xmm43229; SSE2-NEXT:    pxor %xmm3, %xmm43230; SSE2-NEXT:    psubb %xmm4, %xmm33231; SSE2-NEXT:    psrlw $1, %xmm33232; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm33233; SSE2-NEXT:    movdqa %xmm3, %xmm23234; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]3235; SSE2-NEXT:    movdqa %xmm0, %xmm43236; SSE2-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]3237; SSE2-NEXT:    pmullw %xmm2, %xmm43238; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]3239; SSE2-NEXT:    pand %xmm2, %xmm43240; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]3241; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]3242; SSE2-NEXT:    pmullw %xmm3, %xmm03243; SSE2-NEXT:    pand %xmm2, %xmm03244; SSE2-NEXT:    packuswb %xmm4, %xmm03245; SSE2-NEXT:    paddb %xmm1, %xmm03246; SSE2-NEXT:    retq3247;3248; SSE41-LABEL: vec128_i8_signed_mem_mem:3249; SSE41:       # %bb.0:3250; SSE41-NEXT:    movdqa (%rdi), %xmm13251; SSE41-NEXT:    movdqa (%rsi), %xmm03252; SSE41-NEXT:    movdqa %xmm1, %xmm23253; SSE41-NEXT:    pcmpgtb %xmm0, %xmm23254; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm23255; SSE41-NEXT:    movdqa %xmm1, %xmm33256; SSE41-NEXT:    pminsb %xmm0, %xmm33257; SSE41-NEXT:    pmaxsb %xmm1, %xmm03258; SSE41-NEXT:    psubb %xmm3, %xmm03259; SSE41-NEXT:    psrlw $1, %xmm03260; SSE41-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03261; SSE41-NEXT:    movdqa %xmm0, %xmm33262; SSE41-NEXT:    pmullw %xmm2, %xmm33263; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]3264; SSE41-NEXT:    pand %xmm4, %xmm33265; SSE41-NEXT:    pandn %xmm2, %xmm43266; SSE41-NEXT:    pmaddubsw %xmm4, %xmm03267; SSE41-NEXT:    psllw $8, %xmm03268; SSE41-NEXT:    por %xmm3, %xmm03269; SSE41-NEXT:    paddb %xmm1, %xmm03270; SSE41-NEXT:    retq3271;3272; AVX1-LABEL: vec128_i8_signed_mem_mem:3273; AVX1:       # %bb.0:3274; AVX1-NEXT:    vmovdqa (%rdi), %xmm03275; AVX1-NEXT:    vmovdqa (%rsi), %xmm13276; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm23277; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23278; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm33279; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13280; AVX1-NEXT:    vpsubb %xmm3, %xmm1, %xmm13281; AVX1-NEXT:    vpsrlw $1, %xmm1, %xmm13282; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13283; AVX1-NEXT:    vpmullw %xmm2, %xmm1, %xmm33284; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]3285; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm33286; AVX1-NEXT:    vpandn %xmm2, %xmm4, %xmm23287; AVX1-NEXT:    vpmaddubsw %xmm2, %xmm1, %xmm13288; AVX1-NEXT:    vpsllw $8, %xmm1, %xmm13289; AVX1-NEXT:    vpor %xmm1, %xmm3, %xmm13290; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm03291; AVX1-NEXT:    retq3292;3293; AVX2-LABEL: vec128_i8_signed_mem_mem:3294; AVX2:       # %bb.0:3295; AVX2-NEXT:    vmovdqa (%rdi), %xmm03296; AVX2-NEXT:    vmovdqa (%rsi), %xmm13297; AVX2-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm23298; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23299; AVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm33300; AVX2-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13301; AVX2-NEXT:    vpsubb %xmm3, %xmm1, %xmm13302; AVX2-NEXT:    vpsrlw $1, %xmm1, %xmm13303; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13304; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero3305; AVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero3306; AVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm13307; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm13308; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm23309; AVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm13310; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm03311; AVX2-NEXT:    vzeroupper3312; AVX2-NEXT:    retq3313;3314; XOP-FALLBACK-LABEL: vec128_i8_signed_mem_mem:3315; XOP-FALLBACK:       # %bb.0:3316; XOP-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm03317; XOP-FALLBACK-NEXT:    vmovdqa (%rsi), %xmm13318; XOP-FALLBACK-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm23319; XOP-FALLBACK-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23320; XOP-FALLBACK-NEXT:    vpminsb %xmm1, %xmm0, %xmm33321; XOP-FALLBACK-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13322; XOP-FALLBACK-NEXT:    vpsubb %xmm3, %xmm1, %xmm13323; XOP-FALLBACK-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm33324; XOP-FALLBACK-NEXT:    vpshlb %xmm3, %xmm1, %xmm13325; XOP-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm33326; XOP-FALLBACK-NEXT:    vpmaddubsw %xmm3, %xmm1, %xmm33327; XOP-FALLBACK-NEXT:    vpmullw %xmm2, %xmm1, %xmm13328; XOP-FALLBACK-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[2],xmm3[2],xmm1[4],xmm3[4],xmm1[6],xmm3[6],xmm1[8],xmm3[8],xmm1[10],xmm3[10],xmm1[12],xmm3[12],xmm1[14],xmm3[14]3329; XOP-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm03330; XOP-FALLBACK-NEXT:    retq3331;3332; XOPAVX1-LABEL: vec128_i8_signed_mem_mem:3333; XOPAVX1:       # %bb.0:3334; XOPAVX1-NEXT:    vmovdqa (%rdi), %xmm03335; XOPAVX1-NEXT:    vmovdqa (%rsi), %xmm13336; XOPAVX1-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm23337; XOPAVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23338; XOPAVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm33339; XOPAVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13340; XOPAVX1-NEXT:    vpsubb %xmm3, %xmm1, %xmm13341; XOPAVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm33342; XOPAVX1-NEXT:    vpshlb %xmm3, %xmm1, %xmm13343; XOPAVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm33344; XOPAVX1-NEXT:    vpmaddubsw %xmm3, %xmm1, %xmm33345; XOPAVX1-NEXT:    vpmullw %xmm2, %xmm1, %xmm13346; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[2],xmm3[2],xmm1[4],xmm3[4],xmm1[6],xmm3[6],xmm1[8],xmm3[8],xmm1[10],xmm3[10],xmm1[12],xmm3[12],xmm1[14],xmm3[14]3347; XOPAVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm03348; XOPAVX1-NEXT:    retq3349;3350; XOPAVX2-LABEL: vec128_i8_signed_mem_mem:3351; XOPAVX2:       # %bb.0:3352; XOPAVX2-NEXT:    vmovdqa (%rdi), %xmm03353; XOPAVX2-NEXT:    vmovdqa (%rsi), %xmm13354; XOPAVX2-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm23355; XOPAVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23356; XOPAVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm33357; XOPAVX2-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13358; XOPAVX2-NEXT:    vpsubb %xmm3, %xmm1, %xmm13359; XOPAVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm33360; XOPAVX2-NEXT:    vpshlb %xmm3, %xmm1, %xmm13361; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero3362; XOPAVX2-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero3363; XOPAVX2-NEXT:    vpmullw %ymm2, %ymm1, %ymm13364; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm13365; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm23366; XOPAVX2-NEXT:    vpackuswb %xmm2, %xmm1, %xmm13367; XOPAVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm03368; XOPAVX2-NEXT:    vzeroupper3369; XOPAVX2-NEXT:    retq3370;3371; AVX512F-LABEL: vec128_i8_signed_mem_mem:3372; AVX512F:       # %bb.0:3373; AVX512F-NEXT:    vmovdqa (%rdi), %xmm03374; AVX512F-NEXT:    vmovdqa (%rsi), %xmm13375; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm23376; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm23377; AVX512F-NEXT:    vpminsb %xmm1, %xmm0, %xmm33378; AVX512F-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13379; AVX512F-NEXT:    vpsubb %xmm3, %xmm1, %xmm13380; AVX512F-NEXT:    vpsrlw $1, %xmm1, %xmm13381; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13382; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero3383; AVX512F-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero3384; AVX512F-NEXT:    vpmullw %ymm2, %ymm1, %ymm13385; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero3386; AVX512F-NEXT:    vpmovdb %zmm1, %xmm13387; AVX512F-NEXT:    vpaddb %xmm0, %xmm1, %xmm03388; AVX512F-NEXT:    vzeroupper3389; AVX512F-NEXT:    retq3390;3391; AVX512VL-FALLBACK-LABEL: vec128_i8_signed_mem_mem:3392; AVX512VL-FALLBACK:       # %bb.0:3393; AVX512VL-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm03394; AVX512VL-FALLBACK-NEXT:    vmovdqa (%rsi), %xmm13395; AVX512VL-FALLBACK-NEXT:    vpminsb %xmm1, %xmm0, %xmm23396; AVX512VL-FALLBACK-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm33397; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm2, %xmm3, %xmm23398; AVX512VL-FALLBACK-NEXT:    vpsrlw $1, %xmm2, %xmm23399; AVX512VL-FALLBACK-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm13400; AVX512VL-FALLBACK-NEXT:    vpternlogd {{.*#+}} xmm2 = xmm1 ^ (xmm2 & m32bcst)3401; AVX512VL-FALLBACK-NEXT:    vpsubb %xmm1, %xmm2, %xmm13402; AVX512VL-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm03403; AVX512VL-FALLBACK-NEXT:    retq3404;3405; AVX512BW-FALLBACK-LABEL: vec128_i8_signed_mem_mem:3406; AVX512BW-FALLBACK:       # %bb.0:3407; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rdi), %xmm03408; AVX512BW-FALLBACK-NEXT:    vmovdqa (%rsi), %xmm13409; AVX512BW-FALLBACK-NEXT:    vpcmpgtb %zmm1, %zmm0, %k13410; AVX512BW-FALLBACK-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm23411; AVX512BW-FALLBACK-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]3412; AVX512BW-FALLBACK-NEXT:    vmovdqu8 %zmm2, %zmm3 {%k1}3413; AVX512BW-FALLBACK-NEXT:    vpminsb %xmm1, %xmm0, %xmm23414; AVX512BW-FALLBACK-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13415; AVX512BW-FALLBACK-NEXT:    vpsubb %xmm2, %xmm1, %xmm13416; AVX512BW-FALLBACK-NEXT:    vpsrlw $1, %xmm1, %xmm13417; AVX512BW-FALLBACK-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13418; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero3419; AVX512BW-FALLBACK-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero,xmm3[4],zero,xmm3[5],zero,xmm3[6],zero,xmm3[7],zero,xmm3[8],zero,xmm3[9],zero,xmm3[10],zero,xmm3[11],zero,xmm3[12],zero,xmm3[13],zero,xmm3[14],zero,xmm3[15],zero3420; AVX512BW-FALLBACK-NEXT:    vpmullw %ymm2, %ymm1, %ymm13421; AVX512BW-FALLBACK-NEXT:    vpmovwb %zmm1, %ymm13422; AVX512BW-FALLBACK-NEXT:    vpaddb %xmm0, %xmm1, %xmm03423; AVX512BW-FALLBACK-NEXT:    vzeroupper3424; AVX512BW-FALLBACK-NEXT:    retq3425;3426; AVX512VLBW-LABEL: vec128_i8_signed_mem_mem:3427; AVX512VLBW:       # %bb.0:3428; AVX512VLBW-NEXT:    vmovdqa (%rdi), %xmm03429; AVX512VLBW-NEXT:    vmovdqa (%rsi), %xmm13430; AVX512VLBW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k13431; AVX512VLBW-NEXT:    vpminsb %xmm1, %xmm0, %xmm23432; AVX512VLBW-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm13433; AVX512VLBW-NEXT:    vpsubb %xmm2, %xmm1, %xmm13434; AVX512VLBW-NEXT:    vpsrlw $1, %xmm1, %xmm13435; AVX512VLBW-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm13436; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm23437; AVX512VLBW-NEXT:    vpsubb %xmm1, %xmm2, %xmm1 {%k1}3438; AVX512VLBW-NEXT:    vpaddb %xmm0, %xmm1, %xmm03439; AVX512VLBW-NEXT:    retq3440  %a1 = load <16 x i8>, ptr %a1_addr3441  %a2 = load <16 x i8>, ptr %a2_addr3442  %t3 = icmp sgt <16 x i8> %a1, %a2 ; signed3443  %t4 = select <16 x i1> %t3, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>3444  %t5 = select <16 x i1> %t3, <16 x i8> %a2, <16 x i8> %a13445  %t6 = select <16 x i1> %t3, <16 x i8> %a1, <16 x i8> %a23446  %t7 = sub <16 x i8> %t6, %t53447  %t8 = lshr <16 x i8> %t7, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>3448  %t9 = mul nsw <16 x i8> %t8, %t4 ; signed3449  %a10 = add nsw <16 x i8> %t9, %a1 ; signed3450  ret <16 x i8> %a103451}3452