brintos

brintos / llvm-project-archived public Read only

0
0
Text · 67.0 KiB · 80b55a3 Raw
1854 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=+ssse3 | FileCheck %s --check-prefixes=SSE,SSSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE415; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX27; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW11 12declare <1 x i8> @llvm.sadd.sat.v1i8(<1 x i8>, <1 x i8>)13declare <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8>, <2 x i8>)14declare <4 x i8> @llvm.sadd.sat.v4i8(<4 x i8>, <4 x i8>)15declare <8 x i8> @llvm.sadd.sat.v8i8(<8 x i8>, <8 x i8>)16declare <12 x i8> @llvm.sadd.sat.v12i8(<12 x i8>, <12 x i8>)17declare <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8>, <16 x i8>)18declare <32 x i8> @llvm.sadd.sat.v32i8(<32 x i8>, <32 x i8>)19declare <64 x i8> @llvm.sadd.sat.v64i8(<64 x i8>, <64 x i8>)20 21declare <1 x i16> @llvm.sadd.sat.v1i16(<1 x i16>, <1 x i16>)22declare <2 x i16> @llvm.sadd.sat.v2i16(<2 x i16>, <2 x i16>)23declare <4 x i16> @llvm.sadd.sat.v4i16(<4 x i16>, <4 x i16>)24declare <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16>, <8 x i16>)25declare <12 x i16> @llvm.sadd.sat.v12i16(<12 x i16>, <12 x i16>)26declare <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16>, <16 x i16>)27declare <32 x i16> @llvm.sadd.sat.v32i16(<32 x i16>, <32 x i16>)28 29declare <16 x i1> @llvm.sadd.sat.v16i1(<16 x i1>, <16 x i1>)30declare <16 x i4> @llvm.sadd.sat.v16i4(<16 x i4>, <16 x i4>)31 32declare <2 x i32> @llvm.sadd.sat.v2i32(<2 x i32>, <2 x i32>)33declare <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32>, <4 x i32>)34declare <8 x i32> @llvm.sadd.sat.v8i32(<8 x i32>, <8 x i32>)35declare <16 x i32> @llvm.sadd.sat.v16i32(<16 x i32>, <16 x i32>)36declare <2 x i64> @llvm.sadd.sat.v2i64(<2 x i64>, <2 x i64>)37declare <4 x i64> @llvm.sadd.sat.v4i64(<4 x i64>, <4 x i64>)38declare <8 x i64> @llvm.sadd.sat.v8i64(<8 x i64>, <8 x i64>)39 40declare <4 x i24> @llvm.sadd.sat.v4i24(<4 x i24>, <4 x i24>)41declare <2 x i128> @llvm.sadd.sat.v2i128(<2 x i128>, <2 x i128>)42 43; Legal types, depending on architecture.44 45define <16 x i8> @v16i8(<16 x i8> %x, <16 x i8> %y) nounwind {46; SSE-LABEL: v16i8:47; SSE:       # %bb.0:48; SSE-NEXT:    paddsb %xmm1, %xmm049; SSE-NEXT:    retq50;51; AVX-LABEL: v16i8:52; AVX:       # %bb.0:53; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm054; AVX-NEXT:    retq55  %z = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %x, <16 x i8> %y)56  ret <16 x i8> %z57}58 59define <32 x i8> @v32i8(<32 x i8> %x, <32 x i8> %y) nounwind {60; SSE-LABEL: v32i8:61; SSE:       # %bb.0:62; SSE-NEXT:    paddsb %xmm2, %xmm063; SSE-NEXT:    paddsb %xmm3, %xmm164; SSE-NEXT:    retq65;66; AVX1-LABEL: v32i8:67; AVX1:       # %bb.0:68; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm269; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm370; AVX1-NEXT:    vpaddsb %xmm2, %xmm3, %xmm271; AVX1-NEXT:    vpaddsb %xmm1, %xmm0, %xmm072; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm073; AVX1-NEXT:    retq74;75; AVX2-LABEL: v32i8:76; AVX2:       # %bb.0:77; AVX2-NEXT:    vpaddsb %ymm1, %ymm0, %ymm078; AVX2-NEXT:    retq79;80; AVX512-LABEL: v32i8:81; AVX512:       # %bb.0:82; AVX512-NEXT:    vpaddsb %ymm1, %ymm0, %ymm083; AVX512-NEXT:    retq84  %z = call <32 x i8> @llvm.sadd.sat.v32i8(<32 x i8> %x, <32 x i8> %y)85  ret <32 x i8> %z86}87 88define <64 x i8> @v64i8(<64 x i8> %x, <64 x i8> %y) nounwind {89; SSE-LABEL: v64i8:90; SSE:       # %bb.0:91; SSE-NEXT:    paddsb %xmm4, %xmm092; SSE-NEXT:    paddsb %xmm5, %xmm193; SSE-NEXT:    paddsb %xmm6, %xmm294; SSE-NEXT:    paddsb %xmm7, %xmm395; SSE-NEXT:    retq96;97; AVX1-LABEL: v64i8:98; AVX1:       # %bb.0:99; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4100; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5101; AVX1-NEXT:    vpaddsb %xmm4, %xmm5, %xmm4102; AVX1-NEXT:    vpaddsb %xmm2, %xmm0, %xmm0103; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0104; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2105; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4106; AVX1-NEXT:    vpaddsb %xmm2, %xmm4, %xmm2107; AVX1-NEXT:    vpaddsb %xmm3, %xmm1, %xmm1108; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1109; AVX1-NEXT:    retq110;111; AVX2-LABEL: v64i8:112; AVX2:       # %bb.0:113; AVX2-NEXT:    vpaddsb %ymm2, %ymm0, %ymm0114; AVX2-NEXT:    vpaddsb %ymm3, %ymm1, %ymm1115; AVX2-NEXT:    retq116;117; AVX512F-LABEL: v64i8:118; AVX512F:       # %bb.0:119; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2120; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3121; AVX512F-NEXT:    vpaddsb %ymm2, %ymm3, %ymm2122; AVX512F-NEXT:    vpaddsb %ymm1, %ymm0, %ymm0123; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0124; AVX512F-NEXT:    retq125;126; AVX512BW-LABEL: v64i8:127; AVX512BW:       # %bb.0:128; AVX512BW-NEXT:    vpaddsb %zmm1, %zmm0, %zmm0129; AVX512BW-NEXT:    retq130  %z = call <64 x i8> @llvm.sadd.sat.v64i8(<64 x i8> %x, <64 x i8> %y)131  ret <64 x i8> %z132}133 134define <8 x i16> @v8i16(<8 x i16> %x, <8 x i16> %y) nounwind {135; SSE-LABEL: v8i16:136; SSE:       # %bb.0:137; SSE-NEXT:    paddsw %xmm1, %xmm0138; SSE-NEXT:    retq139;140; AVX-LABEL: v8i16:141; AVX:       # %bb.0:142; AVX-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0143; AVX-NEXT:    retq144  %z = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %x, <8 x i16> %y)145  ret <8 x i16> %z146}147 148define <16 x i16> @v16i16(<16 x i16> %x, <16 x i16> %y) nounwind {149; SSE-LABEL: v16i16:150; SSE:       # %bb.0:151; SSE-NEXT:    paddsw %xmm2, %xmm0152; SSE-NEXT:    paddsw %xmm3, %xmm1153; SSE-NEXT:    retq154;155; AVX1-LABEL: v16i16:156; AVX1:       # %bb.0:157; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2158; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3159; AVX1-NEXT:    vpaddsw %xmm2, %xmm3, %xmm2160; AVX1-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0161; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0162; AVX1-NEXT:    retq163;164; AVX2-LABEL: v16i16:165; AVX2:       # %bb.0:166; AVX2-NEXT:    vpaddsw %ymm1, %ymm0, %ymm0167; AVX2-NEXT:    retq168;169; AVX512-LABEL: v16i16:170; AVX512:       # %bb.0:171; AVX512-NEXT:    vpaddsw %ymm1, %ymm0, %ymm0172; AVX512-NEXT:    retq173  %z = call <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16> %x, <16 x i16> %y)174  ret <16 x i16> %z175}176 177define <32 x i16> @v32i16(<32 x i16> %x, <32 x i16> %y) nounwind {178; SSE-LABEL: v32i16:179; SSE:       # %bb.0:180; SSE-NEXT:    paddsw %xmm4, %xmm0181; SSE-NEXT:    paddsw %xmm5, %xmm1182; SSE-NEXT:    paddsw %xmm6, %xmm2183; SSE-NEXT:    paddsw %xmm7, %xmm3184; SSE-NEXT:    retq185;186; AVX1-LABEL: v32i16:187; AVX1:       # %bb.0:188; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4189; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5190; AVX1-NEXT:    vpaddsw %xmm4, %xmm5, %xmm4191; AVX1-NEXT:    vpaddsw %xmm2, %xmm0, %xmm0192; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0193; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2194; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4195; AVX1-NEXT:    vpaddsw %xmm2, %xmm4, %xmm2196; AVX1-NEXT:    vpaddsw %xmm3, %xmm1, %xmm1197; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1198; AVX1-NEXT:    retq199;200; AVX2-LABEL: v32i16:201; AVX2:       # %bb.0:202; AVX2-NEXT:    vpaddsw %ymm2, %ymm0, %ymm0203; AVX2-NEXT:    vpaddsw %ymm3, %ymm1, %ymm1204; AVX2-NEXT:    retq205;206; AVX512F-LABEL: v32i16:207; AVX512F:       # %bb.0:208; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2209; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3210; AVX512F-NEXT:    vpaddsw %ymm2, %ymm3, %ymm2211; AVX512F-NEXT:    vpaddsw %ymm1, %ymm0, %ymm0212; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0213; AVX512F-NEXT:    retq214;215; AVX512BW-LABEL: v32i16:216; AVX512BW:       # %bb.0:217; AVX512BW-NEXT:    vpaddsw %zmm1, %zmm0, %zmm0218; AVX512BW-NEXT:    retq219  %z = call <32 x i16> @llvm.sadd.sat.v32i16(<32 x i16> %x, <32 x i16> %y)220  ret <32 x i16> %z221}222 223; Too narrow vectors, legalized by widening.224 225define void @v8i8(ptr %px, ptr %py, ptr %pz) nounwind {226; SSE-LABEL: v8i8:227; SSE:       # %bb.0:228; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero229; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero230; SSE-NEXT:    paddsb %xmm0, %xmm1231; SSE-NEXT:    movq %xmm1, (%rdx)232; SSE-NEXT:    retq233;234; AVX-LABEL: v8i8:235; AVX:       # %bb.0:236; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero237; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero238; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0239; AVX-NEXT:    vmovq %xmm0, (%rdx)240; AVX-NEXT:    retq241  %x = load <8 x i8>, ptr %px242  %y = load <8 x i8>, ptr %py243  %z = call <8 x i8> @llvm.sadd.sat.v8i8(<8 x i8> %x, <8 x i8> %y)244  store <8 x i8> %z, ptr %pz245  ret void246}247 248define void @v4i8(ptr %px, ptr %py, ptr %pz) nounwind {249; SSE-LABEL: v4i8:250; SSE:       # %bb.0:251; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero252; SSE-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero253; SSE-NEXT:    paddsb %xmm0, %xmm1254; SSE-NEXT:    movd %xmm1, (%rdx)255; SSE-NEXT:    retq256;257; AVX-LABEL: v4i8:258; AVX:       # %bb.0:259; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero260; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero261; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0262; AVX-NEXT:    vmovd %xmm0, (%rdx)263; AVX-NEXT:    retq264  %x = load <4 x i8>, ptr %px265  %y = load <4 x i8>, ptr %py266  %z = call <4 x i8> @llvm.sadd.sat.v4i8(<4 x i8> %x, <4 x i8> %y)267  store <4 x i8> %z, ptr %pz268  ret void269}270 271define void @v2i8(ptr %px, ptr %py, ptr %pz) nounwind {272; SSE2-LABEL: v2i8:273; SSE2:       # %bb.0:274; SSE2-NEXT:    movzwl (%rdi), %eax275; SSE2-NEXT:    movd %eax, %xmm0276; SSE2-NEXT:    movzwl (%rsi), %eax277; SSE2-NEXT:    movd %eax, %xmm1278; SSE2-NEXT:    paddsb %xmm0, %xmm1279; SSE2-NEXT:    movd %xmm1, %eax280; SSE2-NEXT:    movw %ax, (%rdx)281; SSE2-NEXT:    retq282;283; SSSE3-LABEL: v2i8:284; SSSE3:       # %bb.0:285; SSSE3-NEXT:    movzwl (%rdi), %eax286; SSSE3-NEXT:    movd %eax, %xmm0287; SSSE3-NEXT:    movzwl (%rsi), %eax288; SSSE3-NEXT:    movd %eax, %xmm1289; SSSE3-NEXT:    paddsb %xmm0, %xmm1290; SSSE3-NEXT:    movd %xmm1, %eax291; SSSE3-NEXT:    movw %ax, (%rdx)292; SSSE3-NEXT:    retq293;294; SSE41-LABEL: v2i8:295; SSE41:       # %bb.0:296; SSE41-NEXT:    movzwl (%rdi), %eax297; SSE41-NEXT:    movd %eax, %xmm0298; SSE41-NEXT:    movzwl (%rsi), %eax299; SSE41-NEXT:    movd %eax, %xmm1300; SSE41-NEXT:    paddsb %xmm0, %xmm1301; SSE41-NEXT:    pextrw $0, %xmm1, (%rdx)302; SSE41-NEXT:    retq303;304; AVX-LABEL: v2i8:305; AVX:       # %bb.0:306; AVX-NEXT:    movzwl (%rdi), %eax307; AVX-NEXT:    vmovd %eax, %xmm0308; AVX-NEXT:    movzwl (%rsi), %eax309; AVX-NEXT:    vmovd %eax, %xmm1310; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0311; AVX-NEXT:    vpextrw $0, %xmm0, (%rdx)312; AVX-NEXT:    retq313  %x = load <2 x i8>, ptr %px314  %y = load <2 x i8>, ptr %py315  %z = call <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8> %x, <2 x i8> %y)316  store <2 x i8> %z, ptr %pz317  ret void318}319 320define void @v4i16(ptr %px, ptr %py, ptr %pz) nounwind {321; SSE-LABEL: v4i16:322; SSE:       # %bb.0:323; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero324; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero325; SSE-NEXT:    paddsw %xmm0, %xmm1326; SSE-NEXT:    movq %xmm1, (%rdx)327; SSE-NEXT:    retq328;329; AVX-LABEL: v4i16:330; AVX:       # %bb.0:331; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero332; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero333; AVX-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0334; AVX-NEXT:    vmovq %xmm0, (%rdx)335; AVX-NEXT:    retq336  %x = load <4 x i16>, ptr %px337  %y = load <4 x i16>, ptr %py338  %z = call <4 x i16> @llvm.sadd.sat.v4i16(<4 x i16> %x, <4 x i16> %y)339  store <4 x i16> %z, ptr %pz340  ret void341}342 343define void @v2i16(ptr %px, ptr %py, ptr %pz) nounwind {344; SSE-LABEL: v2i16:345; SSE:       # %bb.0:346; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero347; SSE-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero348; SSE-NEXT:    paddsw %xmm0, %xmm1349; SSE-NEXT:    movd %xmm1, (%rdx)350; SSE-NEXT:    retq351;352; AVX-LABEL: v2i16:353; AVX:       # %bb.0:354; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero355; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero356; AVX-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0357; AVX-NEXT:    vmovd %xmm0, (%rdx)358; AVX-NEXT:    retq359  %x = load <2 x i16>, ptr %px360  %y = load <2 x i16>, ptr %py361  %z = call <2 x i16> @llvm.sadd.sat.v2i16(<2 x i16> %x, <2 x i16> %y)362  store <2 x i16> %z, ptr %pz363  ret void364}365 366define <12 x i8> @v12i8(<12 x i8> %x, <12 x i8> %y) nounwind {367; SSE-LABEL: v12i8:368; SSE:       # %bb.0:369; SSE-NEXT:    paddsb %xmm1, %xmm0370; SSE-NEXT:    retq371;372; AVX-LABEL: v12i8:373; AVX:       # %bb.0:374; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0375; AVX-NEXT:    retq376  %z = call <12 x i8> @llvm.sadd.sat.v12i8(<12 x i8> %x, <12 x i8> %y)377  ret <12 x i8> %z378}379 380define void @v12i16(ptr %px, ptr %py, ptr %pz) nounwind {381; SSE-LABEL: v12i16:382; SSE:       # %bb.0:383; SSE-NEXT:    movdqa (%rdi), %xmm0384; SSE-NEXT:    movdqa 16(%rdi), %xmm1385; SSE-NEXT:    paddsw 16(%rsi), %xmm1386; SSE-NEXT:    paddsw (%rsi), %xmm0387; SSE-NEXT:    movdqa %xmm0, (%rdx)388; SSE-NEXT:    movq %xmm1, 16(%rdx)389; SSE-NEXT:    retq390;391; AVX1-LABEL: v12i16:392; AVX1:       # %bb.0:393; AVX1-NEXT:    vmovdqa (%rdi), %xmm0394; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm1395; AVX1-NEXT:    vpaddsw 16(%rsi), %xmm1, %xmm1396; AVX1-NEXT:    vpaddsw (%rsi), %xmm0, %xmm0397; AVX1-NEXT:    vmovdqa %xmm0, (%rdx)398; AVX1-NEXT:    vmovq %xmm1, 16(%rdx)399; AVX1-NEXT:    retq400;401; AVX2-LABEL: v12i16:402; AVX2:       # %bb.0:403; AVX2-NEXT:    vmovdqa (%rdi), %ymm0404; AVX2-NEXT:    vpaddsw (%rsi), %ymm0, %ymm0405; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1406; AVX2-NEXT:    vmovq %xmm1, 16(%rdx)407; AVX2-NEXT:    vmovdqa %xmm0, (%rdx)408; AVX2-NEXT:    vzeroupper409; AVX2-NEXT:    retq410;411; AVX512-LABEL: v12i16:412; AVX512:       # %bb.0:413; AVX512-NEXT:    vmovdqa (%rdi), %ymm0414; AVX512-NEXT:    vpaddsw (%rsi), %ymm0, %ymm0415; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1416; AVX512-NEXT:    vmovq %xmm1, 16(%rdx)417; AVX512-NEXT:    vmovdqa %xmm0, (%rdx)418; AVX512-NEXT:    vzeroupper419; AVX512-NEXT:    retq420  %x = load <12 x i16>, ptr %px421  %y = load <12 x i16>, ptr %py422  %z = call <12 x i16> @llvm.sadd.sat.v12i16(<12 x i16> %x, <12 x i16> %y)423  store <12 x i16> %z, ptr %pz424  ret void425}426 427; Scalarization428 429define void @v1i8(ptr %px, ptr %py, ptr %pz) nounwind {430; SSE-LABEL: v1i8:431; SSE:       # %bb.0:432; SSE-NEXT:    movzbl (%rdi), %eax433; SSE-NEXT:    movzbl (%rsi), %ecx434; SSE-NEXT:    leal (%rax,%rcx), %esi435; SSE-NEXT:    sarb $7, %sil436; SSE-NEXT:    addb $-128, %sil437; SSE-NEXT:    addb %cl, %al438; SSE-NEXT:    movzbl %al, %eax439; SSE-NEXT:    movzbl %sil, %ecx440; SSE-NEXT:    cmovnol %eax, %ecx441; SSE-NEXT:    movb %cl, (%rdx)442; SSE-NEXT:    retq443;444; AVX-LABEL: v1i8:445; AVX:       # %bb.0:446; AVX-NEXT:    movzbl (%rdi), %eax447; AVX-NEXT:    movzbl (%rsi), %ecx448; AVX-NEXT:    leal (%rax,%rcx), %esi449; AVX-NEXT:    sarb $7, %sil450; AVX-NEXT:    addb $-128, %sil451; AVX-NEXT:    addb %cl, %al452; AVX-NEXT:    movzbl %al, %eax453; AVX-NEXT:    movzbl %sil, %ecx454; AVX-NEXT:    cmovnol %eax, %ecx455; AVX-NEXT:    movb %cl, (%rdx)456; AVX-NEXT:    retq457  %x = load <1 x i8>, ptr %px458  %y = load <1 x i8>, ptr %py459  %z = call <1 x i8> @llvm.sadd.sat.v1i8(<1 x i8> %x, <1 x i8> %y)460  store <1 x i8> %z, ptr %pz461  ret void462}463 464define void @v1i16(ptr %px, ptr %py, ptr %pz) nounwind {465; SSE-LABEL: v1i16:466; SSE:       # %bb.0:467; SSE-NEXT:    movzwl (%rdi), %eax468; SSE-NEXT:    movzwl (%rsi), %ecx469; SSE-NEXT:    leal (%rax,%rcx), %esi470; SSE-NEXT:    movswl %si, %esi471; SSE-NEXT:    sarl $15, %esi472; SSE-NEXT:    xorl $-32768, %esi # imm = 0x8000473; SSE-NEXT:    addw %cx, %ax474; SSE-NEXT:    cmovol %esi, %eax475; SSE-NEXT:    movw %ax, (%rdx)476; SSE-NEXT:    retq477;478; AVX-LABEL: v1i16:479; AVX:       # %bb.0:480; AVX-NEXT:    movzwl (%rdi), %eax481; AVX-NEXT:    movzwl (%rsi), %ecx482; AVX-NEXT:    leal (%rax,%rcx), %esi483; AVX-NEXT:    movswl %si, %esi484; AVX-NEXT:    sarl $15, %esi485; AVX-NEXT:    xorl $-32768, %esi # imm = 0x8000486; AVX-NEXT:    addw %cx, %ax487; AVX-NEXT:    cmovol %esi, %eax488; AVX-NEXT:    movw %ax, (%rdx)489; AVX-NEXT:    retq490  %x = load <1 x i16>, ptr %px491  %y = load <1 x i16>, ptr %py492  %z = call <1 x i16> @llvm.sadd.sat.v1i16(<1 x i16> %x, <1 x i16> %y)493  store <1 x i16> %z, ptr %pz494  ret void495}496 497; Promotion498 499define <16 x i4> @v16i4(<16 x i4> %x, <16 x i4> %y) nounwind {500; SSE-LABEL: v16i4:501; SSE:       # %bb.0:502; SSE-NEXT:    psllw $4, %xmm1503; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]504; SSE-NEXT:    pand %xmm2, %xmm1505; SSE-NEXT:    psllw $4, %xmm0506; SSE-NEXT:    pand %xmm2, %xmm0507; SSE-NEXT:    paddsb %xmm1, %xmm0508; SSE-NEXT:    psrlw $4, %xmm0509; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0510; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]511; SSE-NEXT:    pxor %xmm1, %xmm0512; SSE-NEXT:    psubb %xmm1, %xmm0513; SSE-NEXT:    retq514;515; AVX1-LABEL: v16i4:516; AVX1:       # %bb.0:517; AVX1-NEXT:    vpsllw $4, %xmm1, %xmm1518; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]519; AVX1-NEXT:    vpand %xmm2, %xmm1, %xmm1520; AVX1-NEXT:    vpsllw $4, %xmm0, %xmm0521; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0522; AVX1-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0523; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0524; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0525; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]526; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0527; AVX1-NEXT:    vpsubb %xmm1, %xmm0, %xmm0528; AVX1-NEXT:    retq529;530; AVX2-LABEL: v16i4:531; AVX2:       # %bb.0:532; AVX2-NEXT:    vpsllw $4, %xmm1, %xmm1533; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm2 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]534; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm1535; AVX2-NEXT:    vpsllw $4, %xmm0, %xmm0536; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0537; AVX2-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0538; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0539; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0540; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]541; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0542; AVX2-NEXT:    vpsubb %xmm1, %xmm0, %xmm0543; AVX2-NEXT:    retq544;545; AVX512F-LABEL: v16i4:546; AVX512F:       # %bb.0:547; AVX512F-NEXT:    vpsllw $4, %xmm1, %xmm1548; AVX512F-NEXT:    vpbroadcastb {{.*#+}} xmm2 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]549; AVX512F-NEXT:    vpand %xmm2, %xmm1, %xmm1550; AVX512F-NEXT:    vpsllw $4, %xmm0, %xmm0551; AVX512F-NEXT:    vpand %xmm2, %xmm0, %xmm0552; AVX512F-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0553; AVX512F-NEXT:    vpsrlw $4, %xmm0, %xmm0554; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0555; AVX512F-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]556; AVX512F-NEXT:    vpxor %xmm1, %xmm0, %xmm0557; AVX512F-NEXT:    vpsubb %xmm1, %xmm0, %xmm0558; AVX512F-NEXT:    retq559;560; AVX512BW-LABEL: v16i4:561; AVX512BW:       # %bb.0:562; AVX512BW-NEXT:    vpsllw $4, %xmm1, %xmm1563; AVX512BW-NEXT:    vpbroadcastb {{.*#+}} xmm2 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]564; AVX512BW-NEXT:    vpand %xmm2, %xmm1, %xmm1565; AVX512BW-NEXT:    vpsllw $4, %xmm0, %xmm0566; AVX512BW-NEXT:    vpand %xmm2, %xmm0, %xmm0567; AVX512BW-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0568; AVX512BW-NEXT:    vpsrlw $4, %xmm0, %xmm0569; AVX512BW-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]570; AVX512BW-NEXT:    vpternlogd {{.*#+}} xmm0 = xmm1 ^ (xmm0 & m32bcst)571; AVX512BW-NEXT:    vpsubb %xmm1, %xmm0, %xmm0572; AVX512BW-NEXT:    retq573  %z = call <16 x i4> @llvm.sadd.sat.v16i4(<16 x i4> %x, <16 x i4> %y)574  ret <16 x i4> %z575}576 577define <16 x i1> @v16i1(<16 x i1> %x, <16 x i1> %y) nounwind {578; SSE-LABEL: v16i1:579; SSE:       # %bb.0:580; SSE-NEXT:    orps %xmm1, %xmm0581; SSE-NEXT:    retq582;583; AVX-LABEL: v16i1:584; AVX:       # %bb.0:585; AVX-NEXT:    vorps %xmm1, %xmm0, %xmm0586; AVX-NEXT:    retq587  %z = call <16 x i1> @llvm.sadd.sat.v16i1(<16 x i1> %x, <16 x i1> %y)588  ret <16 x i1> %z589}590 591; Expanded592 593define <2 x i32> @v2i32(<2 x i32> %x, <2 x i32> %y) nounwind {594; SSE2-LABEL: v2i32:595; SSE2:       # %bb.0:596; SSE2-NEXT:    pxor %xmm2, %xmm2597; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2598; SSE2-NEXT:    paddd %xmm0, %xmm1599; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0600; SSE2-NEXT:    pxor %xmm2, %xmm0601; SSE2-NEXT:    movdqa %xmm0, %xmm2602; SSE2-NEXT:    pandn %xmm1, %xmm2603; SSE2-NEXT:    psrad $31, %xmm1604; SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1605; SSE2-NEXT:    pand %xmm1, %xmm0606; SSE2-NEXT:    por %xmm2, %xmm0607; SSE2-NEXT:    retq608;609; SSSE3-LABEL: v2i32:610; SSSE3:       # %bb.0:611; SSSE3-NEXT:    pxor %xmm2, %xmm2612; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm2613; SSSE3-NEXT:    paddd %xmm0, %xmm1614; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0615; SSSE3-NEXT:    pxor %xmm2, %xmm0616; SSSE3-NEXT:    movdqa %xmm0, %xmm2617; SSSE3-NEXT:    pandn %xmm1, %xmm2618; SSSE3-NEXT:    psrad $31, %xmm1619; SSSE3-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1620; SSSE3-NEXT:    pand %xmm1, %xmm0621; SSSE3-NEXT:    por %xmm2, %xmm0622; SSSE3-NEXT:    retq623;624; SSE41-LABEL: v2i32:625; SSE41:       # %bb.0:626; SSE41-NEXT:    movdqa %xmm0, %xmm2627; SSE41-NEXT:    paddd %xmm1, %xmm2628; SSE41-NEXT:    pcmpgtd %xmm2, %xmm0629; SSE41-NEXT:    pxor %xmm1, %xmm0630; SSE41-NEXT:    movdqa %xmm2, %xmm1631; SSE41-NEXT:    psrad $31, %xmm1632; SSE41-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1633; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm2634; SSE41-NEXT:    movaps %xmm2, %xmm0635; SSE41-NEXT:    retq636;637; AVX1-LABEL: v2i32:638; AVX1:       # %bb.0:639; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm2640; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0641; AVX1-NEXT:    vpxor %xmm0, %xmm1, %xmm0642; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm1643; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1644; AVX1-NEXT:    vblendvps %xmm0, %xmm1, %xmm2, %xmm0645; AVX1-NEXT:    retq646;647; AVX2-LABEL: v2i32:648; AVX2:       # %bb.0:649; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm2650; AVX2-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0651; AVX2-NEXT:    vpxor %xmm0, %xmm1, %xmm0652; AVX2-NEXT:    vpsrad $31, %xmm2, %xmm1653; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]654; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1655; AVX2-NEXT:    vblendvps %xmm0, %xmm1, %xmm2, %xmm0656; AVX2-NEXT:    retq657;658; AVX512F-LABEL: v2i32:659; AVX512F:       # %bb.0:660; AVX512F-NEXT:    vpaddd %xmm1, %xmm0, %xmm2661; AVX512F-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0662; AVX512F-NEXT:    vpxor %xmm0, %xmm1, %xmm0663; AVX512F-NEXT:    vpsrad $31, %xmm2, %xmm1664; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]665; AVX512F-NEXT:    vpxor %xmm3, %xmm1, %xmm1666; AVX512F-NEXT:    vblendvps %xmm0, %xmm1, %xmm2, %xmm0667; AVX512F-NEXT:    retq668;669; AVX512BW-LABEL: v2i32:670; AVX512BW:       # %bb.0:671; AVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm2672; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm2, %k0673; AVX512BW-NEXT:    vpaddd %xmm1, %xmm0, %xmm1674; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k1675; AVX512BW-NEXT:    kxorw %k1, %k0, %k1676; AVX512BW-NEXT:    vpsrad $31, %xmm1, %xmm0677; AVX512BW-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm1 {%k1}678; AVX512BW-NEXT:    vmovdqa %xmm1, %xmm0679; AVX512BW-NEXT:    retq680  %z = call <2 x i32> @llvm.sadd.sat.v2i32(<2 x i32> %x, <2 x i32> %y)681  ret <2 x i32> %z682}683 684define <4 x i32> @v4i32(<4 x i32> %x, <4 x i32> %y) nounwind {685; SSE2-LABEL: v4i32:686; SSE2:       # %bb.0:687; SSE2-NEXT:    pxor %xmm2, %xmm2688; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2689; SSE2-NEXT:    paddd %xmm0, %xmm1690; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0691; SSE2-NEXT:    pxor %xmm2, %xmm0692; SSE2-NEXT:    movdqa %xmm0, %xmm2693; SSE2-NEXT:    pandn %xmm1, %xmm2694; SSE2-NEXT:    psrad $31, %xmm1695; SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1696; SSE2-NEXT:    pand %xmm1, %xmm0697; SSE2-NEXT:    por %xmm2, %xmm0698; SSE2-NEXT:    retq699;700; SSSE3-LABEL: v4i32:701; SSSE3:       # %bb.0:702; SSSE3-NEXT:    pxor %xmm2, %xmm2703; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm2704; SSSE3-NEXT:    paddd %xmm0, %xmm1705; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0706; SSSE3-NEXT:    pxor %xmm2, %xmm0707; SSSE3-NEXT:    movdqa %xmm0, %xmm2708; SSSE3-NEXT:    pandn %xmm1, %xmm2709; SSSE3-NEXT:    psrad $31, %xmm1710; SSSE3-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1711; SSSE3-NEXT:    pand %xmm1, %xmm0712; SSSE3-NEXT:    por %xmm2, %xmm0713; SSSE3-NEXT:    retq714;715; SSE41-LABEL: v4i32:716; SSE41:       # %bb.0:717; SSE41-NEXT:    movdqa %xmm0, %xmm2718; SSE41-NEXT:    paddd %xmm1, %xmm2719; SSE41-NEXT:    pcmpgtd %xmm2, %xmm0720; SSE41-NEXT:    pxor %xmm1, %xmm0721; SSE41-NEXT:    movdqa %xmm2, %xmm1722; SSE41-NEXT:    psrad $31, %xmm1723; SSE41-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1724; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm2725; SSE41-NEXT:    movaps %xmm2, %xmm0726; SSE41-NEXT:    retq727;728; AVX1-LABEL: v4i32:729; AVX1:       # %bb.0:730; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm2731; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0732; AVX1-NEXT:    vpxor %xmm0, %xmm1, %xmm0733; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm1734; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1735; AVX1-NEXT:    vblendvps %xmm0, %xmm1, %xmm2, %xmm0736; AVX1-NEXT:    retq737;738; AVX2-LABEL: v4i32:739; AVX2:       # %bb.0:740; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm2741; AVX2-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0742; AVX2-NEXT:    vpxor %xmm0, %xmm1, %xmm0743; AVX2-NEXT:    vpsrad $31, %xmm2, %xmm1744; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]745; AVX2-NEXT:    vpxor %xmm3, %xmm1, %xmm1746; AVX2-NEXT:    vblendvps %xmm0, %xmm1, %xmm2, %xmm0747; AVX2-NEXT:    retq748;749; AVX512F-LABEL: v4i32:750; AVX512F:       # %bb.0:751; AVX512F-NEXT:    vpaddd %xmm1, %xmm0, %xmm2752; AVX512F-NEXT:    vpcmpgtd %xmm2, %xmm0, %xmm0753; AVX512F-NEXT:    vpxor %xmm0, %xmm1, %xmm0754; AVX512F-NEXT:    vpsrad $31, %xmm2, %xmm1755; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]756; AVX512F-NEXT:    vpxor %xmm3, %xmm1, %xmm1757; AVX512F-NEXT:    vblendvps %xmm0, %xmm1, %xmm2, %xmm0758; AVX512F-NEXT:    retq759;760; AVX512BW-LABEL: v4i32:761; AVX512BW:       # %bb.0:762; AVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm2763; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm2, %k0764; AVX512BW-NEXT:    vpaddd %xmm1, %xmm0, %xmm1765; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k1766; AVX512BW-NEXT:    kxorw %k1, %k0, %k1767; AVX512BW-NEXT:    vpsrad $31, %xmm1, %xmm0768; AVX512BW-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm1 {%k1}769; AVX512BW-NEXT:    vmovdqa %xmm1, %xmm0770; AVX512BW-NEXT:    retq771  %z = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %x, <4 x i32> %y)772  ret <4 x i32> %z773}774 775define <8 x i32> @v8i32(<8 x i32> %x, <8 x i32> %y) nounwind {776; SSE2-LABEL: v8i32:777; SSE2:       # %bb.0:778; SSE2-NEXT:    pxor %xmm4, %xmm4779; SSE2-NEXT:    pxor %xmm5, %xmm5780; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5781; SSE2-NEXT:    paddd %xmm0, %xmm2782; SSE2-NEXT:    pcmpgtd %xmm2, %xmm0783; SSE2-NEXT:    pxor %xmm5, %xmm0784; SSE2-NEXT:    movdqa %xmm0, %xmm5785; SSE2-NEXT:    pandn %xmm2, %xmm5786; SSE2-NEXT:    psrad $31, %xmm2787; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]788; SSE2-NEXT:    pxor %xmm6, %xmm2789; SSE2-NEXT:    pand %xmm2, %xmm0790; SSE2-NEXT:    por %xmm5, %xmm0791; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4792; SSE2-NEXT:    paddd %xmm1, %xmm3793; SSE2-NEXT:    pcmpgtd %xmm3, %xmm1794; SSE2-NEXT:    pxor %xmm4, %xmm1795; SSE2-NEXT:    movdqa %xmm1, %xmm2796; SSE2-NEXT:    pandn %xmm3, %xmm2797; SSE2-NEXT:    psrad $31, %xmm3798; SSE2-NEXT:    pxor %xmm3, %xmm6799; SSE2-NEXT:    pand %xmm6, %xmm1800; SSE2-NEXT:    por %xmm2, %xmm1801; SSE2-NEXT:    retq802;803; SSSE3-LABEL: v8i32:804; SSSE3:       # %bb.0:805; SSSE3-NEXT:    pxor %xmm4, %xmm4806; SSSE3-NEXT:    pxor %xmm5, %xmm5807; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm5808; SSSE3-NEXT:    paddd %xmm0, %xmm2809; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm0810; SSSE3-NEXT:    pxor %xmm5, %xmm0811; SSSE3-NEXT:    movdqa %xmm0, %xmm5812; SSSE3-NEXT:    pandn %xmm2, %xmm5813; SSSE3-NEXT:    psrad $31, %xmm2814; SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]815; SSSE3-NEXT:    pxor %xmm6, %xmm2816; SSSE3-NEXT:    pand %xmm2, %xmm0817; SSSE3-NEXT:    por %xmm5, %xmm0818; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm4819; SSSE3-NEXT:    paddd %xmm1, %xmm3820; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm1821; SSSE3-NEXT:    pxor %xmm4, %xmm1822; SSSE3-NEXT:    movdqa %xmm1, %xmm2823; SSSE3-NEXT:    pandn %xmm3, %xmm2824; SSSE3-NEXT:    psrad $31, %xmm3825; SSSE3-NEXT:    pxor %xmm3, %xmm6826; SSSE3-NEXT:    pand %xmm6, %xmm1827; SSSE3-NEXT:    por %xmm2, %xmm1828; SSSE3-NEXT:    retq829;830; SSE41-LABEL: v8i32:831; SSE41:       # %bb.0:832; SSE41-NEXT:    movdqa %xmm1, %xmm5833; SSE41-NEXT:    movdqa %xmm0, %xmm4834; SSE41-NEXT:    paddd %xmm2, %xmm4835; SSE41-NEXT:    pcmpgtd %xmm4, %xmm0836; SSE41-NEXT:    pxor %xmm2, %xmm0837; SSE41-NEXT:    movdqa %xmm4, %xmm1838; SSE41-NEXT:    psrad $31, %xmm1839; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]840; SSE41-NEXT:    pxor %xmm2, %xmm1841; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm4842; SSE41-NEXT:    movdqa %xmm5, %xmm1843; SSE41-NEXT:    paddd %xmm3, %xmm1844; SSE41-NEXT:    pcmpgtd %xmm1, %xmm5845; SSE41-NEXT:    pxor %xmm3, %xmm5846; SSE41-NEXT:    movdqa %xmm1, %xmm3847; SSE41-NEXT:    psrad $31, %xmm3848; SSE41-NEXT:    pxor %xmm2, %xmm3849; SSE41-NEXT:    movdqa %xmm5, %xmm0850; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm1851; SSE41-NEXT:    movaps %xmm4, %xmm0852; SSE41-NEXT:    retq853;854; AVX1-LABEL: v8i32:855; AVX1:       # %bb.0:856; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2857; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3858; AVX1-NEXT:    vpaddd %xmm2, %xmm3, %xmm2859; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm4860; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm5861; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm3, %xmm3862; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm0, %xmm0863; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0864; AVX1-NEXT:    vxorps %ymm0, %ymm1, %ymm0865; AVX1-NEXT:    vpsrad $31, %xmm4, %xmm1866; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm2867; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1868; AVX1-NEXT:    vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1869; AVX1-NEXT:    vblendvps %ymm0, %ymm1, %ymm5, %ymm0870; AVX1-NEXT:    retq871;872; AVX2-LABEL: v8i32:873; AVX2:       # %bb.0:874; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm2875; AVX2-NEXT:    vpcmpgtd %ymm2, %ymm0, %ymm0876; AVX2-NEXT:    vpxor %ymm0, %ymm1, %ymm0877; AVX2-NEXT:    vpsrad $31, %ymm2, %ymm1878; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]879; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm1880; AVX2-NEXT:    vblendvps %ymm0, %ymm1, %ymm2, %ymm0881; AVX2-NEXT:    retq882;883; AVX512F-LABEL: v8i32:884; AVX512F:       # %bb.0:885; AVX512F-NEXT:    vpaddd %ymm1, %ymm0, %ymm2886; AVX512F-NEXT:    vpcmpgtd %ymm2, %ymm0, %ymm0887; AVX512F-NEXT:    vpxor %ymm0, %ymm1, %ymm0888; AVX512F-NEXT:    vpsrad $31, %ymm2, %ymm1889; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]890; AVX512F-NEXT:    vpxor %ymm3, %ymm1, %ymm1891; AVX512F-NEXT:    vblendvps %ymm0, %ymm1, %ymm2, %ymm0892; AVX512F-NEXT:    retq893;894; AVX512BW-LABEL: v8i32:895; AVX512BW:       # %bb.0:896; AVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm2897; AVX512BW-NEXT:    vpcmpgtd %ymm1, %ymm2, %k0898; AVX512BW-NEXT:    vpaddd %ymm1, %ymm0, %ymm1899; AVX512BW-NEXT:    vpcmpgtd %ymm1, %ymm0, %k1900; AVX512BW-NEXT:    kxorw %k1, %k0, %k1901; AVX512BW-NEXT:    vpsrad $31, %ymm1, %ymm0902; AVX512BW-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm1 {%k1}903; AVX512BW-NEXT:    vmovdqa %ymm1, %ymm0904; AVX512BW-NEXT:    retq905  %z = call <8 x i32> @llvm.sadd.sat.v8i32(<8 x i32> %x, <8 x i32> %y)906  ret <8 x i32> %z907}908 909define <16 x i32> @v16i32(<16 x i32> %x, <16 x i32> %y) nounwind {910; SSE2-LABEL: v16i32:911; SSE2:       # %bb.0:912; SSE2-NEXT:    pxor %xmm8, %xmm8913; SSE2-NEXT:    pxor %xmm9, %xmm9914; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9915; SSE2-NEXT:    paddd %xmm0, %xmm4916; SSE2-NEXT:    pcmpgtd %xmm4, %xmm0917; SSE2-NEXT:    pxor %xmm9, %xmm0918; SSE2-NEXT:    movdqa %xmm0, %xmm10919; SSE2-NEXT:    pandn %xmm4, %xmm10920; SSE2-NEXT:    psrad $31, %xmm4921; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]922; SSE2-NEXT:    pxor %xmm9, %xmm4923; SSE2-NEXT:    pand %xmm4, %xmm0924; SSE2-NEXT:    por %xmm10, %xmm0925; SSE2-NEXT:    pxor %xmm4, %xmm4926; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4927; SSE2-NEXT:    paddd %xmm1, %xmm5928; SSE2-NEXT:    pcmpgtd %xmm5, %xmm1929; SSE2-NEXT:    pxor %xmm4, %xmm1930; SSE2-NEXT:    movdqa %xmm1, %xmm4931; SSE2-NEXT:    pandn %xmm5, %xmm4932; SSE2-NEXT:    psrad $31, %xmm5933; SSE2-NEXT:    pxor %xmm9, %xmm5934; SSE2-NEXT:    pand %xmm5, %xmm1935; SSE2-NEXT:    por %xmm4, %xmm1936; SSE2-NEXT:    pxor %xmm4, %xmm4937; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4938; SSE2-NEXT:    paddd %xmm2, %xmm6939; SSE2-NEXT:    pcmpgtd %xmm6, %xmm2940; SSE2-NEXT:    pxor %xmm4, %xmm2941; SSE2-NEXT:    movdqa %xmm2, %xmm4942; SSE2-NEXT:    pandn %xmm6, %xmm4943; SSE2-NEXT:    psrad $31, %xmm6944; SSE2-NEXT:    pxor %xmm9, %xmm6945; SSE2-NEXT:    pand %xmm6, %xmm2946; SSE2-NEXT:    por %xmm4, %xmm2947; SSE2-NEXT:    pcmpgtd %xmm7, %xmm8948; SSE2-NEXT:    paddd %xmm3, %xmm7949; SSE2-NEXT:    pcmpgtd %xmm7, %xmm3950; SSE2-NEXT:    pxor %xmm8, %xmm3951; SSE2-NEXT:    movdqa %xmm3, %xmm4952; SSE2-NEXT:    pandn %xmm7, %xmm4953; SSE2-NEXT:    psrad $31, %xmm7954; SSE2-NEXT:    pxor %xmm7, %xmm9955; SSE2-NEXT:    pand %xmm9, %xmm3956; SSE2-NEXT:    por %xmm4, %xmm3957; SSE2-NEXT:    retq958;959; SSSE3-LABEL: v16i32:960; SSSE3:       # %bb.0:961; SSSE3-NEXT:    pxor %xmm8, %xmm8962; SSSE3-NEXT:    pxor %xmm9, %xmm9963; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm9964; SSSE3-NEXT:    paddd %xmm0, %xmm4965; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm0966; SSSE3-NEXT:    pxor %xmm9, %xmm0967; SSSE3-NEXT:    movdqa %xmm0, %xmm10968; SSSE3-NEXT:    pandn %xmm4, %xmm10969; SSSE3-NEXT:    psrad $31, %xmm4970; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]971; SSSE3-NEXT:    pxor %xmm9, %xmm4972; SSSE3-NEXT:    pand %xmm4, %xmm0973; SSSE3-NEXT:    por %xmm10, %xmm0974; SSSE3-NEXT:    pxor %xmm4, %xmm4975; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm4976; SSSE3-NEXT:    paddd %xmm1, %xmm5977; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm1978; SSSE3-NEXT:    pxor %xmm4, %xmm1979; SSSE3-NEXT:    movdqa %xmm1, %xmm4980; SSSE3-NEXT:    pandn %xmm5, %xmm4981; SSSE3-NEXT:    psrad $31, %xmm5982; SSSE3-NEXT:    pxor %xmm9, %xmm5983; SSSE3-NEXT:    pand %xmm5, %xmm1984; SSSE3-NEXT:    por %xmm4, %xmm1985; SSSE3-NEXT:    pxor %xmm4, %xmm4986; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm4987; SSSE3-NEXT:    paddd %xmm2, %xmm6988; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm2989; SSSE3-NEXT:    pxor %xmm4, %xmm2990; SSSE3-NEXT:    movdqa %xmm2, %xmm4991; SSSE3-NEXT:    pandn %xmm6, %xmm4992; SSSE3-NEXT:    psrad $31, %xmm6993; SSSE3-NEXT:    pxor %xmm9, %xmm6994; SSSE3-NEXT:    pand %xmm6, %xmm2995; SSSE3-NEXT:    por %xmm4, %xmm2996; SSSE3-NEXT:    pcmpgtd %xmm7, %xmm8997; SSSE3-NEXT:    paddd %xmm3, %xmm7998; SSSE3-NEXT:    pcmpgtd %xmm7, %xmm3999; SSSE3-NEXT:    pxor %xmm8, %xmm31000; SSSE3-NEXT:    movdqa %xmm3, %xmm41001; SSSE3-NEXT:    pandn %xmm7, %xmm41002; SSSE3-NEXT:    psrad $31, %xmm71003; SSSE3-NEXT:    pxor %xmm7, %xmm91004; SSSE3-NEXT:    pand %xmm9, %xmm31005; SSSE3-NEXT:    por %xmm4, %xmm31006; SSSE3-NEXT:    retq1007;1008; SSE41-LABEL: v16i32:1009; SSE41:       # %bb.0:1010; SSE41-NEXT:    movdqa %xmm3, %xmm111011; SSE41-NEXT:    movdqa %xmm2, %xmm81012; SSE41-NEXT:    movdqa %xmm1, %xmm91013; SSE41-NEXT:    movdqa %xmm0, %xmm101014; SSE41-NEXT:    paddd %xmm4, %xmm101015; SSE41-NEXT:    pcmpgtd %xmm10, %xmm01016; SSE41-NEXT:    pxor %xmm4, %xmm01017; SSE41-NEXT:    movdqa %xmm10, %xmm11018; SSE41-NEXT:    psrad $31, %xmm11019; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]1020; SSE41-NEXT:    pxor %xmm4, %xmm11021; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm101022; SSE41-NEXT:    movdqa %xmm9, %xmm11023; SSE41-NEXT:    paddd %xmm5, %xmm11024; SSE41-NEXT:    pcmpgtd %xmm1, %xmm91025; SSE41-NEXT:    pxor %xmm5, %xmm91026; SSE41-NEXT:    movdqa %xmm1, %xmm21027; SSE41-NEXT:    psrad $31, %xmm21028; SSE41-NEXT:    pxor %xmm4, %xmm21029; SSE41-NEXT:    movdqa %xmm9, %xmm01030; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm11031; SSE41-NEXT:    movdqa %xmm8, %xmm21032; SSE41-NEXT:    paddd %xmm6, %xmm21033; SSE41-NEXT:    pcmpgtd %xmm2, %xmm81034; SSE41-NEXT:    pxor %xmm6, %xmm81035; SSE41-NEXT:    movdqa %xmm2, %xmm31036; SSE41-NEXT:    psrad $31, %xmm31037; SSE41-NEXT:    pxor %xmm4, %xmm31038; SSE41-NEXT:    movdqa %xmm8, %xmm01039; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm21040; SSE41-NEXT:    movdqa %xmm11, %xmm31041; SSE41-NEXT:    paddd %xmm7, %xmm31042; SSE41-NEXT:    pcmpgtd %xmm3, %xmm111043; SSE41-NEXT:    pxor %xmm7, %xmm111044; SSE41-NEXT:    movdqa %xmm3, %xmm51045; SSE41-NEXT:    psrad $31, %xmm51046; SSE41-NEXT:    pxor %xmm4, %xmm51047; SSE41-NEXT:    movdqa %xmm11, %xmm01048; SSE41-NEXT:    blendvps %xmm0, %xmm5, %xmm31049; SSE41-NEXT:    movaps %xmm10, %xmm01050; SSE41-NEXT:    retq1051;1052; AVX1-LABEL: v16i32:1053; AVX1:       # %bb.0:1054; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm41055; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm51056; AVX1-NEXT:    vpaddd %xmm4, %xmm5, %xmm41057; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm61058; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm71059; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm5, %xmm51060; AVX1-NEXT:    vpcmpgtd %xmm6, %xmm0, %xmm01061; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm01062; AVX1-NEXT:    vxorps %ymm0, %ymm2, %ymm01063; AVX1-NEXT:    vpsrad $31, %xmm6, %xmm21064; AVX1-NEXT:    vpsrad $31, %xmm4, %xmm41065; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm21066; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm4 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]1067; AVX1-NEXT:    vxorps %ymm4, %ymm2, %ymm21068; AVX1-NEXT:    vblendvps %ymm0, %ymm2, %ymm7, %ymm01069; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm21070; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm51071; AVX1-NEXT:    vpaddd %xmm2, %xmm5, %xmm21072; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm61073; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm6, %ymm71074; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm5, %xmm51075; AVX1-NEXT:    vpcmpgtd %xmm6, %xmm1, %xmm11076; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm11077; AVX1-NEXT:    vxorps %ymm1, %ymm3, %ymm11078; AVX1-NEXT:    vpsrad $31, %xmm6, %xmm31079; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm21080; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm21081; AVX1-NEXT:    vxorps %ymm4, %ymm2, %ymm21082; AVX1-NEXT:    vblendvps %ymm1, %ymm2, %ymm7, %ymm11083; AVX1-NEXT:    retq1084;1085; AVX2-LABEL: v16i32:1086; AVX2:       # %bb.0:1087; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm41088; AVX2-NEXT:    vpcmpgtd %ymm4, %ymm0, %ymm01089; AVX2-NEXT:    vpxor %ymm0, %ymm2, %ymm01090; AVX2-NEXT:    vpsrad $31, %ymm4, %ymm21091; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]1092; AVX2-NEXT:    vpxor %ymm5, %ymm2, %ymm21093; AVX2-NEXT:    vblendvps %ymm0, %ymm2, %ymm4, %ymm01094; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm21095; AVX2-NEXT:    vpcmpgtd %ymm2, %ymm1, %ymm11096; AVX2-NEXT:    vpxor %ymm1, %ymm3, %ymm11097; AVX2-NEXT:    vpsrad $31, %ymm2, %ymm31098; AVX2-NEXT:    vpxor %ymm5, %ymm3, %ymm31099; AVX2-NEXT:    vblendvps %ymm1, %ymm3, %ymm2, %ymm11100; AVX2-NEXT:    retq1101;1102; AVX512-LABEL: v16i32:1103; AVX512:       # %bb.0:1104; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm21105; AVX512-NEXT:    vpcmpgtd %zmm1, %zmm2, %k01106; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm11107; AVX512-NEXT:    vpcmpgtd %zmm1, %zmm0, %k11108; AVX512-NEXT:    kxorw %k1, %k0, %k11109; AVX512-NEXT:    vpsrad $31, %zmm1, %zmm01110; AVX512-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm1 {%k1}1111; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm01112; AVX512-NEXT:    retq1113  %z = call <16 x i32> @llvm.sadd.sat.v16i32(<16 x i32> %x, <16 x i32> %y)1114  ret <16 x i32> %z1115}1116 1117define <2 x i64> @v2i64(<2 x i64> %x, <2 x i64> %y) nounwind {1118; SSE2-LABEL: v2i64:1119; SSE2:       # %bb.0:1120; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]1121; SSE2-NEXT:    movdqa %xmm0, %xmm31122; SSE2-NEXT:    pxor %xmm2, %xmm31123; SSE2-NEXT:    paddq %xmm1, %xmm01124; SSE2-NEXT:    pxor %xmm0, %xmm21125; SSE2-NEXT:    movdqa %xmm3, %xmm41126; SSE2-NEXT:    pcmpgtd %xmm2, %xmm41127; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1128; SSE2-NEXT:    pcmpeqd %xmm3, %xmm21129; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1130; SSE2-NEXT:    pand %xmm5, %xmm21131; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]1132; SSE2-NEXT:    por %xmm2, %xmm31133; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1134; SSE2-NEXT:    pxor %xmm2, %xmm21135; SSE2-NEXT:    pcmpgtd %xmm1, %xmm21136; SSE2-NEXT:    pxor %xmm3, %xmm21137; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]1138; SSE2-NEXT:    psrad $31, %xmm11139; SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11140; SSE2-NEXT:    pand %xmm2, %xmm11141; SSE2-NEXT:    pandn %xmm0, %xmm21142; SSE2-NEXT:    por %xmm2, %xmm11143; SSE2-NEXT:    movdqa %xmm1, %xmm01144; SSE2-NEXT:    retq1145;1146; SSSE3-LABEL: v2i64:1147; SSSE3:       # %bb.0:1148; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]1149; SSSE3-NEXT:    movdqa %xmm0, %xmm31150; SSSE3-NEXT:    pxor %xmm2, %xmm31151; SSSE3-NEXT:    paddq %xmm1, %xmm01152; SSSE3-NEXT:    pxor %xmm0, %xmm21153; SSSE3-NEXT:    movdqa %xmm3, %xmm41154; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm41155; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]1156; SSSE3-NEXT:    pcmpeqd %xmm3, %xmm21157; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]1158; SSSE3-NEXT:    pand %xmm5, %xmm21159; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]1160; SSSE3-NEXT:    por %xmm2, %xmm31161; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]1162; SSSE3-NEXT:    pxor %xmm2, %xmm21163; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm21164; SSSE3-NEXT:    pxor %xmm3, %xmm21165; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]1166; SSSE3-NEXT:    psrad $31, %xmm11167; SSSE3-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11168; SSSE3-NEXT:    pand %xmm2, %xmm11169; SSSE3-NEXT:    pandn %xmm0, %xmm21170; SSSE3-NEXT:    por %xmm2, %xmm11171; SSSE3-NEXT:    movdqa %xmm1, %xmm01172; SSSE3-NEXT:    retq1173;1174; SSE41-LABEL: v2i64:1175; SSE41:       # %bb.0:1176; SSE41-NEXT:    movdqa %xmm0, %xmm21177; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = [2147483648,2147483648]1178; SSE41-NEXT:    movdqa %xmm2, %xmm41179; SSE41-NEXT:    pxor %xmm0, %xmm41180; SSE41-NEXT:    paddq %xmm1, %xmm21181; SSE41-NEXT:    pxor %xmm2, %xmm01182; SSE41-NEXT:    movdqa %xmm4, %xmm51183; SSE41-NEXT:    pcmpeqd %xmm0, %xmm51184; SSE41-NEXT:    pcmpgtd %xmm0, %xmm41185; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,0,2,2]1186; SSE41-NEXT:    pand %xmm5, %xmm31187; SSE41-NEXT:    por %xmm4, %xmm31188; SSE41-NEXT:    pxor %xmm1, %xmm31189; SSE41-NEXT:    movapd {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]1190; SSE41-NEXT:    movdqa %xmm2, %xmm01191; SSE41-NEXT:    blendvpd %xmm0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11192; SSE41-NEXT:    movdqa %xmm3, %xmm01193; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm21194; SSE41-NEXT:    movapd %xmm2, %xmm01195; SSE41-NEXT:    retq1196;1197; AVX1-LABEL: v2i64:1198; AVX1:       # %bb.0:1199; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm21200; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]1201; AVX1-NEXT:    # xmm3 = mem[0,0]1202; AVX1-NEXT:    vblendvpd %xmm2, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31203; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm01204; AVX1-NEXT:    vpxor %xmm0, %xmm1, %xmm01205; AVX1-NEXT:    vblendvpd %xmm0, %xmm3, %xmm2, %xmm01206; AVX1-NEXT:    retq1207;1208; AVX2-LABEL: v2i64:1209; AVX2:       # %bb.0:1210; AVX2-NEXT:    vpaddq %xmm1, %xmm0, %xmm21211; AVX2-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]1212; AVX2-NEXT:    # xmm3 = mem[0,0]1213; AVX2-NEXT:    vblendvpd %xmm2, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31214; AVX2-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm01215; AVX2-NEXT:    vpxor %xmm0, %xmm1, %xmm01216; AVX2-NEXT:    vblendvpd %xmm0, %xmm3, %xmm2, %xmm01217; AVX2-NEXT:    retq1218;1219; AVX512F-LABEL: v2i64:1220; AVX512F:       # %bb.0:1221; AVX512F-NEXT:    vpaddq %xmm1, %xmm0, %xmm21222; AVX512F-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]1223; AVX512F-NEXT:    # xmm3 = mem[0,0]1224; AVX512F-NEXT:    vblendvpd %xmm2, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31225; AVX512F-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm01226; AVX512F-NEXT:    vpxor %xmm0, %xmm1, %xmm01227; AVX512F-NEXT:    vblendvpd %xmm0, %xmm3, %xmm2, %xmm01228; AVX512F-NEXT:    retq1229;1230; AVX512BW-LABEL: v2i64:1231; AVX512BW:       # %bb.0:1232; AVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm21233; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm2, %k01234; AVX512BW-NEXT:    vpaddq %xmm1, %xmm0, %xmm11235; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm0, %k11236; AVX512BW-NEXT:    kxorw %k1, %k0, %k11237; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm2, %k21238; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]1239; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} xmm0 {%k2} = [9223372036854775807,9223372036854775807]1240; AVX512BW-NEXT:    vmovdqa64 %xmm0, %xmm1 {%k1}1241; AVX512BW-NEXT:    vmovdqa %xmm1, %xmm01242; AVX512BW-NEXT:    retq1243  %z = call <2 x i64> @llvm.sadd.sat.v2i64(<2 x i64> %x, <2 x i64> %y)1244  ret <2 x i64> %z1245}1246 1247define <4 x i64> @v4i64(<4 x i64> %x, <4 x i64> %y) nounwind {1248; SSE2-LABEL: v4i64:1249; SSE2:       # %bb.0:1250; SSE2-NEXT:    movdqa %xmm0, %xmm41251; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648]1252; SSE2-NEXT:    pxor %xmm6, %xmm01253; SSE2-NEXT:    paddq %xmm2, %xmm41254; SSE2-NEXT:    movdqa %xmm4, %xmm51255; SSE2-NEXT:    pxor %xmm6, %xmm51256; SSE2-NEXT:    movdqa %xmm0, %xmm71257; SSE2-NEXT:    pcmpgtd %xmm5, %xmm71258; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]1259; SSE2-NEXT:    pcmpeqd %xmm0, %xmm51260; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]1261; SSE2-NEXT:    pand %xmm8, %xmm01262; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]1263; SSE2-NEXT:    por %xmm0, %xmm71264; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]1265; SSE2-NEXT:    pxor %xmm5, %xmm51266; SSE2-NEXT:    pxor %xmm2, %xmm21267; SSE2-NEXT:    pcmpgtd %xmm0, %xmm21268; SSE2-NEXT:    pxor %xmm7, %xmm21269; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]1270; SSE2-NEXT:    psrad $31, %xmm01271; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]1272; SSE2-NEXT:    pxor %xmm7, %xmm01273; SSE2-NEXT:    pand %xmm2, %xmm01274; SSE2-NEXT:    pandn %xmm4, %xmm21275; SSE2-NEXT:    por %xmm2, %xmm01276; SSE2-NEXT:    movdqa %xmm1, %xmm21277; SSE2-NEXT:    pxor %xmm6, %xmm21278; SSE2-NEXT:    paddq %xmm3, %xmm11279; SSE2-NEXT:    pxor %xmm1, %xmm61280; SSE2-NEXT:    movdqa %xmm2, %xmm41281; SSE2-NEXT:    pcmpgtd %xmm6, %xmm41282; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm4[0,0,2,2]1283; SSE2-NEXT:    pcmpeqd %xmm2, %xmm61284; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]1285; SSE2-NEXT:    pand %xmm8, %xmm21286; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]1287; SSE2-NEXT:    por %xmm2, %xmm41288; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]1289; SSE2-NEXT:    pcmpgtd %xmm2, %xmm51290; SSE2-NEXT:    pxor %xmm4, %xmm51291; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]1292; SSE2-NEXT:    psrad $31, %xmm21293; SSE2-NEXT:    pxor %xmm7, %xmm21294; SSE2-NEXT:    pand %xmm5, %xmm21295; SSE2-NEXT:    pandn %xmm1, %xmm51296; SSE2-NEXT:    por %xmm5, %xmm21297; SSE2-NEXT:    movdqa %xmm2, %xmm11298; SSE2-NEXT:    retq1299;1300; SSSE3-LABEL: v4i64:1301; SSSE3:       # %bb.0:1302; SSSE3-NEXT:    movdqa %xmm0, %xmm41303; SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648]1304; SSSE3-NEXT:    pxor %xmm6, %xmm01305; SSSE3-NEXT:    paddq %xmm2, %xmm41306; SSSE3-NEXT:    movdqa %xmm4, %xmm51307; SSSE3-NEXT:    pxor %xmm6, %xmm51308; SSSE3-NEXT:    movdqa %xmm0, %xmm71309; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm71310; SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]1311; SSSE3-NEXT:    pcmpeqd %xmm0, %xmm51312; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]1313; SSSE3-NEXT:    pand %xmm8, %xmm01314; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]1315; SSSE3-NEXT:    por %xmm0, %xmm71316; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]1317; SSSE3-NEXT:    pxor %xmm5, %xmm51318; SSSE3-NEXT:    pxor %xmm2, %xmm21319; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm21320; SSSE3-NEXT:    pxor %xmm7, %xmm21321; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]1322; SSSE3-NEXT:    psrad $31, %xmm01323; SSSE3-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]1324; SSSE3-NEXT:    pxor %xmm7, %xmm01325; SSSE3-NEXT:    pand %xmm2, %xmm01326; SSSE3-NEXT:    pandn %xmm4, %xmm21327; SSSE3-NEXT:    por %xmm2, %xmm01328; SSSE3-NEXT:    movdqa %xmm1, %xmm21329; SSSE3-NEXT:    pxor %xmm6, %xmm21330; SSSE3-NEXT:    paddq %xmm3, %xmm11331; SSSE3-NEXT:    pxor %xmm1, %xmm61332; SSSE3-NEXT:    movdqa %xmm2, %xmm41333; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm41334; SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm4[0,0,2,2]1335; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm61336; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]1337; SSSE3-NEXT:    pand %xmm8, %xmm21338; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]1339; SSSE3-NEXT:    por %xmm2, %xmm41340; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]1341; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm51342; SSSE3-NEXT:    pxor %xmm4, %xmm51343; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]1344; SSSE3-NEXT:    psrad $31, %xmm21345; SSSE3-NEXT:    pxor %xmm7, %xmm21346; SSSE3-NEXT:    pand %xmm5, %xmm21347; SSSE3-NEXT:    pandn %xmm1, %xmm51348; SSSE3-NEXT:    por %xmm5, %xmm21349; SSSE3-NEXT:    movdqa %xmm2, %xmm11350; SSSE3-NEXT:    retq1351;1352; SSE41-LABEL: v4i64:1353; SSE41:       # %bb.0:1354; SSE41-NEXT:    movdqa %xmm0, %xmm41355; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm6 = [2147483648,2147483648]1356; SSE41-NEXT:    pxor %xmm6, %xmm01357; SSE41-NEXT:    paddq %xmm2, %xmm41358; SSE41-NEXT:    movdqa %xmm4, %xmm51359; SSE41-NEXT:    pxor %xmm6, %xmm51360; SSE41-NEXT:    movdqa %xmm0, %xmm71361; SSE41-NEXT:    pcmpeqd %xmm5, %xmm71362; SSE41-NEXT:    pcmpgtd %xmm5, %xmm01363; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2]1364; SSE41-NEXT:    pand %xmm7, %xmm51365; SSE41-NEXT:    por %xmm0, %xmm51366; SSE41-NEXT:    pxor %xmm2, %xmm51367; SSE41-NEXT:    movapd {{.*#+}} xmm7 = [9223372036854775807,9223372036854775807]1368; SSE41-NEXT:    movapd {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]1369; SSE41-NEXT:    movapd %xmm8, %xmm21370; SSE41-NEXT:    movdqa %xmm4, %xmm01371; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm21372; SSE41-NEXT:    movdqa %xmm5, %xmm01373; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm41374; SSE41-NEXT:    movdqa %xmm1, %xmm01375; SSE41-NEXT:    pxor %xmm6, %xmm01376; SSE41-NEXT:    paddq %xmm3, %xmm11377; SSE41-NEXT:    pxor %xmm1, %xmm61378; SSE41-NEXT:    movdqa %xmm0, %xmm51379; SSE41-NEXT:    pcmpeqd %xmm6, %xmm51380; SSE41-NEXT:    pcmpgtd %xmm6, %xmm01381; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[0,0,2,2]1382; SSE41-NEXT:    pand %xmm5, %xmm21383; SSE41-NEXT:    por %xmm0, %xmm21384; SSE41-NEXT:    pxor %xmm3, %xmm21385; SSE41-NEXT:    movdqa %xmm1, %xmm01386; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm81387; SSE41-NEXT:    movdqa %xmm2, %xmm01388; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm11389; SSE41-NEXT:    movapd %xmm4, %xmm01390; SSE41-NEXT:    retq1391;1392; AVX1-LABEL: v4i64:1393; AVX1:       # %bb.0:1394; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21395; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31396; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm21397; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm41398; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm51399; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm31400; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm01401; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01402; AVX1-NEXT:    vxorpd %ymm0, %ymm1, %ymm01403; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm11404; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm21405; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm1, %xmm11406; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11407; AVX1-NEXT:    vxorpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11408; AVX1-NEXT:    vblendvpd %ymm0, %ymm1, %ymm5, %ymm01409; AVX1-NEXT:    retq1410;1411; AVX2-LABEL: v4i64:1412; AVX2:       # %bb.0:1413; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm21414; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm01415; AVX2-NEXT:    vpxor %ymm0, %ymm1, %ymm01416; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm11417; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm11418; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1419; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm11420; AVX2-NEXT:    vblendvpd %ymm0, %ymm1, %ymm2, %ymm01421; AVX2-NEXT:    retq1422;1423; AVX512F-LABEL: v4i64:1424; AVX512F:       # %bb.0:1425; AVX512F-NEXT:    vpaddq %ymm1, %ymm0, %ymm21426; AVX512F-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm01427; AVX512F-NEXT:    vpxor %ymm0, %ymm1, %ymm01428; AVX512F-NEXT:    vpsraq $63, %zmm2, %zmm11429; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1430; AVX512F-NEXT:    vpxor %ymm3, %ymm1, %ymm11431; AVX512F-NEXT:    vblendvpd %ymm0, %ymm1, %ymm2, %ymm01432; AVX512F-NEXT:    retq1433;1434; AVX512BW-LABEL: v4i64:1435; AVX512BW:       # %bb.0:1436; AVX512BW-NEXT:    vpxor %xmm2, %xmm2, %xmm21437; AVX512BW-NEXT:    vpcmpgtq %ymm1, %ymm2, %k01438; AVX512BW-NEXT:    vpaddq %ymm1, %ymm0, %ymm11439; AVX512BW-NEXT:    vpcmpgtq %ymm1, %ymm0, %k11440; AVX512BW-NEXT:    kxorw %k1, %k0, %k11441; AVX512BW-NEXT:    vpsraq $63, %ymm1, %ymm01442; AVX512BW-NEXT:    vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm1 {%k1}1443; AVX512BW-NEXT:    vmovdqa %ymm1, %ymm01444; AVX512BW-NEXT:    retq1445  %z = call <4 x i64> @llvm.sadd.sat.v4i64(<4 x i64> %x, <4 x i64> %y)1446  ret <4 x i64> %z1447}1448 1449define <8 x i64> @v8i64(<8 x i64> %x, <8 x i64> %y) nounwind {1450; SSE2-LABEL: v8i64:1451; SSE2:       # %bb.0:1452; SSE2-NEXT:    movdqa %xmm1, %xmm81453; SSE2-NEXT:    movdqa %xmm0, %xmm11454; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]1455; SSE2-NEXT:    pxor %xmm10, %xmm01456; SSE2-NEXT:    paddq %xmm4, %xmm11457; SSE2-NEXT:    movdqa %xmm1, %xmm91458; SSE2-NEXT:    pxor %xmm10, %xmm91459; SSE2-NEXT:    movdqa %xmm0, %xmm111460; SSE2-NEXT:    pcmpgtd %xmm9, %xmm111461; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]1462; SSE2-NEXT:    pcmpeqd %xmm0, %xmm91463; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[1,1,3,3]1464; SSE2-NEXT:    pand %xmm12, %xmm01465; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]1466; SSE2-NEXT:    por %xmm0, %xmm111467; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]1468; SSE2-NEXT:    pxor %xmm9, %xmm91469; SSE2-NEXT:    pxor %xmm4, %xmm41470; SSE2-NEXT:    pcmpgtd %xmm0, %xmm41471; SSE2-NEXT:    pxor %xmm11, %xmm41472; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]1473; SSE2-NEXT:    psrad $31, %xmm01474; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [9223372036854775808,9223372036854775808]1475; SSE2-NEXT:    pxor %xmm11, %xmm01476; SSE2-NEXT:    pand %xmm4, %xmm01477; SSE2-NEXT:    pandn %xmm1, %xmm41478; SSE2-NEXT:    por %xmm4, %xmm01479; SSE2-NEXT:    movdqa %xmm8, %xmm11480; SSE2-NEXT:    pxor %xmm10, %xmm11481; SSE2-NEXT:    paddq %xmm5, %xmm81482; SSE2-NEXT:    movdqa %xmm8, %xmm41483; SSE2-NEXT:    pxor %xmm10, %xmm41484; SSE2-NEXT:    movdqa %xmm1, %xmm121485; SSE2-NEXT:    pcmpgtd %xmm4, %xmm121486; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]1487; SSE2-NEXT:    pcmpeqd %xmm1, %xmm41488; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]1489; SSE2-NEXT:    pand %xmm13, %xmm11490; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm12[1,1,3,3]1491; SSE2-NEXT:    por %xmm1, %xmm41492; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]1493; SSE2-NEXT:    pxor %xmm5, %xmm51494; SSE2-NEXT:    pcmpgtd %xmm1, %xmm51495; SSE2-NEXT:    pxor %xmm4, %xmm51496; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3]1497; SSE2-NEXT:    psrad $31, %xmm11498; SSE2-NEXT:    pxor %xmm11, %xmm11499; SSE2-NEXT:    pand %xmm5, %xmm11500; SSE2-NEXT:    pandn %xmm8, %xmm51501; SSE2-NEXT:    por %xmm5, %xmm11502; SSE2-NEXT:    movdqa %xmm2, %xmm41503; SSE2-NEXT:    pxor %xmm10, %xmm41504; SSE2-NEXT:    paddq %xmm6, %xmm21505; SSE2-NEXT:    movdqa %xmm2, %xmm51506; SSE2-NEXT:    pxor %xmm10, %xmm51507; SSE2-NEXT:    movdqa %xmm4, %xmm81508; SSE2-NEXT:    pcmpgtd %xmm5, %xmm81509; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm8[0,0,2,2]1510; SSE2-NEXT:    pcmpeqd %xmm4, %xmm51511; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]1512; SSE2-NEXT:    pand %xmm12, %xmm41513; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3]1514; SSE2-NEXT:    por %xmm4, %xmm51515; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[1,1,3,3]1516; SSE2-NEXT:    pxor %xmm6, %xmm61517; SSE2-NEXT:    pcmpgtd %xmm4, %xmm61518; SSE2-NEXT:    pxor %xmm5, %xmm61519; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]1520; SSE2-NEXT:    psrad $31, %xmm41521; SSE2-NEXT:    pxor %xmm11, %xmm41522; SSE2-NEXT:    pand %xmm6, %xmm41523; SSE2-NEXT:    pandn %xmm2, %xmm61524; SSE2-NEXT:    por %xmm6, %xmm41525; SSE2-NEXT:    movdqa %xmm3, %xmm21526; SSE2-NEXT:    pxor %xmm10, %xmm21527; SSE2-NEXT:    paddq %xmm7, %xmm31528; SSE2-NEXT:    pxor %xmm3, %xmm101529; SSE2-NEXT:    movdqa %xmm2, %xmm51530; SSE2-NEXT:    pcmpgtd %xmm10, %xmm51531; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]1532; SSE2-NEXT:    pcmpeqd %xmm2, %xmm101533; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm10[1,1,3,3]1534; SSE2-NEXT:    pand %xmm6, %xmm21535; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]1536; SSE2-NEXT:    por %xmm2, %xmm51537; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]1538; SSE2-NEXT:    pcmpgtd %xmm2, %xmm91539; SSE2-NEXT:    pxor %xmm5, %xmm91540; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3]1541; SSE2-NEXT:    psrad $31, %xmm51542; SSE2-NEXT:    pxor %xmm11, %xmm51543; SSE2-NEXT:    pand %xmm9, %xmm51544; SSE2-NEXT:    pandn %xmm3, %xmm91545; SSE2-NEXT:    por %xmm9, %xmm51546; SSE2-NEXT:    movdqa %xmm4, %xmm21547; SSE2-NEXT:    movdqa %xmm5, %xmm31548; SSE2-NEXT:    retq1549;1550; SSSE3-LABEL: v8i64:1551; SSSE3:       # %bb.0:1552; SSSE3-NEXT:    movdqa %xmm1, %xmm81553; SSSE3-NEXT:    movdqa %xmm0, %xmm11554; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]1555; SSSE3-NEXT:    pxor %xmm10, %xmm01556; SSSE3-NEXT:    paddq %xmm4, %xmm11557; SSSE3-NEXT:    movdqa %xmm1, %xmm91558; SSSE3-NEXT:    pxor %xmm10, %xmm91559; SSSE3-NEXT:    movdqa %xmm0, %xmm111560; SSSE3-NEXT:    pcmpgtd %xmm9, %xmm111561; SSSE3-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]1562; SSSE3-NEXT:    pcmpeqd %xmm0, %xmm91563; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[1,1,3,3]1564; SSSE3-NEXT:    pand %xmm12, %xmm01565; SSSE3-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]1566; SSSE3-NEXT:    por %xmm0, %xmm111567; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]1568; SSSE3-NEXT:    pxor %xmm9, %xmm91569; SSSE3-NEXT:    pxor %xmm4, %xmm41570; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm41571; SSSE3-NEXT:    pxor %xmm11, %xmm41572; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]1573; SSSE3-NEXT:    psrad $31, %xmm01574; SSSE3-NEXT:    movdqa {{.*#+}} xmm11 = [9223372036854775808,9223372036854775808]1575; SSSE3-NEXT:    pxor %xmm11, %xmm01576; SSSE3-NEXT:    pand %xmm4, %xmm01577; SSSE3-NEXT:    pandn %xmm1, %xmm41578; SSSE3-NEXT:    por %xmm4, %xmm01579; SSSE3-NEXT:    movdqa %xmm8, %xmm11580; SSSE3-NEXT:    pxor %xmm10, %xmm11581; SSSE3-NEXT:    paddq %xmm5, %xmm81582; SSSE3-NEXT:    movdqa %xmm8, %xmm41583; SSSE3-NEXT:    pxor %xmm10, %xmm41584; SSSE3-NEXT:    movdqa %xmm1, %xmm121585; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm121586; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]1587; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm41588; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]1589; SSSE3-NEXT:    pand %xmm13, %xmm11590; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm12[1,1,3,3]1591; SSSE3-NEXT:    por %xmm1, %xmm41592; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]1593; SSSE3-NEXT:    pxor %xmm5, %xmm51594; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm51595; SSSE3-NEXT:    pxor %xmm4, %xmm51596; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3]1597; SSSE3-NEXT:    psrad $31, %xmm11598; SSSE3-NEXT:    pxor %xmm11, %xmm11599; SSSE3-NEXT:    pand %xmm5, %xmm11600; SSSE3-NEXT:    pandn %xmm8, %xmm51601; SSSE3-NEXT:    por %xmm5, %xmm11602; SSSE3-NEXT:    movdqa %xmm2, %xmm41603; SSSE3-NEXT:    pxor %xmm10, %xmm41604; SSSE3-NEXT:    paddq %xmm6, %xmm21605; SSSE3-NEXT:    movdqa %xmm2, %xmm51606; SSSE3-NEXT:    pxor %xmm10, %xmm51607; SSSE3-NEXT:    movdqa %xmm4, %xmm81608; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm81609; SSSE3-NEXT:    pshufd {{.*#+}} xmm12 = xmm8[0,0,2,2]1610; SSSE3-NEXT:    pcmpeqd %xmm4, %xmm51611; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]1612; SSSE3-NEXT:    pand %xmm12, %xmm41613; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3]1614; SSSE3-NEXT:    por %xmm4, %xmm51615; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[1,1,3,3]1616; SSSE3-NEXT:    pxor %xmm6, %xmm61617; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm61618; SSSE3-NEXT:    pxor %xmm5, %xmm61619; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]1620; SSSE3-NEXT:    psrad $31, %xmm41621; SSSE3-NEXT:    pxor %xmm11, %xmm41622; SSSE3-NEXT:    pand %xmm6, %xmm41623; SSSE3-NEXT:    pandn %xmm2, %xmm61624; SSSE3-NEXT:    por %xmm6, %xmm41625; SSSE3-NEXT:    movdqa %xmm3, %xmm21626; SSSE3-NEXT:    pxor %xmm10, %xmm21627; SSSE3-NEXT:    paddq %xmm7, %xmm31628; SSSE3-NEXT:    pxor %xmm3, %xmm101629; SSSE3-NEXT:    movdqa %xmm2, %xmm51630; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm51631; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]1632; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm101633; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm10[1,1,3,3]1634; SSSE3-NEXT:    pand %xmm6, %xmm21635; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]1636; SSSE3-NEXT:    por %xmm2, %xmm51637; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]1638; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm91639; SSSE3-NEXT:    pxor %xmm5, %xmm91640; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3]1641; SSSE3-NEXT:    psrad $31, %xmm51642; SSSE3-NEXT:    pxor %xmm11, %xmm51643; SSSE3-NEXT:    pand %xmm9, %xmm51644; SSSE3-NEXT:    pandn %xmm3, %xmm91645; SSSE3-NEXT:    por %xmm9, %xmm51646; SSSE3-NEXT:    movdqa %xmm4, %xmm21647; SSSE3-NEXT:    movdqa %xmm5, %xmm31648; SSSE3-NEXT:    retq1649;1650; SSE41-LABEL: v8i64:1651; SSE41:       # %bb.0:1652; SSE41-NEXT:    movdqa %xmm0, %xmm81653; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm10 = [2147483648,2147483648]1654; SSE41-NEXT:    pxor %xmm10, %xmm01655; SSE41-NEXT:    paddq %xmm4, %xmm81656; SSE41-NEXT:    movdqa %xmm8, %xmm91657; SSE41-NEXT:    pxor %xmm10, %xmm91658; SSE41-NEXT:    movdqa %xmm0, %xmm111659; SSE41-NEXT:    pcmpeqd %xmm9, %xmm111660; SSE41-NEXT:    pcmpgtd %xmm9, %xmm01661; SSE41-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[0,0,2,2]1662; SSE41-NEXT:    pand %xmm11, %xmm91663; SSE41-NEXT:    por %xmm0, %xmm91664; SSE41-NEXT:    pxor %xmm4, %xmm91665; SSE41-NEXT:    movapd {{.*#+}} xmm12 = [9223372036854775807,9223372036854775807]1666; SSE41-NEXT:    movapd {{.*#+}} xmm11 = [9223372036854775808,9223372036854775808]1667; SSE41-NEXT:    movapd %xmm11, %xmm41668; SSE41-NEXT:    movdqa %xmm8, %xmm01669; SSE41-NEXT:    blendvpd %xmm0, %xmm12, %xmm41670; SSE41-NEXT:    movdqa %xmm9, %xmm01671; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm81672; SSE41-NEXT:    movdqa %xmm1, %xmm01673; SSE41-NEXT:    pxor %xmm10, %xmm01674; SSE41-NEXT:    paddq %xmm5, %xmm11675; SSE41-NEXT:    movdqa %xmm1, %xmm41676; SSE41-NEXT:    pxor %xmm10, %xmm41677; SSE41-NEXT:    movdqa %xmm0, %xmm91678; SSE41-NEXT:    pcmpeqd %xmm4, %xmm91679; SSE41-NEXT:    pcmpgtd %xmm4, %xmm01680; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2]1681; SSE41-NEXT:    pand %xmm9, %xmm41682; SSE41-NEXT:    por %xmm0, %xmm41683; SSE41-NEXT:    pxor %xmm5, %xmm41684; SSE41-NEXT:    movapd %xmm11, %xmm51685; SSE41-NEXT:    movdqa %xmm1, %xmm01686; SSE41-NEXT:    blendvpd %xmm0, %xmm12, %xmm51687; SSE41-NEXT:    movdqa %xmm4, %xmm01688; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm11689; SSE41-NEXT:    movdqa %xmm2, %xmm01690; SSE41-NEXT:    pxor %xmm10, %xmm01691; SSE41-NEXT:    paddq %xmm6, %xmm21692; SSE41-NEXT:    movdqa %xmm2, %xmm41693; SSE41-NEXT:    pxor %xmm10, %xmm41694; SSE41-NEXT:    movdqa %xmm0, %xmm51695; SSE41-NEXT:    pcmpeqd %xmm4, %xmm51696; SSE41-NEXT:    pcmpgtd %xmm4, %xmm01697; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2]1698; SSE41-NEXT:    pand %xmm5, %xmm41699; SSE41-NEXT:    por %xmm0, %xmm41700; SSE41-NEXT:    pxor %xmm6, %xmm41701; SSE41-NEXT:    movapd %xmm11, %xmm51702; SSE41-NEXT:    movdqa %xmm2, %xmm01703; SSE41-NEXT:    blendvpd %xmm0, %xmm12, %xmm51704; SSE41-NEXT:    movdqa %xmm4, %xmm01705; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm21706; SSE41-NEXT:    movdqa %xmm3, %xmm01707; SSE41-NEXT:    pxor %xmm10, %xmm01708; SSE41-NEXT:    paddq %xmm7, %xmm31709; SSE41-NEXT:    pxor %xmm3, %xmm101710; SSE41-NEXT:    movdqa %xmm0, %xmm51711; SSE41-NEXT:    pcmpeqd %xmm10, %xmm51712; SSE41-NEXT:    pcmpgtd %xmm10, %xmm01713; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2]1714; SSE41-NEXT:    pand %xmm5, %xmm41715; SSE41-NEXT:    por %xmm0, %xmm41716; SSE41-NEXT:    pxor %xmm7, %xmm41717; SSE41-NEXT:    movdqa %xmm3, %xmm01718; SSE41-NEXT:    blendvpd %xmm0, %xmm12, %xmm111719; SSE41-NEXT:    movdqa %xmm4, %xmm01720; SSE41-NEXT:    blendvpd %xmm0, %xmm11, %xmm31721; SSE41-NEXT:    movapd %xmm8, %xmm01722; SSE41-NEXT:    retq1723;1724; AVX1-LABEL: v8i64:1725; AVX1:       # %bb.0:1726; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm41727; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm51728; AVX1-NEXT:    vpaddq %xmm4, %xmm5, %xmm41729; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm61730; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm71731; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm51732; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm0, %xmm01733; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm0, %ymm01734; AVX1-NEXT:    vxorpd %ymm0, %ymm2, %ymm01735; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm21736; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm2, %xmm41737; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm2, %xmm51738; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm41739; AVX1-NEXT:    vbroadcastsd {{.*#+}} ymm5 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1740; AVX1-NEXT:    vxorpd %ymm5, %ymm4, %ymm41741; AVX1-NEXT:    vblendvpd %ymm0, %ymm4, %ymm7, %ymm01742; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm41743; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm61744; AVX1-NEXT:    vpaddq %xmm4, %xmm6, %xmm41745; AVX1-NEXT:    vpaddq %xmm3, %xmm1, %xmm71746; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm7, %ymm81747; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm61748; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm1, %xmm11749; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm1, %ymm11750; AVX1-NEXT:    vxorpd %ymm1, %ymm3, %ymm11751; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm2, %xmm31752; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm2, %xmm21753; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm21754; AVX1-NEXT:    vxorpd %ymm5, %ymm2, %ymm21755; AVX1-NEXT:    vblendvpd %ymm1, %ymm2, %ymm8, %ymm11756; AVX1-NEXT:    retq1757;1758; AVX2-LABEL: v8i64:1759; AVX2:       # %bb.0:1760; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm41761; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm01762; AVX2-NEXT:    vpxor %ymm0, %ymm2, %ymm01763; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm21764; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm2, %ymm51765; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1766; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm51767; AVX2-NEXT:    vblendvpd %ymm0, %ymm5, %ymm4, %ymm01768; AVX2-NEXT:    vpaddq %ymm3, %ymm1, %ymm41769; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm1, %ymm11770; AVX2-NEXT:    vpxor %ymm1, %ymm3, %ymm11771; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm2, %ymm21772; AVX2-NEXT:    vpxor %ymm6, %ymm2, %ymm21773; AVX2-NEXT:    vblendvpd %ymm1, %ymm2, %ymm4, %ymm11774; AVX2-NEXT:    retq1775;1776; AVX512-LABEL: v8i64:1777; AVX512:       # %bb.0:1778; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm21779; AVX512-NEXT:    vpcmpgtq %zmm1, %zmm2, %k01780; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm11781; AVX512-NEXT:    vpcmpgtq %zmm1, %zmm0, %k11782; AVX512-NEXT:    kxorw %k1, %k0, %k11783; AVX512-NEXT:    vpsraq $63, %zmm1, %zmm01784; AVX512-NEXT:    vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm1 {%k1}1785; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm01786; AVX512-NEXT:    retq1787  %z = call <8 x i64> @llvm.sadd.sat.v8i64(<8 x i64> %x, <8 x i64> %y)1788  ret <8 x i64> %z1789}1790 1791define <2 x i128> @v2i128(<2 x i128> %x, <2 x i128> %y) nounwind {1792; SSE-LABEL: v2i128:1793; SSE:       # %bb.0:1794; SSE-NEXT:    movq %rdi, %rax1795; SSE-NEXT:    addq {{[0-9]+}}(%rsp), %rcx1796; SSE-NEXT:    adcq {{[0-9]+}}(%rsp), %r81797; SSE-NEXT:    seto %dil1798; SSE-NEXT:    movq %r8, %r101799; SSE-NEXT:    sarq $63, %r101800; SSE-NEXT:    testb %dil, %dil1801; SSE-NEXT:    cmovneq %r10, %rcx1802; SSE-NEXT:    movabsq $-9223372036854775808, %r11 # imm = 0x80000000000000001803; SSE-NEXT:    xorq %r11, %r101804; SSE-NEXT:    testb %dil, %dil1805; SSE-NEXT:    cmoveq %r8, %r101806; SSE-NEXT:    addq %r9, %rsi1807; SSE-NEXT:    adcq {{[0-9]+}}(%rsp), %rdx1808; SSE-NEXT:    seto %dil1809; SSE-NEXT:    movq %rdx, %r81810; SSE-NEXT:    sarq $63, %r81811; SSE-NEXT:    testb %dil, %dil1812; SSE-NEXT:    cmovneq %r8, %rsi1813; SSE-NEXT:    xorq %r11, %r81814; SSE-NEXT:    testb %dil, %dil1815; SSE-NEXT:    cmoveq %rdx, %r81816; SSE-NEXT:    movq %rcx, 16(%rax)1817; SSE-NEXT:    movq %rsi, (%rax)1818; SSE-NEXT:    movq %r10, 24(%rax)1819; SSE-NEXT:    movq %r8, 8(%rax)1820; SSE-NEXT:    retq1821;1822; AVX-LABEL: v2i128:1823; AVX:       # %bb.0:1824; AVX-NEXT:    movq %rdi, %rax1825; AVX-NEXT:    addq {{[0-9]+}}(%rsp), %rcx1826; AVX-NEXT:    adcq {{[0-9]+}}(%rsp), %r81827; AVX-NEXT:    seto %dil1828; AVX-NEXT:    movq %r8, %r101829; AVX-NEXT:    sarq $63, %r101830; AVX-NEXT:    testb %dil, %dil1831; AVX-NEXT:    cmovneq %r10, %rcx1832; AVX-NEXT:    movabsq $-9223372036854775808, %r11 # imm = 0x80000000000000001833; AVX-NEXT:    xorq %r11, %r101834; AVX-NEXT:    testb %dil, %dil1835; AVX-NEXT:    cmoveq %r8, %r101836; AVX-NEXT:    addq %r9, %rsi1837; AVX-NEXT:    adcq {{[0-9]+}}(%rsp), %rdx1838; AVX-NEXT:    seto %dil1839; AVX-NEXT:    movq %rdx, %r81840; AVX-NEXT:    sarq $63, %r81841; AVX-NEXT:    testb %dil, %dil1842; AVX-NEXT:    cmovneq %r8, %rsi1843; AVX-NEXT:    xorq %r11, %r81844; AVX-NEXT:    testb %dil, %dil1845; AVX-NEXT:    cmoveq %rdx, %r81846; AVX-NEXT:    movq %rcx, 16(%rax)1847; AVX-NEXT:    movq %rsi, (%rax)1848; AVX-NEXT:    movq %r10, 24(%rax)1849; AVX-NEXT:    movq %r8, 8(%rax)1850; AVX-NEXT:    retq1851  %z = call <2 x i128> @llvm.sadd.sat.v2i128(<2 x i128> %x, <2 x i128> %y)1852  ret <2 x i128> %z1853}1854