brintos

brintos / llvm-project-archived public Read only

0
0
Text · 199.0 KiB · 991ce33 Raw
5052 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=SSE3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v3| FileCheck %s --check-prefixes=AVX,AVX24; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=AVX,AVX5125 6; i32 saturate7 8define <2 x i32> @stest_f64i32(<2 x double> %x) nounwind {9; SSE-LABEL: stest_f64i32:10; SSE:       # %bb.0: # %entry11; SSE-NEXT:    cvttsd2si %xmm0, %rax12; SSE-NEXT:    movq %rax, %xmm113; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]14; SSE-NEXT:    cvttsd2si %xmm0, %rax15; SSE-NEXT:    movq %rax, %xmm016; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]17; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]18; SSE-NEXT:    movdqa %xmm1, %xmm219; SSE-NEXT:    pxor %xmm0, %xmm220; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]21; SSE-NEXT:    pxor %xmm4, %xmm422; SSE-NEXT:    pcmpeqd %xmm3, %xmm423; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [4294967295,4294967295]24; SSE-NEXT:    pcmpgtd %xmm2, %xmm325; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[0,0,2,2]26; SSE-NEXT:    pand %xmm4, %xmm227; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]28; SSE-NEXT:    por %xmm2, %xmm329; SSE-NEXT:    pand %xmm3, %xmm130; SSE-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm331; SSE-NEXT:    por %xmm1, %xmm332; SSE-NEXT:    pxor %xmm3, %xmm033; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]34; SSE-NEXT:    pcmpeqd %xmm2, %xmm235; SSE-NEXT:    pcmpeqd %xmm1, %xmm236; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm037; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]38; SSE-NEXT:    pand %xmm2, %xmm139; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]40; SSE-NEXT:    por %xmm1, %xmm041; SSE-NEXT:    pand %xmm0, %xmm342; SSE-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm043; SSE-NEXT:    por %xmm3, %xmm044; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]45; SSE-NEXT:    retq46;47; AVX2-LABEL: stest_f64i32:48; AVX2:       # %bb.0: # %entry49; AVX2-NEXT:    vcvttsd2si %xmm0, %rax50; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]51; AVX2-NEXT:    vcvttsd2si %xmm0, %rcx52; AVX2-NEXT:    vmovq %rax, %xmm053; AVX2-NEXT:    vmovq %rcx, %xmm154; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]55; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [2147483647,2147483647]56; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm257; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm058; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968]59; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm260; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm061; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]62; AVX2-NEXT:    retq63;64; AVX512-LABEL: stest_f64i32:65; AVX512:       # %bb.0: # %entry66; AVX512-NEXT:    vcvttpd2qq %xmm0, %xmm067; AVX512-NEXT:    vpmovsqd %xmm0, %xmm068; AVX512-NEXT:    retq69entry:70  %conv = fptosi <2 x double> %x to <2 x i64>71  %0 = icmp slt <2 x i64> %conv, <i64 2147483647, i64 2147483647>72  %spec.store.select = select <2 x i1> %0, <2 x i64> %conv, <2 x i64> <i64 2147483647, i64 2147483647>73  %1 = icmp sgt <2 x i64> %spec.store.select, <i64 -2147483648, i64 -2147483648>74  %spec.store.select7 = select <2 x i1> %1, <2 x i64> %spec.store.select, <2 x i64> <i64 -2147483648, i64 -2147483648>75  %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>76  ret <2 x i32> %conv677}78 79define <2 x i32> @utest_f64i32(<2 x double> %x) nounwind {80; SSE-LABEL: utest_f64i32:81; SSE:       # %bb.0: # %entry82; SSE-NEXT:    movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]83; SSE-NEXT:    movapd %xmm0, %xmm284; SSE-NEXT:    subsd %xmm1, %xmm285; SSE-NEXT:    cvttsd2si %xmm2, %rax86; SSE-NEXT:    cvttsd2si %xmm0, %rcx87; SSE-NEXT:    movq %rcx, %rdx88; SSE-NEXT:    sarq $63, %rdx89; SSE-NEXT:    andq %rax, %rdx90; SSE-NEXT:    orq %rcx, %rdx91; SSE-NEXT:    movq %rdx, %xmm292; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]93; SSE-NEXT:    cvttsd2si %xmm0, %rax94; SSE-NEXT:    subsd %xmm1, %xmm095; SSE-NEXT:    cvttsd2si %xmm0, %rcx96; SSE-NEXT:    movq %rax, %rdx97; SSE-NEXT:    sarq $63, %rdx98; SSE-NEXT:    andq %rcx, %rdx99; SSE-NEXT:    orq %rax, %rdx100; SSE-NEXT:    movq %rdx, %xmm0101; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]102; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [9223372039002259456,9223372039002259456]103; SSE-NEXT:    pxor %xmm2, %xmm0104; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]105; SSE-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1106; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]107; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0108; SSE-NEXT:    pandn %xmm1, %xmm0109; SSE-NEXT:    pcmpeqd %xmm1, %xmm1110; SSE-NEXT:    pxor %xmm0, %xmm1111; SSE-NEXT:    pand %xmm2, %xmm0112; SSE-NEXT:    por %xmm1, %xmm0113; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]114; SSE-NEXT:    retq115;116; AVX2-LABEL: utest_f64i32:117; AVX2:       # %bb.0: # %entry118; AVX2-NEXT:    vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]119; AVX2-NEXT:    vsubsd %xmm1, %xmm0, %xmm2120; AVX2-NEXT:    vcvttsd2si %xmm2, %rax121; AVX2-NEXT:    vcvttsd2si %xmm0, %rcx122; AVX2-NEXT:    movq %rcx, %rdx123; AVX2-NEXT:    sarq $63, %rdx124; AVX2-NEXT:    andq %rax, %rdx125; AVX2-NEXT:    orq %rcx, %rdx126; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]127; AVX2-NEXT:    vsubsd %xmm1, %xmm0, %xmm1128; AVX2-NEXT:    vcvttsd2si %xmm1, %rax129; AVX2-NEXT:    vmovq %rdx, %xmm1130; AVX2-NEXT:    vcvttsd2si %xmm0, %rcx131; AVX2-NEXT:    movq %rcx, %rdx132; AVX2-NEXT:    sarq $63, %rdx133; AVX2-NEXT:    andq %rax, %rdx134; AVX2-NEXT:    orq %rcx, %rdx135; AVX2-NEXT:    vmovq %rdx, %xmm0136; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]137; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1138; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1139; AVX2-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0140; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]141; AVX2-NEXT:    retq142;143; AVX512-LABEL: utest_f64i32:144; AVX512:       # %bb.0: # %entry145; AVX512-NEXT:    vcvttpd2uqq %xmm0, %xmm0146; AVX512-NEXT:    vpmovusqd %xmm0, %xmm0147; AVX512-NEXT:    retq148entry:149  %conv = fptoui <2 x double> %x to <2 x i64>150  %0 = icmp ult <2 x i64> %conv, <i64 4294967295, i64 4294967295>151  %spec.store.select = select <2 x i1> %0, <2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>152  %conv6 = trunc <2 x i64> %spec.store.select to <2 x i32>153  ret <2 x i32> %conv6154}155 156define <2 x i32> @ustest_f64i32(<2 x double> %x) nounwind {157; SSE-LABEL: ustest_f64i32:158; SSE:       # %bb.0: # %entry159; SSE-NEXT:    cvttsd2si %xmm0, %rax160; SSE-NEXT:    movq %rax, %xmm1161; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]162; SSE-NEXT:    cvttsd2si %xmm0, %rax163; SSE-NEXT:    movq %rax, %xmm0164; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]165; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]166; SSE-NEXT:    movdqa %xmm1, %xmm2167; SSE-NEXT:    pxor %xmm0, %xmm2168; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]169; SSE-NEXT:    pxor %xmm4, %xmm4170; SSE-NEXT:    pcmpeqd %xmm3, %xmm4171; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [2147483647,2147483647]172; SSE-NEXT:    pcmpgtd %xmm2, %xmm3173; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[0,0,2,2]174; SSE-NEXT:    pand %xmm4, %xmm2175; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]176; SSE-NEXT:    por %xmm2, %xmm3177; SSE-NEXT:    pand %xmm3, %xmm1178; SSE-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3179; SSE-NEXT:    por %xmm1, %xmm3180; SSE-NEXT:    movdqa %xmm3, %xmm1181; SSE-NEXT:    pxor %xmm0, %xmm1182; SSE-NEXT:    movdqa %xmm1, %xmm2183; SSE-NEXT:    pcmpgtd %xmm0, %xmm2184; SSE-NEXT:    pcmpeqd %xmm0, %xmm1185; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]186; SSE-NEXT:    pand %xmm2, %xmm0187; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]188; SSE-NEXT:    por %xmm0, %xmm1189; SSE-NEXT:    pand %xmm3, %xmm1190; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]191; SSE-NEXT:    retq192;193; AVX2-LABEL: ustest_f64i32:194; AVX2:       # %bb.0: # %entry195; AVX2-NEXT:    vcvttsd2si %xmm0, %rax196; AVX2-NEXT:    vmovq %rax, %xmm1197; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]198; AVX2-NEXT:    vcvttsd2si %xmm0, %rax199; AVX2-NEXT:    vmovq %rax, %xmm0200; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]201; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4294967295,4294967295]202; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2203; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0204; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1205; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm1206; AVX2-NEXT:    vpand %xmm0, %xmm1, %xmm0207; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]208; AVX2-NEXT:    retq209;210; AVX512-LABEL: ustest_f64i32:211; AVX512:       # %bb.0: # %entry212; AVX512-NEXT:    vcvttpd2qq %xmm0, %xmm0213; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1214; AVX512-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0215; AVX512-NEXT:    vpmovusqd %xmm0, %xmm0216; AVX512-NEXT:    retq217entry:218  %conv = fptosi <2 x double> %x to <2 x i64>219  %0 = icmp slt <2 x i64> %conv, <i64 4294967295, i64 4294967295>220  %spec.store.select = select <2 x i1> %0, <2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>221  %1 = icmp sgt <2 x i64> %spec.store.select, zeroinitializer222  %spec.store.select7 = select <2 x i1> %1, <2 x i64> %spec.store.select, <2 x i64> zeroinitializer223  %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>224  ret <2 x i32> %conv6225}226 227define <4 x i32> @stest_f32i32(<4 x float> %x) nounwind {228; SSE-LABEL: stest_f32i32:229; SSE:       # %bb.0: # %entry230; SSE-NEXT:    movaps %xmm0, %xmm1231; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]232; SSE-NEXT:    cvttss2si %xmm1, %rax233; SSE-NEXT:    movq %rax, %xmm1234; SSE-NEXT:    movaps %xmm0, %xmm2235; SSE-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm0[1]236; SSE-NEXT:    cvttss2si %xmm2, %rax237; SSE-NEXT:    movq %rax, %xmm2238; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]239; SSE-NEXT:    cvttss2si %xmm0, %rax240; SSE-NEXT:    movq %rax, %xmm4241; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]242; SSE-NEXT:    cvttss2si %xmm0, %rax243; SSE-NEXT:    movq %rax, %xmm0244; SSE-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm0[0]245; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [2147483647,2147483647]246; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]247; SSE-NEXT:    movdqa %xmm4, %xmm1248; SSE-NEXT:    pxor %xmm0, %xmm1249; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]250; SSE-NEXT:    pxor %xmm6, %xmm6251; SSE-NEXT:    pcmpeqd %xmm6, %xmm5252; SSE-NEXT:    movdqa {{.*#+}} xmm7 = [4294967295,4294967295]253; SSE-NEXT:    movdqa %xmm7, %xmm8254; SSE-NEXT:    pcmpgtd %xmm1, %xmm8255; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]256; SSE-NEXT:    pand %xmm5, %xmm9257; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3]258; SSE-NEXT:    por %xmm9, %xmm1259; SSE-NEXT:    pand %xmm1, %xmm4260; SSE-NEXT:    pandn %xmm3, %xmm1261; SSE-NEXT:    por %xmm4, %xmm1262; SSE-NEXT:    movdqa %xmm2, %xmm4263; SSE-NEXT:    pxor %xmm0, %xmm4264; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[1,1,3,3]265; SSE-NEXT:    pcmpeqd %xmm6, %xmm5266; SSE-NEXT:    pcmpgtd %xmm4, %xmm7267; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]268; SSE-NEXT:    pand %xmm5, %xmm4269; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]270; SSE-NEXT:    por %xmm4, %xmm5271; SSE-NEXT:    pand %xmm5, %xmm2272; SSE-NEXT:    pandn %xmm3, %xmm5273; SSE-NEXT:    por %xmm2, %xmm5274; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [18446744071562067968,18446744071562067968]275; SSE-NEXT:    movdqa %xmm5, %xmm3276; SSE-NEXT:    pxor %xmm0, %xmm3277; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]278; SSE-NEXT:    pcmpeqd %xmm6, %xmm6279; SSE-NEXT:    pcmpeqd %xmm6, %xmm4280; SSE-NEXT:    movdqa {{.*#+}} xmm7 = [18446744069414584320,18446744069414584320]281; SSE-NEXT:    pcmpgtd %xmm7, %xmm3282; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm3[0,0,2,2]283; SSE-NEXT:    pand %xmm4, %xmm8284; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]285; SSE-NEXT:    por %xmm8, %xmm3286; SSE-NEXT:    pand %xmm3, %xmm5287; SSE-NEXT:    pandn %xmm2, %xmm3288; SSE-NEXT:    por %xmm5, %xmm3289; SSE-NEXT:    pxor %xmm1, %xmm0290; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]291; SSE-NEXT:    pcmpeqd %xmm6, %xmm4292; SSE-NEXT:    pcmpgtd %xmm7, %xmm0293; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2]294; SSE-NEXT:    pand %xmm4, %xmm5295; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]296; SSE-NEXT:    por %xmm5, %xmm0297; SSE-NEXT:    pand %xmm0, %xmm1298; SSE-NEXT:    pandn %xmm2, %xmm0299; SSE-NEXT:    por %xmm1, %xmm0300; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]301; SSE-NEXT:    retq302;303; AVX2-LABEL: stest_f32i32:304; AVX2:       # %bb.0: # %entry305; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]306; AVX2-NEXT:    vcvttss2si %xmm1, %rax307; AVX2-NEXT:    vmovq %rax, %xmm1308; AVX2-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]309; AVX2-NEXT:    vcvttss2si %xmm2, %rax310; AVX2-NEXT:    vmovq %rax, %xmm2311; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]312; AVX2-NEXT:    vcvttss2si %xmm0, %rax313; AVX2-NEXT:    vmovq %rax, %xmm2314; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]315; AVX2-NEXT:    vcvttss2si %xmm0, %rax316; AVX2-NEXT:    vmovq %rax, %xmm0317; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]318; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0319; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647]320; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2321; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0322; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]323; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2324; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0325; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]326; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]327; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm0328; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0329; AVX2-NEXT:    vzeroupper330; AVX2-NEXT:    retq331;332; AVX512-LABEL: stest_f32i32:333; AVX512:       # %bb.0: # %entry334; AVX512-NEXT:    vcvttps2qq %xmm0, %ymm0335; AVX512-NEXT:    vpmovsqd %ymm0, %xmm0336; AVX512-NEXT:    vzeroupper337; AVX512-NEXT:    retq338entry:339  %conv = fptosi <4 x float> %x to <4 x i64>340  %0 = icmp slt <4 x i64> %conv, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>341  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>342  %1 = icmp sgt <4 x i64> %spec.store.select, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>343  %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>344  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>345  ret <4 x i32> %conv6346}347 348define <4 x i32> @utest_f32i32(<4 x float> %x) nounwind {349; SSE-LABEL: utest_f32i32:350; SSE:       # %bb.0: # %entry351; SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]352; SSE-NEXT:    movaps %xmm0, %xmm1353; SSE-NEXT:    subss %xmm2, %xmm1354; SSE-NEXT:    cvttss2si %xmm1, %rax355; SSE-NEXT:    cvttss2si %xmm0, %rcx356; SSE-NEXT:    movq %rcx, %rdx357; SSE-NEXT:    sarq $63, %rdx358; SSE-NEXT:    andq %rax, %rdx359; SSE-NEXT:    orq %rcx, %rdx360; SSE-NEXT:    movq %rdx, %xmm1361; SSE-NEXT:    movaps %xmm0, %xmm3362; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1],xmm0[1,1]363; SSE-NEXT:    cvttss2si %xmm3, %rax364; SSE-NEXT:    subss %xmm2, %xmm3365; SSE-NEXT:    cvttss2si %xmm3, %rcx366; SSE-NEXT:    movq %rax, %rdx367; SSE-NEXT:    sarq $63, %rdx368; SSE-NEXT:    andq %rcx, %rdx369; SSE-NEXT:    orq %rax, %rdx370; SSE-NEXT:    movq %rdx, %xmm3371; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]372; SSE-NEXT:    movaps %xmm0, %xmm3373; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[3,3],xmm0[3,3]374; SSE-NEXT:    cvttss2si %xmm3, %rax375; SSE-NEXT:    subss %xmm2, %xmm3376; SSE-NEXT:    cvttss2si %xmm3, %rcx377; SSE-NEXT:    movq %rax, %rdx378; SSE-NEXT:    sarq $63, %rdx379; SSE-NEXT:    andq %rcx, %rdx380; SSE-NEXT:    orq %rax, %rdx381; SSE-NEXT:    movq %rdx, %xmm3382; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]383; SSE-NEXT:    cvttss2si %xmm0, %rax384; SSE-NEXT:    subss %xmm2, %xmm0385; SSE-NEXT:    cvttss2si %xmm0, %rcx386; SSE-NEXT:    movq %rax, %rdx387; SSE-NEXT:    sarq $63, %rdx388; SSE-NEXT:    andq %rcx, %rdx389; SSE-NEXT:    orq %rax, %rdx390; SSE-NEXT:    movq %rdx, %xmm0391; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]392; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]393; SSE-NEXT:    movdqa %xmm0, %xmm3394; SSE-NEXT:    pxor %xmm2, %xmm3395; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]396; SSE-NEXT:    movdqa {{.*#+}} xmm5 = [2147483647,2147483647,2147483647,2147483647]397; SSE-NEXT:    movdqa %xmm5, %xmm6398; SSE-NEXT:    pcmpgtd %xmm4, %xmm6399; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]400; SSE-NEXT:    pcmpeqd %xmm2, %xmm3401; SSE-NEXT:    pand %xmm6, %xmm3402; SSE-NEXT:    pcmpeqd %xmm4, %xmm4403; SSE-NEXT:    pand %xmm3, %xmm0404; SSE-NEXT:    pxor %xmm4, %xmm3405; SSE-NEXT:    por %xmm0, %xmm3406; SSE-NEXT:    movdqa %xmm1, %xmm0407; SSE-NEXT:    pxor %xmm2, %xmm0408; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[0,0,2,2]409; SSE-NEXT:    pcmpgtd %xmm6, %xmm5410; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]411; SSE-NEXT:    pcmpeqd %xmm2, %xmm0412; SSE-NEXT:    pand %xmm5, %xmm0413; SSE-NEXT:    pxor %xmm0, %xmm4414; SSE-NEXT:    pand %xmm1, %xmm0415; SSE-NEXT:    por %xmm4, %xmm0416; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]417; SSE-NEXT:    retq418;419; AVX2-LABEL: utest_f32i32:420; AVX2:       # %bb.0: # %entry421; AVX2-NEXT:    vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]422; AVX2-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]423; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm3424; AVX2-NEXT:    vcvttss2si %xmm3, %rax425; AVX2-NEXT:    vcvttss2si %xmm2, %rcx426; AVX2-NEXT:    movq %rcx, %rdx427; AVX2-NEXT:    sarq $63, %rdx428; AVX2-NEXT:    andq %rax, %rdx429; AVX2-NEXT:    orq %rcx, %rdx430; AVX2-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]431; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm3432; AVX2-NEXT:    vcvttss2si %xmm3, %rax433; AVX2-NEXT:    vcvttss2si %xmm2, %rcx434; AVX2-NEXT:    vmovq %rdx, %xmm2435; AVX2-NEXT:    movq %rcx, %rdx436; AVX2-NEXT:    sarq $63, %rdx437; AVX2-NEXT:    andq %rax, %rdx438; AVX2-NEXT:    orq %rcx, %rdx439; AVX2-NEXT:    vmovq %rdx, %xmm3440; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm4441; AVX2-NEXT:    vcvttss2si %xmm4, %rax442; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]443; AVX2-NEXT:    vcvttss2si %xmm0, %rcx444; AVX2-NEXT:    movq %rcx, %rdx445; AVX2-NEXT:    sarq $63, %rdx446; AVX2-NEXT:    andq %rax, %rdx447; AVX2-NEXT:    orq %rcx, %rdx448; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]449; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm1450; AVX2-NEXT:    vcvttss2si %xmm1, %rax451; AVX2-NEXT:    vcvttss2si %xmm0, %rcx452; AVX2-NEXT:    vmovq %rdx, %xmm0453; AVX2-NEXT:    movq %rcx, %rdx454; AVX2-NEXT:    sarq $63, %rdx455; AVX2-NEXT:    andq %rax, %rdx456; AVX2-NEXT:    orq %rcx, %rdx457; AVX2-NEXT:    vmovq %rdx, %xmm1458; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]459; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0460; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]461; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]462; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2463; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372041149743102,9223372041149743102,9223372041149743102,9223372041149743102]464; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2465; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0466; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]467; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]468; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm0469; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0470; AVX2-NEXT:    vzeroupper471; AVX2-NEXT:    retq472;473; AVX512-LABEL: utest_f32i32:474; AVX512:       # %bb.0: # %entry475; AVX512-NEXT:    vcvttps2uqq %xmm0, %ymm0476; AVX512-NEXT:    vpmovusqd %ymm0, %xmm0477; AVX512-NEXT:    vzeroupper478; AVX512-NEXT:    retq479entry:480  %conv = fptoui <4 x float> %x to <4 x i64>481  %0 = icmp ult <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>482  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>483  %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>484  ret <4 x i32> %conv6485}486 487define <4 x i32> @ustest_f32i32(<4 x float> %x) nounwind {488; SSE-LABEL: ustest_f32i32:489; SSE:       # %bb.0: # %entry490; SSE-NEXT:    movaps %xmm0, %xmm1491; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]492; SSE-NEXT:    cvttss2si %xmm1, %rax493; SSE-NEXT:    movq %rax, %xmm1494; SSE-NEXT:    movaps %xmm0, %xmm2495; SSE-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm0[1]496; SSE-NEXT:    cvttss2si %xmm2, %rax497; SSE-NEXT:    movq %rax, %xmm2498; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]499; SSE-NEXT:    cvttss2si %xmm0, %rax500; SSE-NEXT:    movq %rax, %xmm4501; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]502; SSE-NEXT:    cvttss2si %xmm0, %rax503; SSE-NEXT:    movq %rax, %xmm0504; SSE-NEXT:    punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm0[0]505; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [4294967295,4294967295]506; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]507; SSE-NEXT:    movdqa %xmm4, %xmm1508; SSE-NEXT:    pxor %xmm0, %xmm1509; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]510; SSE-NEXT:    pxor %xmm6, %xmm6511; SSE-NEXT:    pcmpeqd %xmm6, %xmm5512; SSE-NEXT:    movdqa {{.*#+}} xmm7 = [2147483647,2147483647]513; SSE-NEXT:    movdqa %xmm7, %xmm8514; SSE-NEXT:    pcmpgtd %xmm1, %xmm8515; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]516; SSE-NEXT:    pand %xmm5, %xmm9517; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3]518; SSE-NEXT:    por %xmm9, %xmm1519; SSE-NEXT:    pand %xmm1, %xmm4520; SSE-NEXT:    pandn %xmm3, %xmm1521; SSE-NEXT:    por %xmm4, %xmm1522; SSE-NEXT:    movdqa %xmm2, %xmm4523; SSE-NEXT:    pxor %xmm0, %xmm4524; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[1,1,3,3]525; SSE-NEXT:    pcmpeqd %xmm6, %xmm5526; SSE-NEXT:    pcmpgtd %xmm4, %xmm7527; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]528; SSE-NEXT:    pand %xmm5, %xmm4529; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]530; SSE-NEXT:    por %xmm4, %xmm5531; SSE-NEXT:    pand %xmm5, %xmm2532; SSE-NEXT:    pandn %xmm3, %xmm5533; SSE-NEXT:    por %xmm2, %xmm5534; SSE-NEXT:    movdqa %xmm5, %xmm2535; SSE-NEXT:    pxor %xmm0, %xmm2536; SSE-NEXT:    movdqa %xmm2, %xmm3537; SSE-NEXT:    pcmpgtd %xmm0, %xmm3538; SSE-NEXT:    pcmpeqd %xmm0, %xmm2539; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]540; SSE-NEXT:    pand %xmm3, %xmm2541; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]542; SSE-NEXT:    por %xmm2, %xmm3543; SSE-NEXT:    pand %xmm5, %xmm3544; SSE-NEXT:    movdqa %xmm1, %xmm2545; SSE-NEXT:    pxor %xmm0, %xmm2546; SSE-NEXT:    movdqa %xmm2, %xmm4547; SSE-NEXT:    pcmpgtd %xmm0, %xmm4548; SSE-NEXT:    pcmpeqd %xmm0, %xmm2549; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]550; SSE-NEXT:    pand %xmm4, %xmm2551; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]552; SSE-NEXT:    por %xmm2, %xmm0553; SSE-NEXT:    pand %xmm1, %xmm0554; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]555; SSE-NEXT:    retq556;557; AVX2-LABEL: ustest_f32i32:558; AVX2:       # %bb.0: # %entry559; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]560; AVX2-NEXT:    vcvttss2si %xmm1, %rax561; AVX2-NEXT:    vmovq %rax, %xmm1562; AVX2-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]563; AVX2-NEXT:    vcvttss2si %xmm2, %rax564; AVX2-NEXT:    vmovq %rax, %xmm2565; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]566; AVX2-NEXT:    vcvttss2si %xmm0, %rax567; AVX2-NEXT:    vmovq %rax, %xmm2568; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]569; AVX2-NEXT:    vcvttss2si %xmm0, %rax570; AVX2-NEXT:    vmovq %rax, %xmm0571; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]572; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0573; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]574; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2575; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0576; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1577; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm1578; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm0579; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]580; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]581; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0582; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0583; AVX2-NEXT:    vzeroupper584; AVX2-NEXT:    retq585;586; AVX512-LABEL: ustest_f32i32:587; AVX512:       # %bb.0: # %entry588; AVX512-NEXT:    vcvttps2qq %xmm0, %ymm0589; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1590; AVX512-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0591; AVX512-NEXT:    vpmovusqd %ymm0, %xmm0592; AVX512-NEXT:    vzeroupper593; AVX512-NEXT:    retq594entry:595  %conv = fptosi <4 x float> %x to <4 x i64>596  %0 = icmp slt <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>597  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>598  %1 = icmp sgt <4 x i64> %spec.store.select, zeroinitializer599  %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> zeroinitializer600  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>601  ret <4 x i32> %conv6602}603 604define <4 x i32> @stest_f16i32(<4 x half> %x) nounwind {605; SSE-LABEL: stest_f16i32:606; SSE:       # %bb.0: # %entry607; SSE-NEXT:    subq $72, %rsp608; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill609; SSE-NEXT:    movdqa %xmm0, %xmm1610; SSE-NEXT:    psrld $16, %xmm1611; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill612; SSE-NEXT:    movdqa %xmm0, %xmm1613; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]614; SSE-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill615; SSE-NEXT:    psrlq $48, %xmm0616; SSE-NEXT:    callq __extendhfsf2@PLT617; SSE-NEXT:    cvttss2si %xmm0, %rax618; SSE-NEXT:    movq %rax, %xmm0619; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill620; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload621; SSE-NEXT:    callq __extendhfsf2@PLT622; SSE-NEXT:    cvttss2si %xmm0, %rax623; SSE-NEXT:    movq %rax, %xmm0624; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload625; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]626; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill627; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload628; SSE-NEXT:    callq __extendhfsf2@PLT629; SSE-NEXT:    cvttss2si %xmm0, %rax630; SSE-NEXT:    movq %rax, %xmm0631; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill632; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload633; SSE-NEXT:    callq __extendhfsf2@PLT634; SSE-NEXT:    cvttss2si %xmm0, %rax635; SSE-NEXT:    movq %rax, %xmm0636; SSE-NEXT:    movdqa (%rsp), %xmm3 # 16-byte Reload637; SSE-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm0[0]638; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2147483647,2147483647]639; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]640; SSE-NEXT:    movdqa %xmm3, %xmm1641; SSE-NEXT:    movdqa %xmm3, %xmm8642; SSE-NEXT:    pxor %xmm0, %xmm1643; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3]644; SSE-NEXT:    pxor %xmm4, %xmm4645; SSE-NEXT:    pcmpeqd %xmm4, %xmm3646; SSE-NEXT:    movdqa {{.*#+}} xmm5 = [4294967295,4294967295]647; SSE-NEXT:    movdqa %xmm5, %xmm6648; SSE-NEXT:    pcmpgtd %xmm1, %xmm6649; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]650; SSE-NEXT:    pand %xmm3, %xmm7651; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm6[1,1,3,3]652; SSE-NEXT:    por %xmm7, %xmm1653; SSE-NEXT:    pand %xmm1, %xmm8654; SSE-NEXT:    pandn %xmm2, %xmm1655; SSE-NEXT:    por %xmm8, %xmm1656; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload657; SSE-NEXT:    movdqa %xmm7, %xmm3658; SSE-NEXT:    pxor %xmm0, %xmm3659; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[1,1,3,3]660; SSE-NEXT:    pcmpeqd %xmm4, %xmm6661; SSE-NEXT:    pcmpgtd %xmm3, %xmm5662; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[0,0,2,2]663; SSE-NEXT:    pand %xmm6, %xmm3664; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]665; SSE-NEXT:    por %xmm3, %xmm4666; SSE-NEXT:    movdqa %xmm7, %xmm3667; SSE-NEXT:    pand %xmm4, %xmm3668; SSE-NEXT:    pandn %xmm2, %xmm4669; SSE-NEXT:    por %xmm3, %xmm4670; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [18446744071562067968,18446744071562067968]671; SSE-NEXT:    movdqa %xmm4, %xmm3672; SSE-NEXT:    pxor %xmm0, %xmm3673; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3]674; SSE-NEXT:    pcmpeqd %xmm6, %xmm6675; SSE-NEXT:    pcmpeqd %xmm6, %xmm5676; SSE-NEXT:    movdqa {{.*#+}} xmm7 = [18446744069414584320,18446744069414584320]677; SSE-NEXT:    pcmpgtd %xmm7, %xmm3678; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm3[0,0,2,2]679; SSE-NEXT:    pand %xmm5, %xmm8680; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]681; SSE-NEXT:    por %xmm8, %xmm3682; SSE-NEXT:    pand %xmm3, %xmm4683; SSE-NEXT:    pandn %xmm2, %xmm3684; SSE-NEXT:    por %xmm4, %xmm3685; SSE-NEXT:    pxor %xmm1, %xmm0686; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]687; SSE-NEXT:    pcmpeqd %xmm6, %xmm4688; SSE-NEXT:    pcmpgtd %xmm7, %xmm0689; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2]690; SSE-NEXT:    pand %xmm4, %xmm5691; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]692; SSE-NEXT:    por %xmm5, %xmm0693; SSE-NEXT:    pand %xmm0, %xmm1694; SSE-NEXT:    pandn %xmm2, %xmm0695; SSE-NEXT:    por %xmm1, %xmm0696; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]697; SSE-NEXT:    addq $72, %rsp698; SSE-NEXT:    retq699;700; AVX2-LABEL: stest_f16i32:701; AVX2:       # %bb.0: # %entry702; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm1703; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm1704; AVX2-NEXT:    vcvttss2si %xmm1, %rax705; AVX2-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]706; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm1707; AVX2-NEXT:    vcvttss2si %xmm1, %rcx708; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm1709; AVX2-NEXT:    vmovq %rax, %xmm2710; AVX2-NEXT:    vcvttss2si %xmm1, %rax711; AVX2-NEXT:    vmovq %rcx, %xmm1712; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]713; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm0714; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm0715; AVX2-NEXT:    vmovq %rax, %xmm2716; AVX2-NEXT:    vcvttss2si %xmm0, %rax717; AVX2-NEXT:    vmovq %rax, %xmm0718; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]719; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0720; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647]721; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2722; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0723; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]724; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2725; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0726; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]727; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]728; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm0729; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0730; AVX2-NEXT:    vzeroupper731; AVX2-NEXT:    retq732;733; AVX512-LABEL: stest_f16i32:734; AVX512:       # %bb.0: # %entry735; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0736; AVX512-NEXT:    vcvttps2qq %ymm0, %zmm0737; AVX512-NEXT:    vpmovsqd %ymm0, %xmm0738; AVX512-NEXT:    vzeroupper739; AVX512-NEXT:    retq740entry:741  %conv = fptosi <4 x half> %x to <4 x i64>742  %0 = icmp slt <4 x i64> %conv, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>743  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>744  %1 = icmp sgt <4 x i64> %spec.store.select, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>745  %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>746  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>747  ret <4 x i32> %conv6748}749 750define <4 x i32> @utest_f16i32(<4 x half> %x) nounwind {751; SSE-LABEL: utest_f16i32:752; SSE:       # %bb.0: # %entry753; SSE-NEXT:    subq $72, %rsp754; SSE-NEXT:    movaps %xmm0, %xmm1755; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]756; SSE-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill757; SSE-NEXT:    movaps %xmm0, %xmm1758; SSE-NEXT:    psrlq $48, %xmm1759; SSE-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill760; SSE-NEXT:    movaps %xmm0, %xmm1761; SSE-NEXT:    psrld $16, %xmm1762; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill763; SSE-NEXT:    callq __extendhfsf2@PLT764; SSE-NEXT:    cvttss2si %xmm0, %rax765; SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0766; SSE-NEXT:    cvttss2si %xmm0, %rcx767; SSE-NEXT:    movq %rax, %rdx768; SSE-NEXT:    sarq $63, %rdx769; SSE-NEXT:    andq %rcx, %rdx770; SSE-NEXT:    orq %rax, %rdx771; SSE-NEXT:    movq %rdx, %xmm0772; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill773; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload774; SSE-NEXT:    callq __extendhfsf2@PLT775; SSE-NEXT:    cvttss2si %xmm0, %rax776; SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0777; SSE-NEXT:    cvttss2si %xmm0, %rcx778; SSE-NEXT:    movq %rax, %rdx779; SSE-NEXT:    sarq $63, %rdx780; SSE-NEXT:    andq %rcx, %rdx781; SSE-NEXT:    orq %rax, %rdx782; SSE-NEXT:    movq %rdx, %xmm0783; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload784; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]785; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill786; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload787; SSE-NEXT:    callq __extendhfsf2@PLT788; SSE-NEXT:    cvttss2si %xmm0, %rax789; SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0790; SSE-NEXT:    cvttss2si %xmm0, %rcx791; SSE-NEXT:    movq %rax, %rdx792; SSE-NEXT:    sarq $63, %rdx793; SSE-NEXT:    andq %rcx, %rdx794; SSE-NEXT:    orq %rax, %rdx795; SSE-NEXT:    movq %rdx, %xmm0796; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill797; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload798; SSE-NEXT:    callq __extendhfsf2@PLT799; SSE-NEXT:    cvttss2si %xmm0, %rax800; SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0801; SSE-NEXT:    cvttss2si %xmm0, %rcx802; SSE-NEXT:    movq %rax, %rdx803; SSE-NEXT:    sarq $63, %rdx804; SSE-NEXT:    andq %rcx, %rdx805; SSE-NEXT:    orq %rax, %rdx806; SSE-NEXT:    movq %rdx, %xmm0807; SSE-NEXT:    punpcklqdq (%rsp), %xmm0 # 16-byte Folded Reload808; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]809; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]810; SSE-NEXT:    movdqa %xmm0, %xmm2811; SSE-NEXT:    pxor %xmm1, %xmm2812; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]813; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2147483647,2147483647,2147483647,2147483647]814; SSE-NEXT:    movdqa %xmm4, %xmm5815; SSE-NEXT:    pcmpgtd %xmm3, %xmm5816; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]817; SSE-NEXT:    pcmpeqd %xmm1, %xmm2818; SSE-NEXT:    pand %xmm5, %xmm2819; SSE-NEXT:    pcmpeqd %xmm3, %xmm3820; SSE-NEXT:    pand %xmm2, %xmm0821; SSE-NEXT:    pxor %xmm3, %xmm2822; SSE-NEXT:    por %xmm0, %xmm2823; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload824; SSE-NEXT:    movdqa %xmm6, %xmm0825; SSE-NEXT:    pxor %xmm1, %xmm0826; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2]827; SSE-NEXT:    pcmpgtd %xmm5, %xmm4828; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]829; SSE-NEXT:    pcmpeqd %xmm1, %xmm0830; SSE-NEXT:    pand %xmm4, %xmm0831; SSE-NEXT:    pxor %xmm0, %xmm3832; SSE-NEXT:    pand %xmm6, %xmm0833; SSE-NEXT:    por %xmm3, %xmm0834; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]835; SSE-NEXT:    addq $72, %rsp836; SSE-NEXT:    retq837;838; AVX2-LABEL: utest_f16i32:839; AVX2:       # %bb.0: # %entry840; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm1841; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm2842; AVX2-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]843; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm3844; AVX2-NEXT:    vcvttss2si %xmm3, %rax845; AVX2-NEXT:    vcvttss2si %xmm2, %rcx846; AVX2-NEXT:    movq %rcx, %rdx847; AVX2-NEXT:    sarq $63, %rdx848; AVX2-NEXT:    andq %rax, %rdx849; AVX2-NEXT:    orq %rcx, %rdx850; AVX2-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]851; AVX2-NEXT:    vcvtph2ps %xmm2, %xmm2852; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm3853; AVX2-NEXT:    vcvttss2si %xmm3, %rax854; AVX2-NEXT:    vcvttss2si %xmm2, %rcx855; AVX2-NEXT:    vmovq %rdx, %xmm2856; AVX2-NEXT:    movq %rcx, %rdx857; AVX2-NEXT:    sarq $63, %rdx858; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm3859; AVX2-NEXT:    andq %rax, %rdx860; AVX2-NEXT:    vsubss %xmm1, %xmm3, %xmm4861; AVX2-NEXT:    vcvttss2si %xmm4, %rax862; AVX2-NEXT:    orq %rcx, %rdx863; AVX2-NEXT:    vmovq %rdx, %xmm4864; AVX2-NEXT:    vcvttss2si %xmm3, %rcx865; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]866; AVX2-NEXT:    movq %rcx, %rdx867; AVX2-NEXT:    sarq $63, %rdx868; AVX2-NEXT:    andq %rax, %rdx869; AVX2-NEXT:    orq %rcx, %rdx870; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm0871; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm0872; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm1873; AVX2-NEXT:    vcvttss2si %xmm1, %rax874; AVX2-NEXT:    vcvttss2si %xmm0, %rcx875; AVX2-NEXT:    vmovq %rdx, %xmm0876; AVX2-NEXT:    movq %rcx, %rdx877; AVX2-NEXT:    sarq $63, %rdx878; AVX2-NEXT:    andq %rax, %rdx879; AVX2-NEXT:    orq %rcx, %rdx880; AVX2-NEXT:    vmovq %rdx, %xmm1881; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]882; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0883; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]884; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]885; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2886; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372041149743102,9223372041149743102,9223372041149743102,9223372041149743102]887; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2888; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0889; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]890; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]891; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm0892; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0893; AVX2-NEXT:    vzeroupper894; AVX2-NEXT:    retq895;896; AVX512-LABEL: utest_f16i32:897; AVX512:       # %bb.0: # %entry898; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0899; AVX512-NEXT:    vcvttps2uqq %ymm0, %zmm0900; AVX512-NEXT:    vpmovusqd %ymm0, %xmm0901; AVX512-NEXT:    vzeroupper902; AVX512-NEXT:    retq903entry:904  %conv = fptoui <4 x half> %x to <4 x i64>905  %0 = icmp ult <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>906  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>907  %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>908  ret <4 x i32> %conv6909}910 911define <4 x i32> @ustest_f16i32(<4 x half> %x) nounwind {912; SSE-LABEL: ustest_f16i32:913; SSE:       # %bb.0: # %entry914; SSE-NEXT:    subq $72, %rsp915; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill916; SSE-NEXT:    movdqa %xmm0, %xmm1917; SSE-NEXT:    psrld $16, %xmm1918; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill919; SSE-NEXT:    movdqa %xmm0, %xmm1920; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]921; SSE-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill922; SSE-NEXT:    psrlq $48, %xmm0923; SSE-NEXT:    callq __extendhfsf2@PLT924; SSE-NEXT:    cvttss2si %xmm0, %rax925; SSE-NEXT:    movq %rax, %xmm0926; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill927; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload928; SSE-NEXT:    callq __extendhfsf2@PLT929; SSE-NEXT:    cvttss2si %xmm0, %rax930; SSE-NEXT:    movq %rax, %xmm0931; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload932; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]933; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill934; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload935; SSE-NEXT:    callq __extendhfsf2@PLT936; SSE-NEXT:    cvttss2si %xmm0, %rax937; SSE-NEXT:    movq %rax, %xmm0938; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill939; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload940; SSE-NEXT:    callq __extendhfsf2@PLT941; SSE-NEXT:    cvttss2si %xmm0, %rax942; SSE-NEXT:    movq %rax, %xmm0943; SSE-NEXT:    movdqa (%rsp), %xmm3 # 16-byte Reload944; SSE-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm0[0]945; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [4294967295,4294967295]946; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]947; SSE-NEXT:    movdqa %xmm3, %xmm1948; SSE-NEXT:    movdqa %xmm3, %xmm8949; SSE-NEXT:    pxor %xmm0, %xmm1950; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3]951; SSE-NEXT:    pxor %xmm4, %xmm4952; SSE-NEXT:    pcmpeqd %xmm4, %xmm3953; SSE-NEXT:    movdqa {{.*#+}} xmm5 = [2147483647,2147483647]954; SSE-NEXT:    movdqa %xmm5, %xmm6955; SSE-NEXT:    pcmpgtd %xmm1, %xmm6956; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]957; SSE-NEXT:    pand %xmm3, %xmm7958; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm6[1,1,3,3]959; SSE-NEXT:    por %xmm7, %xmm1960; SSE-NEXT:    pand %xmm1, %xmm8961; SSE-NEXT:    pandn %xmm2, %xmm1962; SSE-NEXT:    por %xmm8, %xmm1963; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload964; SSE-NEXT:    movdqa %xmm7, %xmm3965; SSE-NEXT:    pxor %xmm0, %xmm3966; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[1,1,3,3]967; SSE-NEXT:    pcmpeqd %xmm4, %xmm6968; SSE-NEXT:    pcmpgtd %xmm3, %xmm5969; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[0,0,2,2]970; SSE-NEXT:    pand %xmm6, %xmm3971; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]972; SSE-NEXT:    por %xmm3, %xmm4973; SSE-NEXT:    movdqa %xmm7, %xmm3974; SSE-NEXT:    pand %xmm4, %xmm3975; SSE-NEXT:    pandn %xmm2, %xmm4976; SSE-NEXT:    por %xmm3, %xmm4977; SSE-NEXT:    movdqa %xmm4, %xmm2978; SSE-NEXT:    pxor %xmm0, %xmm2979; SSE-NEXT:    movdqa %xmm2, %xmm3980; SSE-NEXT:    pcmpgtd %xmm0, %xmm3981; SSE-NEXT:    pcmpeqd %xmm0, %xmm2982; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]983; SSE-NEXT:    pand %xmm3, %xmm2984; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]985; SSE-NEXT:    por %xmm2, %xmm3986; SSE-NEXT:    pand %xmm4, %xmm3987; SSE-NEXT:    movdqa %xmm1, %xmm2988; SSE-NEXT:    pxor %xmm0, %xmm2989; SSE-NEXT:    movdqa %xmm2, %xmm4990; SSE-NEXT:    pcmpgtd %xmm0, %xmm4991; SSE-NEXT:    pcmpeqd %xmm0, %xmm2992; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]993; SSE-NEXT:    pand %xmm4, %xmm2994; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]995; SSE-NEXT:    por %xmm2, %xmm0996; SSE-NEXT:    pand %xmm1, %xmm0997; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]998; SSE-NEXT:    addq $72, %rsp999; SSE-NEXT:    retq1000;1001; AVX2-LABEL: ustest_f16i32:1002; AVX2:       # %bb.0: # %entry1003; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm11004; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm11005; AVX2-NEXT:    vcvttss2si %xmm1, %rax1006; AVX2-NEXT:    vmovq %rax, %xmm11007; AVX2-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]1008; AVX2-NEXT:    vcvtph2ps %xmm2, %xmm21009; AVX2-NEXT:    vcvttss2si %xmm2, %rax1010; AVX2-NEXT:    vmovq %rax, %xmm21011; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]1012; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm21013; AVX2-NEXT:    vcvttss2si %xmm2, %rax1014; AVX2-NEXT:    vmovq %rax, %xmm21015; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm01016; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm01017; AVX2-NEXT:    vcvttss2si %xmm0, %rax1018; AVX2-NEXT:    vmovq %rax, %xmm01019; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]1020; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01021; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]1022; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm21023; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm01024; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm11025; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm11026; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm01027; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]1028; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]1029; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm01030; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01031; AVX2-NEXT:    vzeroupper1032; AVX2-NEXT:    retq1033;1034; AVX512-LABEL: ustest_f16i32:1035; AVX512:       # %bb.0: # %entry1036; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01037; AVX512-NEXT:    vcvttps2qq %ymm0, %zmm01038; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm11039; AVX512-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm01040; AVX512-NEXT:    vpmovusqd %ymm0, %xmm01041; AVX512-NEXT:    vzeroupper1042; AVX512-NEXT:    retq1043entry:1044  %conv = fptosi <4 x half> %x to <4 x i64>1045  %0 = icmp slt <4 x i64> %conv, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>1046  %spec.store.select = select <4 x i1> %0, <4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>1047  %1 = icmp sgt <4 x i64> %spec.store.select, zeroinitializer1048  %spec.store.select7 = select <4 x i1> %1, <4 x i64> %spec.store.select, <4 x i64> zeroinitializer1049  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>1050  ret <4 x i32> %conv61051}1052 1053; i16 saturate1054 1055define <2 x i16> @stest_f64i16(<2 x double> %x) nounwind {1056; SSE-LABEL: stest_f64i16:1057; SSE:       # %bb.0: # %entry1058; SSE-NEXT:    cvttpd2dq %xmm0, %xmm01059; SSE-NEXT:    packssdw %xmm0, %xmm01060; SSE-NEXT:    retq1061;1062; AVX-LABEL: stest_f64i16:1063; AVX:       # %bb.0: # %entry1064; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm01065; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm01066; AVX-NEXT:    retq1067entry:1068  %conv = fptosi <2 x double> %x to <2 x i32>1069  %0 = icmp slt <2 x i32> %conv, <i32 32767, i32 32767>1070  %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 32767, i32 32767>1071  %1 = icmp sgt <2 x i32> %spec.store.select, <i32 -32768, i32 -32768>1072  %spec.store.select7 = select <2 x i1> %1, <2 x i32> %spec.store.select, <2 x i32> <i32 -32768, i32 -32768>1073  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>1074  ret <2 x i16> %conv61075}1076 1077define <2 x i16> @utest_f64i16(<2 x double> %x) nounwind {1078; SSE-LABEL: utest_f64i16:1079; SSE:       # %bb.0: # %entry1080; SSE-NEXT:    cvttpd2dq %xmm0, %xmm11081; SSE-NEXT:    movapd %xmm1, %xmm21082; SSE-NEXT:    psrad $31, %xmm21083; SSE-NEXT:    addpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01084; SSE-NEXT:    cvttpd2dq %xmm0, %xmm01085; SSE-NEXT:    andpd %xmm2, %xmm01086; SSE-NEXT:    orpd %xmm1, %xmm01087; SSE-NEXT:    movapd {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]1088; SSE-NEXT:    xorpd %xmm0, %xmm11089; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11090; SSE-NEXT:    movdqa %xmm1, %xmm21091; SSE-NEXT:    pandn %xmm0, %xmm21092; SSE-NEXT:    psrld $16, %xmm11093; SSE-NEXT:    por %xmm2, %xmm11094; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]1095; SSE-NEXT:    retq1096;1097; AVX2-LABEL: utest_f64i16:1098; AVX2:       # %bb.0: # %entry1099; AVX2-NEXT:    vcvttpd2dq %xmm0, %xmm11100; AVX2-NEXT:    vaddpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01101; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm21102; AVX2-NEXT:    vcvttpd2dq %xmm0, %xmm01103; AVX2-NEXT:    vandpd %xmm2, %xmm0, %xmm01104; AVX2-NEXT:    vorpd %xmm0, %xmm1, %xmm01105; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [65535,65535,65535,65535]1106; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01107; AVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]1108; AVX2-NEXT:    retq1109;1110; AVX512-LABEL: utest_f64i16:1111; AVX512:       # %bb.0: # %entry1112; AVX512-NEXT:    vcvttpd2udq %xmm0, %xmm01113; AVX512-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01114; AVX512-NEXT:    vpmovdw %xmm0, %xmm01115; AVX512-NEXT:    retq1116entry:1117  %conv = fptoui <2 x double> %x to <2 x i32>1118  %0 = icmp ult <2 x i32> %conv, <i32 65535, i32 65535>1119  %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>1120  %conv6 = trunc <2 x i32> %spec.store.select to <2 x i16>1121  ret <2 x i16> %conv61122}1123 1124define <2 x i16> @ustest_f64i16(<2 x double> %x) nounwind {1125; SSE-LABEL: ustest_f64i16:1126; SSE:       # %bb.0: # %entry1127; SSE-NEXT:    cvttpd2dq %xmm0, %xmm01128; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,u,u]1129; SSE-NEXT:    movdqa %xmm1, %xmm21130; SSE-NEXT:    pcmpgtd %xmm0, %xmm21131; SSE-NEXT:    pand %xmm2, %xmm01132; SSE-NEXT:    pandn %xmm1, %xmm21133; SSE-NEXT:    por %xmm0, %xmm21134; SSE-NEXT:    pxor %xmm0, %xmm01135; SSE-NEXT:    movdqa %xmm2, %xmm11136; SSE-NEXT:    pcmpgtd %xmm0, %xmm11137; SSE-NEXT:    pand %xmm2, %xmm11138; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]1139; SSE-NEXT:    retq1140;1141; AVX-LABEL: ustest_f64i16:1142; AVX:       # %bb.0: # %entry1143; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm01144; AVX-NEXT:    vpackusdw %xmm0, %xmm0, %xmm01145; AVX-NEXT:    retq1146entry:1147  %conv = fptosi <2 x double> %x to <2 x i32>1148  %0 = icmp slt <2 x i32> %conv, <i32 65535, i32 65535>1149  %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>1150  %1 = icmp sgt <2 x i32> %spec.store.select, zeroinitializer1151  %spec.store.select7 = select <2 x i1> %1, <2 x i32> %spec.store.select, <2 x i32> zeroinitializer1152  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>1153  ret <2 x i16> %conv61154}1155 1156define <4 x i16> @stest_f32i16(<4 x float> %x) nounwind {1157; SSE-LABEL: stest_f32i16:1158; SSE:       # %bb.0: # %entry1159; SSE-NEXT:    cvttps2dq %xmm0, %xmm01160; SSE-NEXT:    packssdw %xmm0, %xmm01161; SSE-NEXT:    retq1162;1163; AVX-LABEL: stest_f32i16:1164; AVX:       # %bb.0: # %entry1165; AVX-NEXT:    vcvttps2dq %xmm0, %xmm01166; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm01167; AVX-NEXT:    retq1168entry:1169  %conv = fptosi <4 x float> %x to <4 x i32>1170  %0 = icmp slt <4 x i32> %conv, <i32 32767, i32 32767, i32 32767, i32 32767>1171  %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>1172  %1 = icmp sgt <4 x i32> %spec.store.select, <i32 -32768, i32 -32768, i32 -32768, i32 -32768>1173  %spec.store.select7 = select <4 x i1> %1, <4 x i32> %spec.store.select, <4 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768>1174  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>1175  ret <4 x i16> %conv61176}1177 1178define <4 x i16> @utest_f32i16(<4 x float> %x) nounwind {1179; SSE-LABEL: utest_f32i16:1180; SSE:       # %bb.0: # %entry1181; SSE-NEXT:    cvttps2dq %xmm0, %xmm11182; SSE-NEXT:    movdqa %xmm1, %xmm21183; SSE-NEXT:    psrad $31, %xmm21184; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01185; SSE-NEXT:    cvttps2dq %xmm0, %xmm01186; SSE-NEXT:    pand %xmm2, %xmm01187; SSE-NEXT:    por %xmm1, %xmm01188; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]1189; SSE-NEXT:    pxor %xmm0, %xmm11190; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11191; SSE-NEXT:    movdqa %xmm1, %xmm21192; SSE-NEXT:    pandn %xmm0, %xmm21193; SSE-NEXT:    psrld $16, %xmm11194; SSE-NEXT:    por %xmm2, %xmm11195; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]1196; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]1197; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1198; SSE-NEXT:    retq1199;1200; AVX2-LABEL: utest_f32i16:1201; AVX2:       # %bb.0: # %entry1202; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm1 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]1203; AVX2-NEXT:    vsubps %xmm1, %xmm0, %xmm11204; AVX2-NEXT:    vcvttps2dq %xmm1, %xmm11205; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm01206; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm21207; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm11208; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01209; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [65535,65535,65535,65535]1210; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01211; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm01212; AVX2-NEXT:    retq1213;1214; AVX512-LABEL: utest_f32i16:1215; AVX512:       # %bb.0: # %entry1216; AVX512-NEXT:    vcvttps2udq %xmm0, %xmm01217; AVX512-NEXT:    vpmovusdw %xmm0, %xmm01218; AVX512-NEXT:    retq1219entry:1220  %conv = fptoui <4 x float> %x to <4 x i32>1221  %0 = icmp ult <4 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535>1222  %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>1223  %conv6 = trunc <4 x i32> %spec.store.select to <4 x i16>1224  ret <4 x i16> %conv61225}1226 1227define <4 x i16> @ustest_f32i16(<4 x float> %x) nounwind {1228; SSE-LABEL: ustest_f32i16:1229; SSE:       # %bb.0: # %entry1230; SSE-NEXT:    cvttps2dq %xmm0, %xmm01231; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,65535]1232; SSE-NEXT:    movdqa %xmm1, %xmm21233; SSE-NEXT:    pcmpgtd %xmm0, %xmm21234; SSE-NEXT:    pand %xmm2, %xmm01235; SSE-NEXT:    pandn %xmm1, %xmm21236; SSE-NEXT:    por %xmm0, %xmm21237; SSE-NEXT:    pxor %xmm0, %xmm01238; SSE-NEXT:    movdqa %xmm2, %xmm11239; SSE-NEXT:    pcmpgtd %xmm0, %xmm11240; SSE-NEXT:    pand %xmm2, %xmm11241; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]1242; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]1243; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]1244; SSE-NEXT:    retq1245;1246; AVX-LABEL: ustest_f32i16:1247; AVX:       # %bb.0: # %entry1248; AVX-NEXT:    vcvttps2dq %xmm0, %xmm01249; AVX-NEXT:    vpackusdw %xmm0, %xmm0, %xmm01250; AVX-NEXT:    retq1251entry:1252  %conv = fptosi <4 x float> %x to <4 x i32>1253  %0 = icmp slt <4 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535>1254  %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>1255  %1 = icmp sgt <4 x i32> %spec.store.select, zeroinitializer1256  %spec.store.select7 = select <4 x i1> %1, <4 x i32> %spec.store.select, <4 x i32> zeroinitializer1257  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>1258  ret <4 x i16> %conv61259}1260 1261define <8 x i16> @stest_f16i16(<8 x half> %x) nounwind {1262; SSE-LABEL: stest_f16i16:1263; SSE:       # %bb.0: # %entry1264; SSE-NEXT:    subq $72, %rsp1265; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill1266; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1267; SSE-NEXT:    callq __extendhfsf2@PLT1268; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1269; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1270; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1271; SSE-NEXT:    callq __extendhfsf2@PLT1272; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1273; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1274; SSE-NEXT:    cvttps2dq %xmm0, %xmm01275; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1276; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1277; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1278; SSE-NEXT:    callq __extendhfsf2@PLT1279; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1280; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1281; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1282; SSE-NEXT:    callq __extendhfsf2@PLT1283; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1284; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1285; SSE-NEXT:    cvttps2dq %xmm0, %xmm01286; SSE-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1287; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]1288; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1289; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1290; SSE-NEXT:    psrlq $48, %xmm01291; SSE-NEXT:    callq __extendhfsf2@PLT1292; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1293; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1294; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1295; SSE-NEXT:    callq __extendhfsf2@PLT1296; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1297; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1298; SSE-NEXT:    cvttps2dq %xmm0, %xmm01299; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1300; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1301; SSE-NEXT:    callq __extendhfsf2@PLT1302; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1303; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1304; SSE-NEXT:    psrld $16, %xmm01305; SSE-NEXT:    callq __extendhfsf2@PLT1306; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1307; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1308; SSE-NEXT:    cvttps2dq %xmm1, %xmm01309; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1310; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]1311; SSE-NEXT:    packssdw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1312; SSE-NEXT:    addq $72, %rsp1313; SSE-NEXT:    retq1314;1315; AVX2-LABEL: stest_f16i16:1316; AVX2:       # %bb.0: # %entry1317; AVX2-NEXT:    vcvtph2ps %xmm0, %ymm01318; AVX2-NEXT:    vcvttps2dq %ymm0, %ymm01319; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11320; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm01321; AVX2-NEXT:    vzeroupper1322; AVX2-NEXT:    retq1323;1324; AVX512-LABEL: stest_f16i16:1325; AVX512:       # %bb.0: # %entry1326; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm01327; AVX512-NEXT:    vcvttps2dq %ymm0, %ymm01328; AVX512-NEXT:    vpmovsdw %ymm0, %xmm01329; AVX512-NEXT:    vzeroupper1330; AVX512-NEXT:    retq1331entry:1332  %conv = fptosi <8 x half> %x to <8 x i32>1333  %0 = icmp slt <8 x i32> %conv, <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>1334  %spec.store.select = select <8 x i1> %0, <8 x i32> %conv, <8 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>1335  %1 = icmp sgt <8 x i32> %spec.store.select, <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>1336  %spec.store.select7 = select <8 x i1> %1, <8 x i32> %spec.store.select, <8 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>1337  %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>1338  ret <8 x i16> %conv61339}1340 1341define <8 x i16> @utest_f16i16(<8 x half> %x) nounwind {1342; SSE-LABEL: utest_f16i16:1343; SSE:       # %bb.0: # %entry1344; SSE-NEXT:    subq $72, %rsp1345; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill1346; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1347; SSE-NEXT:    callq __extendhfsf2@PLT1348; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1349; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1350; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1351; SSE-NEXT:    callq __extendhfsf2@PLT1352; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1353; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1354; SSE-NEXT:    cvttps2dq %xmm0, %xmm11355; SSE-NEXT:    movdqa %xmm1, %xmm21356; SSE-NEXT:    psrad $31, %xmm21357; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01358; SSE-NEXT:    cvttps2dq %xmm0, %xmm01359; SSE-NEXT:    pand %xmm2, %xmm01360; SSE-NEXT:    por %xmm1, %xmm01361; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1362; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1363; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1364; SSE-NEXT:    callq __extendhfsf2@PLT1365; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1366; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1367; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1368; SSE-NEXT:    callq __extendhfsf2@PLT1369; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1370; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1371; SSE-NEXT:    cvttps2dq %xmm0, %xmm11372; SSE-NEXT:    movdqa %xmm1, %xmm21373; SSE-NEXT:    psrad $31, %xmm21374; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01375; SSE-NEXT:    cvttps2dq %xmm0, %xmm01376; SSE-NEXT:    pand %xmm2, %xmm01377; SSE-NEXT:    por %xmm1, %xmm01378; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1379; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]1380; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1381; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1382; SSE-NEXT:    psrlq $48, %xmm01383; SSE-NEXT:    callq __extendhfsf2@PLT1384; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1385; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1386; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1387; SSE-NEXT:    callq __extendhfsf2@PLT1388; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1389; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1390; SSE-NEXT:    cvttps2dq %xmm0, %xmm11391; SSE-NEXT:    movdqa %xmm1, %xmm21392; SSE-NEXT:    psrad $31, %xmm21393; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01394; SSE-NEXT:    cvttps2dq %xmm0, %xmm01395; SSE-NEXT:    pand %xmm2, %xmm01396; SSE-NEXT:    por %xmm1, %xmm01397; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1398; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1399; SSE-NEXT:    callq __extendhfsf2@PLT1400; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1401; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1402; SSE-NEXT:    psrld $16, %xmm01403; SSE-NEXT:    callq __extendhfsf2@PLT1404; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload1405; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]1406; SSE-NEXT:    cvttps2dq %xmm2, %xmm01407; SSE-NEXT:    movdqa %xmm0, %xmm11408; SSE-NEXT:    psrad $31, %xmm11409; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21410; SSE-NEXT:    cvttps2dq %xmm2, %xmm21411; SSE-NEXT:    pand %xmm1, %xmm21412; SSE-NEXT:    por %xmm0, %xmm21413; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload1414; SSE-NEXT:    # xmm2 = xmm2[0],mem[0]1415; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]1416; SSE-NEXT:    movdqa %xmm2, %xmm31417; SSE-NEXT:    pxor %xmm1, %xmm31418; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2147549183,2147549183,2147549183,2147549183]1419; SSE-NEXT:    movdqa %xmm4, %xmm01420; SSE-NEXT:    pcmpgtd %xmm3, %xmm01421; SSE-NEXT:    pand %xmm0, %xmm21422; SSE-NEXT:    pcmpeqd %xmm3, %xmm31423; SSE-NEXT:    pxor %xmm3, %xmm01424; SSE-NEXT:    por %xmm2, %xmm01425; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload1426; SSE-NEXT:    pxor %xmm2, %xmm11427; SSE-NEXT:    pcmpgtd %xmm1, %xmm41428; SSE-NEXT:    pand %xmm4, %xmm21429; SSE-NEXT:    pxor %xmm3, %xmm41430; SSE-NEXT:    por %xmm2, %xmm41431; SSE-NEXT:    pslld $16, %xmm41432; SSE-NEXT:    psrad $16, %xmm41433; SSE-NEXT:    pslld $16, %xmm01434; SSE-NEXT:    psrad $16, %xmm01435; SSE-NEXT:    packssdw %xmm4, %xmm01436; SSE-NEXT:    addq $72, %rsp1437; SSE-NEXT:    retq1438;1439; AVX2-LABEL: utest_f16i16:1440; AVX2:       # %bb.0: # %entry1441; AVX2-NEXT:    vcvtph2ps %xmm0, %ymm01442; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm1 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]1443; AVX2-NEXT:    vsubps %ymm1, %ymm0, %ymm11444; AVX2-NEXT:    vcvttps2dq %ymm1, %ymm11445; AVX2-NEXT:    vcvttps2dq %ymm0, %ymm01446; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm21447; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm11448; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01449; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [65535,65535,65535,65535,65535,65535,65535,65535]1450; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm01451; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11452; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm01453; AVX2-NEXT:    vzeroupper1454; AVX2-NEXT:    retq1455;1456; AVX512-LABEL: utest_f16i16:1457; AVX512:       # %bb.0: # %entry1458; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm01459; AVX512-NEXT:    vcvttps2udq %ymm0, %ymm01460; AVX512-NEXT:    vpmovusdw %ymm0, %xmm01461; AVX512-NEXT:    vzeroupper1462; AVX512-NEXT:    retq1463entry:1464  %conv = fptoui <8 x half> %x to <8 x i32>1465  %0 = icmp ult <8 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>1466  %spec.store.select = select <8 x i1> %0, <8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>1467  %conv6 = trunc <8 x i32> %spec.store.select to <8 x i16>1468  ret <8 x i16> %conv61469}1470 1471define <8 x i16> @ustest_f16i16(<8 x half> %x) nounwind {1472; SSE-LABEL: ustest_f16i16:1473; SSE:       # %bb.0: # %entry1474; SSE-NEXT:    subq $72, %rsp1475; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill1476; SSE-NEXT:    psrlq $48, %xmm01477; SSE-NEXT:    callq __extendhfsf2@PLT1478; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1479; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1480; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1481; SSE-NEXT:    callq __extendhfsf2@PLT1482; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1483; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1484; SSE-NEXT:    cvttps2dq %xmm0, %xmm01485; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1486; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1487; SSE-NEXT:    callq __extendhfsf2@PLT1488; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1489; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1490; SSE-NEXT:    psrld $16, %xmm01491; SSE-NEXT:    callq __extendhfsf2@PLT1492; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1493; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1494; SSE-NEXT:    cvttps2dq %xmm1, %xmm01495; SSE-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1496; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]1497; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1498; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1499; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1500; SSE-NEXT:    callq __extendhfsf2@PLT1501; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1502; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1503; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1504; SSE-NEXT:    callq __extendhfsf2@PLT1505; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1506; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1507; SSE-NEXT:    cvttps2dq %xmm0, %xmm01508; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1509; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload1510; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1511; SSE-NEXT:    callq __extendhfsf2@PLT1512; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1513; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1514; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1515; SSE-NEXT:    callq __extendhfsf2@PLT1516; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1517; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1518; SSE-NEXT:    cvttps2dq %xmm0, %xmm01519; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1520; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]1521; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,65535]1522; SSE-NEXT:    movdqa %xmm1, %xmm21523; SSE-NEXT:    pcmpgtd %xmm0, %xmm21524; SSE-NEXT:    pand %xmm2, %xmm01525; SSE-NEXT:    pandn %xmm1, %xmm21526; SSE-NEXT:    por %xmm0, %xmm21527; SSE-NEXT:    movdqa %xmm1, %xmm31528; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1529; SSE-NEXT:    pcmpgtd %xmm0, %xmm31530; SSE-NEXT:    pand %xmm3, %xmm01531; SSE-NEXT:    pandn %xmm1, %xmm31532; SSE-NEXT:    por %xmm0, %xmm31533; SSE-NEXT:    pxor %xmm1, %xmm11534; SSE-NEXT:    movdqa %xmm3, %xmm01535; SSE-NEXT:    pcmpgtd %xmm1, %xmm01536; SSE-NEXT:    pand %xmm3, %xmm01537; SSE-NEXT:    movdqa %xmm2, %xmm31538; SSE-NEXT:    pcmpgtd %xmm1, %xmm31539; SSE-NEXT:    pand %xmm2, %xmm31540; SSE-NEXT:    pslld $16, %xmm31541; SSE-NEXT:    psrad $16, %xmm31542; SSE-NEXT:    pslld $16, %xmm01543; SSE-NEXT:    psrad $16, %xmm01544; SSE-NEXT:    packssdw %xmm3, %xmm01545; SSE-NEXT:    addq $72, %rsp1546; SSE-NEXT:    retq1547;1548; AVX2-LABEL: ustest_f16i16:1549; AVX2:       # %bb.0: # %entry1550; AVX2-NEXT:    vcvtph2ps %xmm0, %ymm01551; AVX2-NEXT:    vcvttps2dq %ymm0, %ymm01552; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm11553; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm01554; AVX2-NEXT:    vzeroupper1555; AVX2-NEXT:    retq1556;1557; AVX512-LABEL: ustest_f16i16:1558; AVX512:       # %bb.0: # %entry1559; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm01560; AVX512-NEXT:    vcvttps2dq %ymm0, %ymm01561; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm11562; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm01563; AVX512-NEXT:    vpmovusdw %ymm0, %xmm01564; AVX512-NEXT:    vzeroupper1565; AVX512-NEXT:    retq1566entry:1567  %conv = fptosi <8 x half> %x to <8 x i32>1568  %0 = icmp slt <8 x i32> %conv, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>1569  %spec.store.select = select <8 x i1> %0, <8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>1570  %1 = icmp sgt <8 x i32> %spec.store.select, zeroinitializer1571  %spec.store.select7 = select <8 x i1> %1, <8 x i32> %spec.store.select, <8 x i32> zeroinitializer1572  %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>1573  ret <8 x i16> %conv61574}1575 1576; i8 saturate1577 1578define <2 x i8> @stest_f64i8(<2 x double> %x) nounwind {1579; SSE-LABEL: stest_f64i8:1580; SSE:       # %bb.0: # %entry1581; SSE-NEXT:    cvttpd2dq %xmm0, %xmm01582; SSE-NEXT:    packssdw %xmm0, %xmm01583; SSE-NEXT:    packsswb %xmm0, %xmm01584; SSE-NEXT:    retq1585;1586; AVX-LABEL: stest_f64i8:1587; AVX:       # %bb.0: # %entry1588; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm01589; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm01590; AVX-NEXT:    vpacksswb %xmm0, %xmm0, %xmm01591; AVX-NEXT:    retq1592entry:1593  %conv = fptosi <2 x double> %x to <2 x i32>1594  %0 = icmp slt <2 x i32> %conv, <i32 127, i32 127>1595  %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 127, i32 127>1596  %1 = icmp sgt <2 x i32> %spec.store.select, <i32 -128, i32 -128>1597  %spec.store.select7 = select <2 x i1> %1, <2 x i32> %spec.store.select, <2 x i32> <i32 -128, i32 -128>1598  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i8>1599  ret <2 x i8> %conv61600}1601 1602define <2 x i8> @utest_f64i8(<2 x double> %x) nounwind {1603; SSE-LABEL: utest_f64i8:1604; SSE:       # %bb.0: # %entry1605; SSE-NEXT:    cvttpd2dq %xmm0, %xmm11606; SSE-NEXT:    movapd %xmm1, %xmm21607; SSE-NEXT:    psrad $31, %xmm21608; SSE-NEXT:    addpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01609; SSE-NEXT:    cvttpd2dq %xmm0, %xmm31610; SSE-NEXT:    andpd %xmm2, %xmm31611; SSE-NEXT:    orpd %xmm1, %xmm31612; SSE-NEXT:    movapd {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]1613; SSE-NEXT:    xorpd %xmm3, %xmm01614; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01615; SSE-NEXT:    movdqa %xmm0, %xmm11616; SSE-NEXT:    pandn %xmm3, %xmm11617; SSE-NEXT:    psrld $24, %xmm01618; SSE-NEXT:    por %xmm1, %xmm01619; SSE-NEXT:    packuswb %xmm0, %xmm01620; SSE-NEXT:    packuswb %xmm0, %xmm01621; SSE-NEXT:    retq1622;1623; AVX2-LABEL: utest_f64i8:1624; AVX2:       # %bb.0: # %entry1625; AVX2-NEXT:    vcvttpd2dq %xmm0, %xmm11626; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm21627; AVX2-NEXT:    vaddpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01628; AVX2-NEXT:    vcvttpd2dq %xmm0, %xmm01629; AVX2-NEXT:    vandpd %xmm2, %xmm0, %xmm01630; AVX2-NEXT:    vorpd %xmm0, %xmm1, %xmm01631; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [255,255,255,255]1632; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01633; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]1634; AVX2-NEXT:    retq1635;1636; AVX512-LABEL: utest_f64i8:1637; AVX512:       # %bb.0: # %entry1638; AVX512-NEXT:    vcvttpd2udq %xmm0, %xmm01639; AVX512-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm01640; AVX512-NEXT:    vpmovdb %xmm0, %xmm01641; AVX512-NEXT:    retq1642entry:1643  %conv = fptoui <2 x double> %x to <2 x i32>1644  %0 = icmp ult <2 x i32> %conv, <i32 255, i32 255>1645  %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 255, i32 255>1646  %conv6 = trunc <2 x i32> %spec.store.select to <2 x i8>1647  ret <2 x i8> %conv61648}1649 1650define <2 x i8> @ustest_f64i8(<2 x double> %x) nounwind {1651; SSE-LABEL: ustest_f64i8:1652; SSE:       # %bb.0: # %entry1653; SSE-NEXT:    cvttpd2dq %xmm0, %xmm01654; SSE-NEXT:    packssdw %xmm0, %xmm01655; SSE-NEXT:    packuswb %xmm0, %xmm01656; SSE-NEXT:    retq1657;1658; AVX-LABEL: ustest_f64i8:1659; AVX:       # %bb.0: # %entry1660; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm01661; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm01662; AVX-NEXT:    vpackuswb %xmm0, %xmm0, %xmm01663; AVX-NEXT:    retq1664entry:1665  %conv = fptosi <2 x double> %x to <2 x i32>1666  %0 = icmp slt <2 x i32> %conv, <i32 255, i32 255>1667  %spec.store.select = select <2 x i1> %0, <2 x i32> %conv, <2 x i32> <i32 255, i32 255>1668  %1 = icmp sgt <2 x i32> %spec.store.select, zeroinitializer1669  %spec.store.select7 = select <2 x i1> %1, <2 x i32> %spec.store.select, <2 x i32> zeroinitializer1670  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i8>1671  ret <2 x i8> %conv61672}1673 1674define <4 x i8> @stest_f32i8(<4 x float> %x) nounwind {1675; SSE-LABEL: stest_f32i8:1676; SSE:       # %bb.0: # %entry1677; SSE-NEXT:    cvttps2dq %xmm0, %xmm01678; SSE-NEXT:    packssdw %xmm0, %xmm01679; SSE-NEXT:    packsswb %xmm0, %xmm01680; SSE-NEXT:    retq1681;1682; AVX-LABEL: stest_f32i8:1683; AVX:       # %bb.0: # %entry1684; AVX-NEXT:    vcvttps2dq %xmm0, %xmm01685; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm01686; AVX-NEXT:    vpacksswb %xmm0, %xmm0, %xmm01687; AVX-NEXT:    retq1688entry:1689  %conv = fptosi <4 x float> %x to <4 x i32>1690  %0 = icmp slt <4 x i32> %conv, <i32 127, i32 127, i32 127, i32 127>1691  %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 127, i32 127, i32 127, i32 127>1692  %1 = icmp sgt <4 x i32> %spec.store.select, <i32 -128, i32 -128, i32 -128, i32 -128>1693  %spec.store.select7 = select <4 x i1> %1, <4 x i32> %spec.store.select, <4 x i32> <i32 -128, i32 -128, i32 -128, i32 -128>1694  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i8>1695  ret <4 x i8> %conv61696}1697 1698define <4 x i8> @utest_f32i8(<4 x float> %x) nounwind {1699; SSE-LABEL: utest_f32i8:1700; SSE:       # %bb.0: # %entry1701; SSE-NEXT:    cvttps2dq %xmm0, %xmm11702; SSE-NEXT:    movdqa %xmm1, %xmm21703; SSE-NEXT:    psrad $31, %xmm21704; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01705; SSE-NEXT:    cvttps2dq %xmm0, %xmm31706; SSE-NEXT:    pand %xmm2, %xmm31707; SSE-NEXT:    por %xmm1, %xmm31708; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]1709; SSE-NEXT:    pxor %xmm3, %xmm01710; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01711; SSE-NEXT:    movdqa %xmm0, %xmm11712; SSE-NEXT:    pandn %xmm3, %xmm11713; SSE-NEXT:    psrld $24, %xmm01714; SSE-NEXT:    por %xmm1, %xmm01715; SSE-NEXT:    packuswb %xmm0, %xmm01716; SSE-NEXT:    packuswb %xmm0, %xmm01717; SSE-NEXT:    retq1718;1719; AVX2-LABEL: utest_f32i8:1720; AVX2:       # %bb.0: # %entry1721; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm1 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]1722; AVX2-NEXT:    vsubps %xmm1, %xmm0, %xmm11723; AVX2-NEXT:    vcvttps2dq %xmm1, %xmm11724; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm01725; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm21726; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm11727; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01728; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [255,255,255,255]1729; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm01730; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]1731; AVX2-NEXT:    retq1732;1733; AVX512-LABEL: utest_f32i8:1734; AVX512:       # %bb.0: # %entry1735; AVX512-NEXT:    vcvttps2udq %xmm0, %xmm01736; AVX512-NEXT:    vpmovusdb %xmm0, %xmm01737; AVX512-NEXT:    retq1738entry:1739  %conv = fptoui <4 x float> %x to <4 x i32>1740  %0 = icmp ult <4 x i32> %conv, <i32 255, i32 255, i32 255, i32 255>1741  %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 255, i32 255, i32 255, i32 255>1742  %conv6 = trunc <4 x i32> %spec.store.select to <4 x i8>1743  ret <4 x i8> %conv61744}1745 1746define <4 x i8> @ustest_f32i8(<4 x float> %x) nounwind {1747; SSE-LABEL: ustest_f32i8:1748; SSE:       # %bb.0: # %entry1749; SSE-NEXT:    cvttps2dq %xmm0, %xmm01750; SSE-NEXT:    packssdw %xmm0, %xmm01751; SSE-NEXT:    packuswb %xmm0, %xmm01752; SSE-NEXT:    retq1753;1754; AVX-LABEL: ustest_f32i8:1755; AVX:       # %bb.0: # %entry1756; AVX-NEXT:    vcvttps2dq %xmm0, %xmm01757; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm01758; AVX-NEXT:    vpackuswb %xmm0, %xmm0, %xmm01759; AVX-NEXT:    retq1760entry:1761  %conv = fptosi <4 x float> %x to <4 x i32>1762  %0 = icmp slt <4 x i32> %conv, <i32 255, i32 255, i32 255, i32 255>1763  %spec.store.select = select <4 x i1> %0, <4 x i32> %conv, <4 x i32> <i32 255, i32 255, i32 255, i32 255>1764  %1 = icmp sgt <4 x i32> %spec.store.select, zeroinitializer1765  %spec.store.select7 = select <4 x i1> %1, <4 x i32> %spec.store.select, <4 x i32> zeroinitializer1766  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i8>1767  ret <4 x i8> %conv61768}1769 1770; i64 saturate1771 1772define <2 x i64> @stest_f64i64(<2 x double> %x) nounwind {1773; SSE-LABEL: stest_f64i64:1774; SSE:       # %bb.0: # %entry1775; SSE-NEXT:    pushq %r141776; SSE-NEXT:    pushq %rbx1777; SSE-NEXT:    subq $24, %rsp1778; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill1779; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1780; SSE-NEXT:    callq __fixdfti@PLT1781; SSE-NEXT:    movq %rax, %rbx1782; SSE-NEXT:    movq %rdx, %r141783; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1784; SSE-NEXT:    callq __fixdfti@PLT1785; SSE-NEXT:    xorl %ecx, %ecx1786; SSE-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF1787; SSE-NEXT:    cmpq %rsi, %rax1788; SSE-NEXT:    movq %rdx, %rdi1789; SSE-NEXT:    sbbq $0, %rdi1790; SSE-NEXT:    cmovgeq %rcx, %rdx1791; SSE-NEXT:    cmovgeq %rsi, %rax1792; SSE-NEXT:    cmpq %rsi, %rbx1793; SSE-NEXT:    movq %r14, %rdi1794; SSE-NEXT:    sbbq $0, %rdi1795; SSE-NEXT:    cmovlq %r14, %rcx1796; SSE-NEXT:    cmovlq %rbx, %rsi1797; SSE-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000001798; SSE-NEXT:    cmpq %rsi, %rdi1799; SSE-NEXT:    movq $-1, %r81800; SSE-NEXT:    movq $-1, %r91801; SSE-NEXT:    sbbq %rcx, %r91802; SSE-NEXT:    cmovgeq %rdi, %rsi1803; SSE-NEXT:    cmpq %rax, %rdi1804; SSE-NEXT:    sbbq %rdx, %r81805; SSE-NEXT:    cmovgeq %rdi, %rax1806; SSE-NEXT:    movq %rax, %xmm01807; SSE-NEXT:    movq %rsi, %xmm11808; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1809; SSE-NEXT:    addq $24, %rsp1810; SSE-NEXT:    popq %rbx1811; SSE-NEXT:    popq %r141812; SSE-NEXT:    retq1813;1814; AVX2-LABEL: stest_f64i64:1815; AVX2:       # %bb.0: # %entry1816; AVX2-NEXT:    pushq %r141817; AVX2-NEXT:    pushq %rbx1818; AVX2-NEXT:    subq $24, %rsp1819; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill1820; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]1821; AVX2-NEXT:    callq __fixdfti@PLT1822; AVX2-NEXT:    movq %rax, %rbx1823; AVX2-NEXT:    movq %rdx, %r141824; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1825; AVX2-NEXT:    callq __fixdfti@PLT1826; AVX2-NEXT:    xorl %ecx, %ecx1827; AVX2-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF1828; AVX2-NEXT:    cmpq %rsi, %rax1829; AVX2-NEXT:    movq %rdx, %rdi1830; AVX2-NEXT:    sbbq $0, %rdi1831; AVX2-NEXT:    cmovgeq %rcx, %rdx1832; AVX2-NEXT:    cmovgeq %rsi, %rax1833; AVX2-NEXT:    cmpq %rsi, %rbx1834; AVX2-NEXT:    movq %r14, %rdi1835; AVX2-NEXT:    sbbq $0, %rdi1836; AVX2-NEXT:    cmovlq %r14, %rcx1837; AVX2-NEXT:    cmovlq %rbx, %rsi1838; AVX2-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000001839; AVX2-NEXT:    cmpq %rsi, %rdi1840; AVX2-NEXT:    movq $-1, %r81841; AVX2-NEXT:    sbbq %rcx, %r81842; AVX2-NEXT:    movq $-1, %rcx1843; AVX2-NEXT:    cmovgeq %rdi, %rsi1844; AVX2-NEXT:    cmpq %rax, %rdi1845; AVX2-NEXT:    sbbq %rdx, %rcx1846; AVX2-NEXT:    cmovgeq %rdi, %rax1847; AVX2-NEXT:    vmovq %rax, %xmm01848; AVX2-NEXT:    vmovq %rsi, %xmm11849; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1850; AVX2-NEXT:    addq $24, %rsp1851; AVX2-NEXT:    popq %rbx1852; AVX2-NEXT:    popq %r141853; AVX2-NEXT:    retq1854;1855; AVX512-LABEL: stest_f64i64:1856; AVX512:       # %bb.0: # %entry1857; AVX512-NEXT:    pushq %r141858; AVX512-NEXT:    pushq %rbx1859; AVX512-NEXT:    subq $24, %rsp1860; AVX512-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill1861; AVX512-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]1862; AVX512-NEXT:    callq __fixdfti@PLT1863; AVX512-NEXT:    movq %rax, %rbx1864; AVX512-NEXT:    movq %rdx, %r141865; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1866; AVX512-NEXT:    callq __fixdfti@PLT1867; AVX512-NEXT:    xorl %ecx, %ecx1868; AVX512-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF1869; AVX512-NEXT:    cmpq %rsi, %rax1870; AVX512-NEXT:    movq %rdx, %rdi1871; AVX512-NEXT:    sbbq $0, %rdi1872; AVX512-NEXT:    cmovgeq %rcx, %rdx1873; AVX512-NEXT:    cmovgeq %rsi, %rax1874; AVX512-NEXT:    cmpq %rsi, %rbx1875; AVX512-NEXT:    movq %r14, %rdi1876; AVX512-NEXT:    sbbq $0, %rdi1877; AVX512-NEXT:    cmovlq %r14, %rcx1878; AVX512-NEXT:    cmovlq %rbx, %rsi1879; AVX512-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000001880; AVX512-NEXT:    cmpq %rsi, %rdi1881; AVX512-NEXT:    movq $-1, %r81882; AVX512-NEXT:    movq $-1, %r91883; AVX512-NEXT:    sbbq %rcx, %r91884; AVX512-NEXT:    cmovgeq %rdi, %rsi1885; AVX512-NEXT:    cmpq %rax, %rdi1886; AVX512-NEXT:    sbbq %rdx, %r81887; AVX512-NEXT:    cmovgeq %rdi, %rax1888; AVX512-NEXT:    vmovq %rax, %xmm01889; AVX512-NEXT:    vmovq %rsi, %xmm11890; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1891; AVX512-NEXT:    addq $24, %rsp1892; AVX512-NEXT:    popq %rbx1893; AVX512-NEXT:    popq %r141894; AVX512-NEXT:    retq1895entry:1896  %conv = fptosi <2 x double> %x to <2 x i128>1897  %0 = icmp slt <2 x i128> %conv, <i128 9223372036854775807, i128 9223372036854775807>1898  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>1899  %1 = icmp sgt <2 x i128> %spec.store.select, <i128 -9223372036854775808, i128 -9223372036854775808>1900  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>1901  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>1902  ret <2 x i64> %conv61903}1904 1905define <2 x i64> @utest_f64i64(<2 x double> %x) nounwind {1906; SSE-LABEL: utest_f64i64:1907; SSE:       # %bb.0: # %entry1908; SSE-NEXT:    pushq %r141909; SSE-NEXT:    pushq %rbx1910; SSE-NEXT:    subq $24, %rsp1911; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill1912; SSE-NEXT:    callq __fixunsdfti@PLT1913; SSE-NEXT:    movq %rax, %rbx1914; SSE-NEXT:    movq %rdx, %r141915; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1916; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1917; SSE-NEXT:    callq __fixunsdfti@PLT1918; SSE-NEXT:    xorl %ecx, %ecx1919; SSE-NEXT:    testq %rdx, %rdx1920; SSE-NEXT:    cmovneq %rcx, %rax1921; SSE-NEXT:    testq %r14, %r141922; SSE-NEXT:    cmovneq %rcx, %rbx1923; SSE-NEXT:    movq %rbx, %xmm01924; SSE-NEXT:    movq %rax, %xmm11925; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1926; SSE-NEXT:    addq $24, %rsp1927; SSE-NEXT:    popq %rbx1928; SSE-NEXT:    popq %r141929; SSE-NEXT:    retq1930;1931; AVX-LABEL: utest_f64i64:1932; AVX:       # %bb.0: # %entry1933; AVX-NEXT:    pushq %r141934; AVX-NEXT:    pushq %rbx1935; AVX-NEXT:    subq $24, %rsp1936; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1937; AVX-NEXT:    callq __fixunsdfti@PLT1938; AVX-NEXT:    movq %rax, %rbx1939; AVX-NEXT:    movq %rdx, %r141940; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload1941; AVX-NEXT:    # xmm0 = mem[1,0]1942; AVX-NEXT:    callq __fixunsdfti@PLT1943; AVX-NEXT:    xorl %ecx, %ecx1944; AVX-NEXT:    testq %rdx, %rdx1945; AVX-NEXT:    cmovneq %rcx, %rax1946; AVX-NEXT:    testq %r14, %r141947; AVX-NEXT:    cmovneq %rcx, %rbx1948; AVX-NEXT:    vmovq %rbx, %xmm01949; AVX-NEXT:    vmovq %rax, %xmm11950; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1951; AVX-NEXT:    addq $24, %rsp1952; AVX-NEXT:    popq %rbx1953; AVX-NEXT:    popq %r141954; AVX-NEXT:    retq1955entry:1956  %conv = fptoui <2 x double> %x to <2 x i128>1957  %0 = icmp ult <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>1958  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>1959  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>1960  ret <2 x i64> %conv61961}1962 1963define <2 x i64> @ustest_f64i64(<2 x double> %x) nounwind {1964; SSE-LABEL: ustest_f64i64:1965; SSE:       # %bb.0: # %entry1966; SSE-NEXT:    pushq %r141967; SSE-NEXT:    pushq %rbx1968; SSE-NEXT:    subq $24, %rsp1969; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill1970; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1971; SSE-NEXT:    callq __fixdfti@PLT1972; SSE-NEXT:    movq %rax, %rbx1973; SSE-NEXT:    movq %rdx, %r141974; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload1975; SSE-NEXT:    callq __fixdfti@PLT1976; SSE-NEXT:    xorl %ecx, %ecx1977; SSE-NEXT:    testq %rdx, %rdx1978; SSE-NEXT:    movl $1, %esi1979; SSE-NEXT:    cmovgq %rsi, %rdx1980; SSE-NEXT:    cmovgq %rcx, %rax1981; SSE-NEXT:    testq %r14, %r141982; SSE-NEXT:    cmovleq %r14, %rsi1983; SSE-NEXT:    cmovgq %rcx, %rbx1984; SSE-NEXT:    movq %rbx, %rdi1985; SSE-NEXT:    negq %rdi1986; SSE-NEXT:    movl $0, %edi1987; SSE-NEXT:    sbbq %rsi, %rdi1988; SSE-NEXT:    cmovgeq %rcx, %rbx1989; SSE-NEXT:    movq %rax, %rsi1990; SSE-NEXT:    negq %rsi1991; SSE-NEXT:    movl $0, %esi1992; SSE-NEXT:    sbbq %rdx, %rsi1993; SSE-NEXT:    cmovgeq %rcx, %rax1994; SSE-NEXT:    movq %rax, %xmm01995; SSE-NEXT:    movq %rbx, %xmm11996; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1997; SSE-NEXT:    addq $24, %rsp1998; SSE-NEXT:    popq %rbx1999; SSE-NEXT:    popq %r142000; SSE-NEXT:    retq2001;2002; AVX-LABEL: ustest_f64i64:2003; AVX:       # %bb.0: # %entry2004; AVX-NEXT:    pushq %r142005; AVX-NEXT:    pushq %rbx2006; AVX-NEXT:    subq $24, %rsp2007; AVX-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill2008; AVX-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]2009; AVX-NEXT:    callq __fixdfti@PLT2010; AVX-NEXT:    movq %rax, %rbx2011; AVX-NEXT:    movq %rdx, %r142012; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2013; AVX-NEXT:    callq __fixdfti@PLT2014; AVX-NEXT:    xorl %ecx, %ecx2015; AVX-NEXT:    testq %rdx, %rdx2016; AVX-NEXT:    movl $1, %esi2017; AVX-NEXT:    cmovgq %rsi, %rdx2018; AVX-NEXT:    cmovgq %rcx, %rax2019; AVX-NEXT:    testq %r14, %r142020; AVX-NEXT:    cmovleq %r14, %rsi2021; AVX-NEXT:    cmovgq %rcx, %rbx2022; AVX-NEXT:    movq %rbx, %rdi2023; AVX-NEXT:    negq %rdi2024; AVX-NEXT:    movl $0, %edi2025; AVX-NEXT:    sbbq %rsi, %rdi2026; AVX-NEXT:    cmovgeq %rcx, %rbx2027; AVX-NEXT:    movq %rax, %rsi2028; AVX-NEXT:    negq %rsi2029; AVX-NEXT:    movl $0, %esi2030; AVX-NEXT:    sbbq %rdx, %rsi2031; AVX-NEXT:    cmovgeq %rcx, %rax2032; AVX-NEXT:    vmovq %rax, %xmm02033; AVX-NEXT:    vmovq %rbx, %xmm12034; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2035; AVX-NEXT:    addq $24, %rsp2036; AVX-NEXT:    popq %rbx2037; AVX-NEXT:    popq %r142038; AVX-NEXT:    retq2039entry:2040  %conv = fptosi <2 x double> %x to <2 x i128>2041  %0 = icmp slt <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>2042  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>2043  %1 = icmp sgt <2 x i128> %spec.store.select, zeroinitializer2044  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> zeroinitializer2045  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2046  ret <2 x i64> %conv62047}2048 2049define <2 x i64> @stest_f32i64(<2 x float> %x) nounwind {2050; SSE-LABEL: stest_f32i64:2051; SSE:       # %bb.0: # %entry2052; SSE-NEXT:    pushq %r142053; SSE-NEXT:    pushq %rbx2054; SSE-NEXT:    subq $24, %rsp2055; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill2056; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]2057; SSE-NEXT:    callq __fixsfti@PLT2058; SSE-NEXT:    movq %rax, %rbx2059; SSE-NEXT:    movq %rdx, %r142060; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload2061; SSE-NEXT:    callq __fixsfti@PLT2062; SSE-NEXT:    xorl %ecx, %ecx2063; SSE-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF2064; SSE-NEXT:    cmpq %rsi, %rax2065; SSE-NEXT:    movq %rdx, %rdi2066; SSE-NEXT:    sbbq $0, %rdi2067; SSE-NEXT:    cmovgeq %rcx, %rdx2068; SSE-NEXT:    cmovgeq %rsi, %rax2069; SSE-NEXT:    cmpq %rsi, %rbx2070; SSE-NEXT:    movq %r14, %rdi2071; SSE-NEXT:    sbbq $0, %rdi2072; SSE-NEXT:    cmovlq %r14, %rcx2073; SSE-NEXT:    cmovlq %rbx, %rsi2074; SSE-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000002075; SSE-NEXT:    cmpq %rsi, %rdi2076; SSE-NEXT:    movq $-1, %r82077; SSE-NEXT:    movq $-1, %r92078; SSE-NEXT:    sbbq %rcx, %r92079; SSE-NEXT:    cmovgeq %rdi, %rsi2080; SSE-NEXT:    cmpq %rax, %rdi2081; SSE-NEXT:    sbbq %rdx, %r82082; SSE-NEXT:    cmovgeq %rdi, %rax2083; SSE-NEXT:    movq %rax, %xmm02084; SSE-NEXT:    movq %rsi, %xmm12085; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2086; SSE-NEXT:    addq $24, %rsp2087; SSE-NEXT:    popq %rbx2088; SSE-NEXT:    popq %r142089; SSE-NEXT:    retq2090;2091; AVX2-LABEL: stest_f32i64:2092; AVX2:       # %bb.0: # %entry2093; AVX2-NEXT:    pushq %r142094; AVX2-NEXT:    pushq %rbx2095; AVX2-NEXT:    subq $24, %rsp2096; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2097; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2098; AVX2-NEXT:    callq __fixsfti@PLT2099; AVX2-NEXT:    movq %rax, %rbx2100; AVX2-NEXT:    movq %rdx, %r142101; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2102; AVX2-NEXT:    callq __fixsfti@PLT2103; AVX2-NEXT:    xorl %ecx, %ecx2104; AVX2-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF2105; AVX2-NEXT:    cmpq %rsi, %rax2106; AVX2-NEXT:    movq %rdx, %rdi2107; AVX2-NEXT:    sbbq $0, %rdi2108; AVX2-NEXT:    cmovgeq %rcx, %rdx2109; AVX2-NEXT:    cmovgeq %rsi, %rax2110; AVX2-NEXT:    cmpq %rsi, %rbx2111; AVX2-NEXT:    movq %r14, %rdi2112; AVX2-NEXT:    sbbq $0, %rdi2113; AVX2-NEXT:    cmovlq %r14, %rcx2114; AVX2-NEXT:    cmovlq %rbx, %rsi2115; AVX2-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000002116; AVX2-NEXT:    cmpq %rsi, %rdi2117; AVX2-NEXT:    movq $-1, %r82118; AVX2-NEXT:    sbbq %rcx, %r82119; AVX2-NEXT:    movq $-1, %rcx2120; AVX2-NEXT:    cmovgeq %rdi, %rsi2121; AVX2-NEXT:    cmpq %rax, %rdi2122; AVX2-NEXT:    sbbq %rdx, %rcx2123; AVX2-NEXT:    cmovgeq %rdi, %rax2124; AVX2-NEXT:    vmovq %rax, %xmm02125; AVX2-NEXT:    vmovq %rsi, %xmm12126; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2127; AVX2-NEXT:    addq $24, %rsp2128; AVX2-NEXT:    popq %rbx2129; AVX2-NEXT:    popq %r142130; AVX2-NEXT:    retq2131;2132; AVX512-LABEL: stest_f32i64:2133; AVX512:       # %bb.0: # %entry2134; AVX512-NEXT:    pushq %r142135; AVX512-NEXT:    pushq %rbx2136; AVX512-NEXT:    subq $24, %rsp2137; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2138; AVX512-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2139; AVX512-NEXT:    callq __fixsfti@PLT2140; AVX512-NEXT:    movq %rax, %rbx2141; AVX512-NEXT:    movq %rdx, %r142142; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2143; AVX512-NEXT:    callq __fixsfti@PLT2144; AVX512-NEXT:    xorl %ecx, %ecx2145; AVX512-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF2146; AVX512-NEXT:    cmpq %rsi, %rax2147; AVX512-NEXT:    movq %rdx, %rdi2148; AVX512-NEXT:    sbbq $0, %rdi2149; AVX512-NEXT:    cmovgeq %rcx, %rdx2150; AVX512-NEXT:    cmovgeq %rsi, %rax2151; AVX512-NEXT:    cmpq %rsi, %rbx2152; AVX512-NEXT:    movq %r14, %rdi2153; AVX512-NEXT:    sbbq $0, %rdi2154; AVX512-NEXT:    cmovlq %r14, %rcx2155; AVX512-NEXT:    cmovlq %rbx, %rsi2156; AVX512-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000002157; AVX512-NEXT:    cmpq %rsi, %rdi2158; AVX512-NEXT:    movq $-1, %r82159; AVX512-NEXT:    movq $-1, %r92160; AVX512-NEXT:    sbbq %rcx, %r92161; AVX512-NEXT:    cmovgeq %rdi, %rsi2162; AVX512-NEXT:    cmpq %rax, %rdi2163; AVX512-NEXT:    sbbq %rdx, %r82164; AVX512-NEXT:    cmovgeq %rdi, %rax2165; AVX512-NEXT:    vmovq %rax, %xmm02166; AVX512-NEXT:    vmovq %rsi, %xmm12167; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2168; AVX512-NEXT:    addq $24, %rsp2169; AVX512-NEXT:    popq %rbx2170; AVX512-NEXT:    popq %r142171; AVX512-NEXT:    retq2172entry:2173  %conv = fptosi <2 x float> %x to <2 x i128>2174  %0 = icmp slt <2 x i128> %conv, <i128 9223372036854775807, i128 9223372036854775807>2175  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>2176  %1 = icmp sgt <2 x i128> %spec.store.select, <i128 -9223372036854775808, i128 -9223372036854775808>2177  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>2178  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2179  ret <2 x i64> %conv62180}2181 2182define <2 x i64> @utest_f32i64(<2 x float> %x) nounwind {2183; SSE-LABEL: utest_f32i64:2184; SSE:       # %bb.0: # %entry2185; SSE-NEXT:    pushq %r142186; SSE-NEXT:    pushq %rbx2187; SSE-NEXT:    subq $24, %rsp2188; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill2189; SSE-NEXT:    callq __fixunssfti@PLT2190; SSE-NEXT:    movq %rax, %rbx2191; SSE-NEXT:    movq %rdx, %r142192; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload2193; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]2194; SSE-NEXT:    callq __fixunssfti@PLT2195; SSE-NEXT:    xorl %ecx, %ecx2196; SSE-NEXT:    testq %rdx, %rdx2197; SSE-NEXT:    cmovneq %rcx, %rax2198; SSE-NEXT:    testq %r14, %r142199; SSE-NEXT:    cmovneq %rcx, %rbx2200; SSE-NEXT:    movq %rbx, %xmm02201; SSE-NEXT:    movq %rax, %xmm12202; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2203; SSE-NEXT:    addq $24, %rsp2204; SSE-NEXT:    popq %rbx2205; SSE-NEXT:    popq %r142206; SSE-NEXT:    retq2207;2208; AVX-LABEL: utest_f32i64:2209; AVX:       # %bb.0: # %entry2210; AVX-NEXT:    pushq %r142211; AVX-NEXT:    pushq %rbx2212; AVX-NEXT:    subq $24, %rsp2213; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2214; AVX-NEXT:    callq __fixunssfti@PLT2215; AVX-NEXT:    movq %rax, %rbx2216; AVX-NEXT:    movq %rdx, %r142217; AVX-NEXT:    vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload2218; AVX-NEXT:    # xmm0 = mem[1,1,3,3]2219; AVX-NEXT:    callq __fixunssfti@PLT2220; AVX-NEXT:    xorl %ecx, %ecx2221; AVX-NEXT:    testq %rdx, %rdx2222; AVX-NEXT:    cmovneq %rcx, %rax2223; AVX-NEXT:    testq %r14, %r142224; AVX-NEXT:    cmovneq %rcx, %rbx2225; AVX-NEXT:    vmovq %rbx, %xmm02226; AVX-NEXT:    vmovq %rax, %xmm12227; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2228; AVX-NEXT:    addq $24, %rsp2229; AVX-NEXT:    popq %rbx2230; AVX-NEXT:    popq %r142231; AVX-NEXT:    retq2232entry:2233  %conv = fptoui <2 x float> %x to <2 x i128>2234  %0 = icmp ult <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>2235  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>2236  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>2237  ret <2 x i64> %conv62238}2239 2240define <2 x i64> @ustest_f32i64(<2 x float> %x) nounwind {2241; SSE-LABEL: ustest_f32i64:2242; SSE:       # %bb.0: # %entry2243; SSE-NEXT:    pushq %r142244; SSE-NEXT:    pushq %rbx2245; SSE-NEXT:    subq $24, %rsp2246; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill2247; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]2248; SSE-NEXT:    callq __fixsfti@PLT2249; SSE-NEXT:    movq %rax, %rbx2250; SSE-NEXT:    movq %rdx, %r142251; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload2252; SSE-NEXT:    callq __fixsfti@PLT2253; SSE-NEXT:    xorl %ecx, %ecx2254; SSE-NEXT:    testq %rdx, %rdx2255; SSE-NEXT:    movl $1, %esi2256; SSE-NEXT:    cmovgq %rsi, %rdx2257; SSE-NEXT:    cmovgq %rcx, %rax2258; SSE-NEXT:    testq %r14, %r142259; SSE-NEXT:    cmovleq %r14, %rsi2260; SSE-NEXT:    cmovgq %rcx, %rbx2261; SSE-NEXT:    movq %rbx, %rdi2262; SSE-NEXT:    negq %rdi2263; SSE-NEXT:    movl $0, %edi2264; SSE-NEXT:    sbbq %rsi, %rdi2265; SSE-NEXT:    cmovgeq %rcx, %rbx2266; SSE-NEXT:    movq %rax, %rsi2267; SSE-NEXT:    negq %rsi2268; SSE-NEXT:    movl $0, %esi2269; SSE-NEXT:    sbbq %rdx, %rsi2270; SSE-NEXT:    cmovgeq %rcx, %rax2271; SSE-NEXT:    movq %rax, %xmm02272; SSE-NEXT:    movq %rbx, %xmm12273; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2274; SSE-NEXT:    addq $24, %rsp2275; SSE-NEXT:    popq %rbx2276; SSE-NEXT:    popq %r142277; SSE-NEXT:    retq2278;2279; AVX-LABEL: ustest_f32i64:2280; AVX:       # %bb.0: # %entry2281; AVX-NEXT:    pushq %r142282; AVX-NEXT:    pushq %rbx2283; AVX-NEXT:    subq $24, %rsp2284; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2285; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2286; AVX-NEXT:    callq __fixsfti@PLT2287; AVX-NEXT:    movq %rax, %rbx2288; AVX-NEXT:    movq %rdx, %r142289; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2290; AVX-NEXT:    callq __fixsfti@PLT2291; AVX-NEXT:    xorl %ecx, %ecx2292; AVX-NEXT:    testq %rdx, %rdx2293; AVX-NEXT:    movl $1, %esi2294; AVX-NEXT:    cmovgq %rsi, %rdx2295; AVX-NEXT:    cmovgq %rcx, %rax2296; AVX-NEXT:    testq %r14, %r142297; AVX-NEXT:    cmovleq %r14, %rsi2298; AVX-NEXT:    cmovgq %rcx, %rbx2299; AVX-NEXT:    movq %rbx, %rdi2300; AVX-NEXT:    negq %rdi2301; AVX-NEXT:    movl $0, %edi2302; AVX-NEXT:    sbbq %rsi, %rdi2303; AVX-NEXT:    cmovgeq %rcx, %rbx2304; AVX-NEXT:    movq %rax, %rsi2305; AVX-NEXT:    negq %rsi2306; AVX-NEXT:    movl $0, %esi2307; AVX-NEXT:    sbbq %rdx, %rsi2308; AVX-NEXT:    cmovgeq %rcx, %rax2309; AVX-NEXT:    vmovq %rax, %xmm02310; AVX-NEXT:    vmovq %rbx, %xmm12311; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2312; AVX-NEXT:    addq $24, %rsp2313; AVX-NEXT:    popq %rbx2314; AVX-NEXT:    popq %r142315; AVX-NEXT:    retq2316entry:2317  %conv = fptosi <2 x float> %x to <2 x i128>2318  %0 = icmp slt <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>2319  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>2320  %1 = icmp sgt <2 x i128> %spec.store.select, zeroinitializer2321  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> zeroinitializer2322  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2323  ret <2 x i64> %conv62324}2325 2326define <2 x i64> @stest_f16i64(<2 x half> %x) nounwind {2327; SSE-LABEL: stest_f16i64:2328; SSE:       # %bb.0: # %entry2329; SSE-NEXT:    pushq %r142330; SSE-NEXT:    pushq %rbx2331; SSE-NEXT:    subq $24, %rsp2332; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill2333; SSE-NEXT:    psrld $16, %xmm02334; SSE-NEXT:    callq __fixhfti@PLT2335; SSE-NEXT:    movq %rax, %rbx2336; SSE-NEXT:    movq %rdx, %r142337; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload2338; SSE-NEXT:    callq __fixhfti@PLT2339; SSE-NEXT:    xorl %ecx, %ecx2340; SSE-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF2341; SSE-NEXT:    cmpq %rsi, %rax2342; SSE-NEXT:    movq %rdx, %rdi2343; SSE-NEXT:    sbbq $0, %rdi2344; SSE-NEXT:    cmovgeq %rcx, %rdx2345; SSE-NEXT:    cmovgeq %rsi, %rax2346; SSE-NEXT:    cmpq %rsi, %rbx2347; SSE-NEXT:    movq %r14, %rdi2348; SSE-NEXT:    sbbq $0, %rdi2349; SSE-NEXT:    cmovlq %r14, %rcx2350; SSE-NEXT:    cmovlq %rbx, %rsi2351; SSE-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000002352; SSE-NEXT:    cmpq %rsi, %rdi2353; SSE-NEXT:    movq $-1, %r82354; SSE-NEXT:    movq $-1, %r92355; SSE-NEXT:    sbbq %rcx, %r92356; SSE-NEXT:    cmovgeq %rdi, %rsi2357; SSE-NEXT:    cmpq %rax, %rdi2358; SSE-NEXT:    sbbq %rdx, %r82359; SSE-NEXT:    cmovgeq %rdi, %rax2360; SSE-NEXT:    movq %rax, %xmm02361; SSE-NEXT:    movq %rsi, %xmm12362; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2363; SSE-NEXT:    addq $24, %rsp2364; SSE-NEXT:    popq %rbx2365; SSE-NEXT:    popq %r142366; SSE-NEXT:    retq2367;2368; AVX2-LABEL: stest_f16i64:2369; AVX2:       # %bb.0: # %entry2370; AVX2-NEXT:    pushq %r142371; AVX2-NEXT:    pushq %rbx2372; AVX2-NEXT:    subq $24, %rsp2373; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2374; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm02375; AVX2-NEXT:    callq __fixhfti@PLT2376; AVX2-NEXT:    movq %rax, %rbx2377; AVX2-NEXT:    movq %rdx, %r142378; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2379; AVX2-NEXT:    callq __fixhfti@PLT2380; AVX2-NEXT:    xorl %ecx, %ecx2381; AVX2-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF2382; AVX2-NEXT:    cmpq %rsi, %rax2383; AVX2-NEXT:    movq %rdx, %rdi2384; AVX2-NEXT:    sbbq $0, %rdi2385; AVX2-NEXT:    cmovgeq %rcx, %rdx2386; AVX2-NEXT:    cmovgeq %rsi, %rax2387; AVX2-NEXT:    cmpq %rsi, %rbx2388; AVX2-NEXT:    movq %r14, %rdi2389; AVX2-NEXT:    sbbq $0, %rdi2390; AVX2-NEXT:    cmovlq %r14, %rcx2391; AVX2-NEXT:    cmovlq %rbx, %rsi2392; AVX2-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000002393; AVX2-NEXT:    cmpq %rsi, %rdi2394; AVX2-NEXT:    movq $-1, %r82395; AVX2-NEXT:    sbbq %rcx, %r82396; AVX2-NEXT:    movq $-1, %rcx2397; AVX2-NEXT:    cmovgeq %rdi, %rsi2398; AVX2-NEXT:    cmpq %rax, %rdi2399; AVX2-NEXT:    sbbq %rdx, %rcx2400; AVX2-NEXT:    cmovgeq %rdi, %rax2401; AVX2-NEXT:    vmovq %rax, %xmm02402; AVX2-NEXT:    vmovq %rsi, %xmm12403; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2404; AVX2-NEXT:    addq $24, %rsp2405; AVX2-NEXT:    popq %rbx2406; AVX2-NEXT:    popq %r142407; AVX2-NEXT:    retq2408;2409; AVX512-LABEL: stest_f16i64:2410; AVX512:       # %bb.0: # %entry2411; AVX512-NEXT:    pushq %r142412; AVX512-NEXT:    pushq %rbx2413; AVX512-NEXT:    subq $24, %rsp2414; AVX512-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2415; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm02416; AVX512-NEXT:    callq __fixhfti@PLT2417; AVX512-NEXT:    movq %rax, %rbx2418; AVX512-NEXT:    movq %rdx, %r142419; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2420; AVX512-NEXT:    callq __fixhfti@PLT2421; AVX512-NEXT:    xorl %ecx, %ecx2422; AVX512-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF2423; AVX512-NEXT:    cmpq %rsi, %rax2424; AVX512-NEXT:    movq %rdx, %rdi2425; AVX512-NEXT:    sbbq $0, %rdi2426; AVX512-NEXT:    cmovgeq %rcx, %rdx2427; AVX512-NEXT:    cmovgeq %rsi, %rax2428; AVX512-NEXT:    cmpq %rsi, %rbx2429; AVX512-NEXT:    movq %r14, %rdi2430; AVX512-NEXT:    sbbq $0, %rdi2431; AVX512-NEXT:    cmovlq %r14, %rcx2432; AVX512-NEXT:    cmovlq %rbx, %rsi2433; AVX512-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000002434; AVX512-NEXT:    cmpq %rsi, %rdi2435; AVX512-NEXT:    movq $-1, %r82436; AVX512-NEXT:    movq $-1, %r92437; AVX512-NEXT:    sbbq %rcx, %r92438; AVX512-NEXT:    cmovgeq %rdi, %rsi2439; AVX512-NEXT:    cmpq %rax, %rdi2440; AVX512-NEXT:    sbbq %rdx, %r82441; AVX512-NEXT:    cmovgeq %rdi, %rax2442; AVX512-NEXT:    vmovq %rax, %xmm02443; AVX512-NEXT:    vmovq %rsi, %xmm12444; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2445; AVX512-NEXT:    addq $24, %rsp2446; AVX512-NEXT:    popq %rbx2447; AVX512-NEXT:    popq %r142448; AVX512-NEXT:    retq2449entry:2450  %conv = fptosi <2 x half> %x to <2 x i128>2451  %0 = icmp slt <2 x i128> %conv, <i128 9223372036854775807, i128 9223372036854775807>2452  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>2453  %1 = icmp sgt <2 x i128> %spec.store.select, <i128 -9223372036854775808, i128 -9223372036854775808>2454  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>2455  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2456  ret <2 x i64> %conv62457}2458 2459define <2 x i64> @utest_f16i64(<2 x half> %x) nounwind {2460; SSE-LABEL: utest_f16i64:2461; SSE:       # %bb.0: # %entry2462; SSE-NEXT:    pushq %r142463; SSE-NEXT:    pushq %rbx2464; SSE-NEXT:    subq $24, %rsp2465; SSE-NEXT:    movdqa %xmm0, %xmm12466; SSE-NEXT:    psrld $16, %xmm12467; SSE-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill2468; SSE-NEXT:    callq __fixunshfti@PLT2469; SSE-NEXT:    movq %rax, %rbx2470; SSE-NEXT:    movq %rdx, %r142471; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload2472; SSE-NEXT:    callq __fixunshfti@PLT2473; SSE-NEXT:    xorl %ecx, %ecx2474; SSE-NEXT:    testq %rdx, %rdx2475; SSE-NEXT:    cmovneq %rcx, %rax2476; SSE-NEXT:    testq %r14, %r142477; SSE-NEXT:    cmovneq %rcx, %rbx2478; SSE-NEXT:    movq %rbx, %xmm02479; SSE-NEXT:    movq %rax, %xmm12480; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2481; SSE-NEXT:    addq $24, %rsp2482; SSE-NEXT:    popq %rbx2483; SSE-NEXT:    popq %r142484; SSE-NEXT:    retq2485;2486; AVX2-LABEL: utest_f16i64:2487; AVX2:       # %bb.0: # %entry2488; AVX2-NEXT:    pushq %r142489; AVX2-NEXT:    pushq %rbx2490; AVX2-NEXT:    subq $24, %rsp2491; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2492; AVX2-NEXT:    callq __fixunshfti@PLT2493; AVX2-NEXT:    movq %rax, %rbx2494; AVX2-NEXT:    movq %rdx, %r142495; AVX2-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload2496; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm02497; AVX2-NEXT:    callq __fixunshfti@PLT2498; AVX2-NEXT:    xorl %ecx, %ecx2499; AVX2-NEXT:    testq %rdx, %rdx2500; AVX2-NEXT:    cmovneq %rcx, %rax2501; AVX2-NEXT:    testq %r14, %r142502; AVX2-NEXT:    cmovneq %rcx, %rbx2503; AVX2-NEXT:    vmovq %rbx, %xmm02504; AVX2-NEXT:    vmovq %rax, %xmm12505; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2506; AVX2-NEXT:    addq $24, %rsp2507; AVX2-NEXT:    popq %rbx2508; AVX2-NEXT:    popq %r142509; AVX2-NEXT:    retq2510;2511; AVX512-LABEL: utest_f16i64:2512; AVX512:       # %bb.0: # %entry2513; AVX512-NEXT:    pushq %r142514; AVX512-NEXT:    pushq %rbx2515; AVX512-NEXT:    subq $24, %rsp2516; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2517; AVX512-NEXT:    callq __fixunshfti@PLT2518; AVX512-NEXT:    movq %rax, %rbx2519; AVX512-NEXT:    movq %rdx, %r142520; AVX512-NEXT:    vpsrld $16, (%rsp), %xmm0 # 16-byte Folded Reload2521; AVX512-NEXT:    callq __fixunshfti@PLT2522; AVX512-NEXT:    xorl %ecx, %ecx2523; AVX512-NEXT:    testq %rdx, %rdx2524; AVX512-NEXT:    cmovneq %rcx, %rax2525; AVX512-NEXT:    testq %r14, %r142526; AVX512-NEXT:    cmovneq %rcx, %rbx2527; AVX512-NEXT:    vmovq %rbx, %xmm02528; AVX512-NEXT:    vmovq %rax, %xmm12529; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2530; AVX512-NEXT:    addq $24, %rsp2531; AVX512-NEXT:    popq %rbx2532; AVX512-NEXT:    popq %r142533; AVX512-NEXT:    retq2534entry:2535  %conv = fptoui <2 x half> %x to <2 x i128>2536  %0 = icmp ult <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>2537  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>2538  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>2539  ret <2 x i64> %conv62540}2541 2542define <2 x i64> @ustest_f16i64(<2 x half> %x) nounwind {2543; SSE-LABEL: ustest_f16i64:2544; SSE:       # %bb.0: # %entry2545; SSE-NEXT:    pushq %r142546; SSE-NEXT:    pushq %rbx2547; SSE-NEXT:    subq $24, %rsp2548; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill2549; SSE-NEXT:    psrld $16, %xmm02550; SSE-NEXT:    callq __fixhfti@PLT2551; SSE-NEXT:    movq %rax, %rbx2552; SSE-NEXT:    movq %rdx, %r142553; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload2554; SSE-NEXT:    callq __fixhfti@PLT2555; SSE-NEXT:    xorl %ecx, %ecx2556; SSE-NEXT:    testq %rdx, %rdx2557; SSE-NEXT:    movl $1, %esi2558; SSE-NEXT:    cmovgq %rsi, %rdx2559; SSE-NEXT:    cmovgq %rcx, %rax2560; SSE-NEXT:    testq %r14, %r142561; SSE-NEXT:    cmovleq %r14, %rsi2562; SSE-NEXT:    cmovgq %rcx, %rbx2563; SSE-NEXT:    movq %rbx, %rdi2564; SSE-NEXT:    negq %rdi2565; SSE-NEXT:    movl $0, %edi2566; SSE-NEXT:    sbbq %rsi, %rdi2567; SSE-NEXT:    cmovgeq %rcx, %rbx2568; SSE-NEXT:    movq %rax, %rsi2569; SSE-NEXT:    negq %rsi2570; SSE-NEXT:    movl $0, %esi2571; SSE-NEXT:    sbbq %rdx, %rsi2572; SSE-NEXT:    cmovgeq %rcx, %rax2573; SSE-NEXT:    movq %rax, %xmm02574; SSE-NEXT:    movq %rbx, %xmm12575; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2576; SSE-NEXT:    addq $24, %rsp2577; SSE-NEXT:    popq %rbx2578; SSE-NEXT:    popq %r142579; SSE-NEXT:    retq2580;2581; AVX-LABEL: ustest_f16i64:2582; AVX:       # %bb.0: # %entry2583; AVX-NEXT:    pushq %r142584; AVX-NEXT:    pushq %rbx2585; AVX-NEXT:    subq $24, %rsp2586; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2587; AVX-NEXT:    vpsrld $16, %xmm0, %xmm02588; AVX-NEXT:    callq __fixhfti@PLT2589; AVX-NEXT:    movq %rax, %rbx2590; AVX-NEXT:    movq %rdx, %r142591; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2592; AVX-NEXT:    callq __fixhfti@PLT2593; AVX-NEXT:    xorl %ecx, %ecx2594; AVX-NEXT:    testq %rdx, %rdx2595; AVX-NEXT:    movl $1, %esi2596; AVX-NEXT:    cmovgq %rsi, %rdx2597; AVX-NEXT:    cmovgq %rcx, %rax2598; AVX-NEXT:    testq %r14, %r142599; AVX-NEXT:    cmovleq %r14, %rsi2600; AVX-NEXT:    cmovgq %rcx, %rbx2601; AVX-NEXT:    movq %rbx, %rdi2602; AVX-NEXT:    negq %rdi2603; AVX-NEXT:    movl $0, %edi2604; AVX-NEXT:    sbbq %rsi, %rdi2605; AVX-NEXT:    cmovgeq %rcx, %rbx2606; AVX-NEXT:    movq %rax, %rsi2607; AVX-NEXT:    negq %rsi2608; AVX-NEXT:    movl $0, %esi2609; AVX-NEXT:    sbbq %rdx, %rsi2610; AVX-NEXT:    cmovgeq %rcx, %rax2611; AVX-NEXT:    vmovq %rax, %xmm02612; AVX-NEXT:    vmovq %rbx, %xmm12613; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2614; AVX-NEXT:    addq $24, %rsp2615; AVX-NEXT:    popq %rbx2616; AVX-NEXT:    popq %r142617; AVX-NEXT:    retq2618entry:2619  %conv = fptosi <2 x half> %x to <2 x i128>2620  %0 = icmp slt <2 x i128> %conv, <i128 18446744073709551616, i128 18446744073709551616>2621  %spec.store.select = select <2 x i1> %0, <2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>2622  %1 = icmp sgt <2 x i128> %spec.store.select, zeroinitializer2623  %spec.store.select7 = select <2 x i1> %1, <2 x i128> %spec.store.select, <2 x i128> zeroinitializer2624  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>2625  ret <2 x i64> %conv62626}2627 2628 2629 2630; i32 saturate2631 2632define <2 x i32> @stest_f64i32_mm(<2 x double> %x) nounwind {2633; SSE-LABEL: stest_f64i32_mm:2634; SSE:       # %bb.0: # %entry2635; SSE-NEXT:    cvttsd2si %xmm0, %rax2636; SSE-NEXT:    movq %rax, %xmm12637; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]2638; SSE-NEXT:    cvttsd2si %xmm0, %rax2639; SSE-NEXT:    movq %rax, %xmm02640; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]2641; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]2642; SSE-NEXT:    movdqa %xmm1, %xmm22643; SSE-NEXT:    pxor %xmm0, %xmm22644; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]2645; SSE-NEXT:    pxor %xmm4, %xmm42646; SSE-NEXT:    pcmpeqd %xmm3, %xmm42647; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [4294967295,4294967295]2648; SSE-NEXT:    pcmpgtd %xmm2, %xmm32649; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[0,0,2,2]2650; SSE-NEXT:    pand %xmm4, %xmm22651; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]2652; SSE-NEXT:    por %xmm2, %xmm32653; SSE-NEXT:    pand %xmm3, %xmm12654; SSE-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32655; SSE-NEXT:    por %xmm1, %xmm32656; SSE-NEXT:    pxor %xmm3, %xmm02657; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]2658; SSE-NEXT:    pcmpeqd %xmm2, %xmm22659; SSE-NEXT:    pcmpeqd %xmm1, %xmm22660; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02661; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]2662; SSE-NEXT:    pand %xmm2, %xmm12663; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]2664; SSE-NEXT:    por %xmm1, %xmm02665; SSE-NEXT:    pand %xmm0, %xmm32666; SSE-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02667; SSE-NEXT:    por %xmm3, %xmm02668; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]2669; SSE-NEXT:    retq2670;2671; AVX2-LABEL: stest_f64i32_mm:2672; AVX2:       # %bb.0: # %entry2673; AVX2-NEXT:    vcvttsd2si %xmm0, %rax2674; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]2675; AVX2-NEXT:    vcvttsd2si %xmm0, %rcx2676; AVX2-NEXT:    vmovq %rax, %xmm02677; AVX2-NEXT:    vmovq %rcx, %xmm12678; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2679; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [2147483647,2147483647]2680; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm22681; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm02682; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968]2683; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm22684; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm02685; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]2686; AVX2-NEXT:    retq2687;2688; AVX512-LABEL: stest_f64i32_mm:2689; AVX512:       # %bb.0: # %entry2690; AVX512-NEXT:    vcvttpd2qq %xmm0, %xmm02691; AVX512-NEXT:    vpmovsqd %xmm0, %xmm02692; AVX512-NEXT:    retq2693entry:2694  %conv = fptosi <2 x double> %x to <2 x i64>2695  %spec.store.select = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %conv, <2 x i64> <i64 2147483647, i64 2147483647>)2696  %spec.store.select7 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %spec.store.select, <2 x i64> <i64 -2147483648, i64 -2147483648>)2697  %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>2698  ret <2 x i32> %conv62699}2700 2701define <2 x i32> @utest_f64i32_mm(<2 x double> %x) nounwind {2702; SSE-LABEL: utest_f64i32_mm:2703; SSE:       # %bb.0: # %entry2704; SSE-NEXT:    movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]2705; SSE-NEXT:    movapd %xmm0, %xmm22706; SSE-NEXT:    subsd %xmm1, %xmm22707; SSE-NEXT:    cvttsd2si %xmm2, %rax2708; SSE-NEXT:    cvttsd2si %xmm0, %rcx2709; SSE-NEXT:    movq %rcx, %rdx2710; SSE-NEXT:    sarq $63, %rdx2711; SSE-NEXT:    andq %rax, %rdx2712; SSE-NEXT:    orq %rcx, %rdx2713; SSE-NEXT:    movq %rdx, %xmm22714; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]2715; SSE-NEXT:    cvttsd2si %xmm0, %rax2716; SSE-NEXT:    subsd %xmm1, %xmm02717; SSE-NEXT:    cvttsd2si %xmm0, %rcx2718; SSE-NEXT:    movq %rax, %rdx2719; SSE-NEXT:    sarq $63, %rdx2720; SSE-NEXT:    andq %rcx, %rdx2721; SSE-NEXT:    orq %rax, %rdx2722; SSE-NEXT:    movq %rdx, %xmm02723; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]2724; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [9223372039002259456,9223372039002259456]2725; SSE-NEXT:    pxor %xmm2, %xmm02726; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]2727; SSE-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12728; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]2729; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02730; SSE-NEXT:    pandn %xmm1, %xmm02731; SSE-NEXT:    pcmpeqd %xmm1, %xmm12732; SSE-NEXT:    pxor %xmm0, %xmm12733; SSE-NEXT:    pand %xmm2, %xmm02734; SSE-NEXT:    por %xmm1, %xmm02735; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]2736; SSE-NEXT:    retq2737;2738; AVX2-LABEL: utest_f64i32_mm:2739; AVX2:       # %bb.0: # %entry2740; AVX2-NEXT:    vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]2741; AVX2-NEXT:    vsubsd %xmm1, %xmm0, %xmm22742; AVX2-NEXT:    vcvttsd2si %xmm2, %rax2743; AVX2-NEXT:    vcvttsd2si %xmm0, %rcx2744; AVX2-NEXT:    movq %rcx, %rdx2745; AVX2-NEXT:    sarq $63, %rdx2746; AVX2-NEXT:    andq %rax, %rdx2747; AVX2-NEXT:    orq %rcx, %rdx2748; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]2749; AVX2-NEXT:    vsubsd %xmm1, %xmm0, %xmm12750; AVX2-NEXT:    vcvttsd2si %xmm1, %rax2751; AVX2-NEXT:    vmovq %rdx, %xmm12752; AVX2-NEXT:    vcvttsd2si %xmm0, %rcx2753; AVX2-NEXT:    movq %rcx, %rdx2754; AVX2-NEXT:    sarq $63, %rdx2755; AVX2-NEXT:    andq %rax, %rdx2756; AVX2-NEXT:    orq %rcx, %rdx2757; AVX2-NEXT:    vmovq %rdx, %xmm02758; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]2759; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm12760; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm12761; AVX2-NEXT:    vblendvpd %xmm1, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02762; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]2763; AVX2-NEXT:    retq2764;2765; AVX512-LABEL: utest_f64i32_mm:2766; AVX512:       # %bb.0: # %entry2767; AVX512-NEXT:    vcvttpd2uqq %xmm0, %xmm02768; AVX512-NEXT:    vpmovusqd %xmm0, %xmm02769; AVX512-NEXT:    retq2770entry:2771  %conv = fptoui <2 x double> %x to <2 x i64>2772  %spec.store.select = call <2 x i64> @llvm.umin.v2i64(<2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>)2773  %conv6 = trunc <2 x i64> %spec.store.select to <2 x i32>2774  ret <2 x i32> %conv62775}2776 2777define <2 x i32> @ustest_f64i32_mm(<2 x double> %x) nounwind {2778; SSE-LABEL: ustest_f64i32_mm:2779; SSE:       # %bb.0: # %entry2780; SSE-NEXT:    cvttsd2si %xmm0, %rax2781; SSE-NEXT:    movq %rax, %xmm12782; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]2783; SSE-NEXT:    cvttsd2si %xmm0, %rax2784; SSE-NEXT:    movq %rax, %xmm02785; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]2786; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]2787; SSE-NEXT:    movdqa %xmm1, %xmm22788; SSE-NEXT:    pxor %xmm0, %xmm22789; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]2790; SSE-NEXT:    pxor %xmm4, %xmm42791; SSE-NEXT:    pcmpeqd %xmm3, %xmm42792; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [2147483647,2147483647]2793; SSE-NEXT:    pcmpgtd %xmm2, %xmm32794; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[0,0,2,2]2795; SSE-NEXT:    pand %xmm4, %xmm22796; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]2797; SSE-NEXT:    por %xmm2, %xmm32798; SSE-NEXT:    pand %xmm3, %xmm12799; SSE-NEXT:    pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm32800; SSE-NEXT:    por %xmm1, %xmm32801; SSE-NEXT:    movdqa %xmm3, %xmm12802; SSE-NEXT:    pxor %xmm0, %xmm12803; SSE-NEXT:    movdqa %xmm1, %xmm22804; SSE-NEXT:    pcmpgtd %xmm0, %xmm22805; SSE-NEXT:    pcmpeqd %xmm0, %xmm12806; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]2807; SSE-NEXT:    pand %xmm2, %xmm02808; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]2809; SSE-NEXT:    por %xmm0, %xmm12810; SSE-NEXT:    pand %xmm3, %xmm12811; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]2812; SSE-NEXT:    retq2813;2814; AVX2-LABEL: ustest_f64i32_mm:2815; AVX2:       # %bb.0: # %entry2816; AVX2-NEXT:    vcvttsd2si %xmm0, %rax2817; AVX2-NEXT:    vmovq %rax, %xmm12818; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]2819; AVX2-NEXT:    vcvttsd2si %xmm0, %rax2820; AVX2-NEXT:    vmovq %rax, %xmm02821; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]2822; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4294967295,4294967295]2823; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm22824; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm02825; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm12826; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm12827; AVX2-NEXT:    vpand %xmm0, %xmm1, %xmm02828; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]2829; AVX2-NEXT:    retq2830;2831; AVX512-LABEL: ustest_f64i32_mm:2832; AVX512:       # %bb.0: # %entry2833; AVX512-NEXT:    vcvttpd2qq %xmm0, %xmm02834; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm12835; AVX512-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm02836; AVX512-NEXT:    vpmovusqd %xmm0, %xmm02837; AVX512-NEXT:    retq2838entry:2839  %conv = fptosi <2 x double> %x to <2 x i64>2840  %spec.store.select = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %conv, <2 x i64> <i64 4294967295, i64 4294967295>)2841  %spec.store.select7 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %spec.store.select, <2 x i64> zeroinitializer)2842  %conv6 = trunc <2 x i64> %spec.store.select7 to <2 x i32>2843  ret <2 x i32> %conv62844}2845 2846define <4 x i32> @stest_f32i32_mm(<4 x float> %x) nounwind {2847; SSE-LABEL: stest_f32i32_mm:2848; SSE:       # %bb.0: # %entry2849; SSE-NEXT:    movaps %xmm0, %xmm12850; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]2851; SSE-NEXT:    cvttss2si %xmm1, %rax2852; SSE-NEXT:    movq %rax, %xmm12853; SSE-NEXT:    movaps %xmm0, %xmm22854; SSE-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm0[1]2855; SSE-NEXT:    cvttss2si %xmm2, %rax2856; SSE-NEXT:    movq %rax, %xmm22857; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]2858; SSE-NEXT:    cvttss2si %xmm0, %rax2859; SSE-NEXT:    movq %rax, %xmm32860; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]2861; SSE-NEXT:    cvttss2si %xmm0, %rax2862; SSE-NEXT:    movq %rax, %xmm02863; SSE-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm0[0]2864; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]2865; SSE-NEXT:    movdqa %xmm3, %xmm12866; SSE-NEXT:    pxor %xmm0, %xmm12867; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]2868; SSE-NEXT:    pxor %xmm5, %xmm52869; SSE-NEXT:    pcmpeqd %xmm5, %xmm42870; SSE-NEXT:    movdqa {{.*#+}} xmm6 = [4294967295,4294967295]2871; SSE-NEXT:    movdqa %xmm6, %xmm72872; SSE-NEXT:    pcmpgtd %xmm1, %xmm72873; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]2874; SSE-NEXT:    pand %xmm4, %xmm82875; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]2876; SSE-NEXT:    por %xmm8, %xmm12877; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2147483647,2147483647]2878; SSE-NEXT:    pand %xmm1, %xmm32879; SSE-NEXT:    pandn %xmm4, %xmm12880; SSE-NEXT:    por %xmm3, %xmm12881; SSE-NEXT:    movdqa %xmm2, %xmm32882; SSE-NEXT:    pxor %xmm0, %xmm32883; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]2884; SSE-NEXT:    pcmpeqd %xmm5, %xmm72885; SSE-NEXT:    pcmpgtd %xmm3, %xmm62886; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[0,0,2,2]2887; SSE-NEXT:    pand %xmm7, %xmm32888; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]2889; SSE-NEXT:    por %xmm3, %xmm52890; SSE-NEXT:    pand %xmm5, %xmm22891; SSE-NEXT:    pandn %xmm4, %xmm52892; SSE-NEXT:    por %xmm2, %xmm52893; SSE-NEXT:    movdqa %xmm5, %xmm22894; SSE-NEXT:    pxor %xmm0, %xmm22895; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]2896; SSE-NEXT:    pcmpeqd %xmm4, %xmm42897; SSE-NEXT:    pcmpeqd %xmm4, %xmm32898; SSE-NEXT:    movdqa {{.*#+}} xmm6 = [18446744069414584320,18446744069414584320]2899; SSE-NEXT:    pcmpgtd %xmm6, %xmm22900; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[0,0,2,2]2901; SSE-NEXT:    pand %xmm3, %xmm72902; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]2903; SSE-NEXT:    por %xmm7, %xmm22904; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [18446744071562067968,18446744071562067968]2905; SSE-NEXT:    pand %xmm2, %xmm52906; SSE-NEXT:    pandn %xmm3, %xmm22907; SSE-NEXT:    por %xmm5, %xmm22908; SSE-NEXT:    pxor %xmm1, %xmm02909; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]2910; SSE-NEXT:    pcmpeqd %xmm4, %xmm52911; SSE-NEXT:    pcmpgtd %xmm6, %xmm02912; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2]2913; SSE-NEXT:    pand %xmm5, %xmm42914; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]2915; SSE-NEXT:    por %xmm4, %xmm02916; SSE-NEXT:    pand %xmm0, %xmm12917; SSE-NEXT:    pandn %xmm3, %xmm02918; SSE-NEXT:    por %xmm1, %xmm02919; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]2920; SSE-NEXT:    retq2921;2922; AVX2-LABEL: stest_f32i32_mm:2923; AVX2:       # %bb.0: # %entry2924; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]2925; AVX2-NEXT:    vcvttss2si %xmm1, %rax2926; AVX2-NEXT:    vmovq %rax, %xmm12927; AVX2-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]2928; AVX2-NEXT:    vcvttss2si %xmm2, %rax2929; AVX2-NEXT:    vmovq %rax, %xmm22930; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]2931; AVX2-NEXT:    vcvttss2si %xmm0, %rax2932; AVX2-NEXT:    vmovq %rax, %xmm22933; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2934; AVX2-NEXT:    vcvttss2si %xmm0, %rax2935; AVX2-NEXT:    vmovq %rax, %xmm02936; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]2937; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm02938; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647]2939; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm22940; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm02941; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]2942; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm22943; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm02944; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]2945; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]2946; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm02947; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02948; AVX2-NEXT:    vzeroupper2949; AVX2-NEXT:    retq2950;2951; AVX512-LABEL: stest_f32i32_mm:2952; AVX512:       # %bb.0: # %entry2953; AVX512-NEXT:    vcvttps2qq %xmm0, %ymm02954; AVX512-NEXT:    vpmovsqd %ymm0, %xmm02955; AVX512-NEXT:    vzeroupper2956; AVX512-NEXT:    retq2957entry:2958  %conv = fptosi <4 x float> %x to <4 x i64>2959  %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>)2960  %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>)2961  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>2962  ret <4 x i32> %conv62963}2964 2965define <4 x i32> @utest_f32i32_mm(<4 x float> %x) nounwind {2966; SSE-LABEL: utest_f32i32_mm:2967; SSE:       # %bb.0: # %entry2968; SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]2969; SSE-NEXT:    movaps %xmm0, %xmm12970; SSE-NEXT:    subss %xmm2, %xmm12971; SSE-NEXT:    cvttss2si %xmm1, %rax2972; SSE-NEXT:    cvttss2si %xmm0, %rcx2973; SSE-NEXT:    movq %rcx, %rdx2974; SSE-NEXT:    sarq $63, %rdx2975; SSE-NEXT:    andq %rax, %rdx2976; SSE-NEXT:    orq %rcx, %rdx2977; SSE-NEXT:    movq %rdx, %xmm12978; SSE-NEXT:    movaps %xmm0, %xmm32979; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1],xmm0[1,1]2980; SSE-NEXT:    cvttss2si %xmm3, %rax2981; SSE-NEXT:    subss %xmm2, %xmm32982; SSE-NEXT:    cvttss2si %xmm3, %rcx2983; SSE-NEXT:    movq %rax, %rdx2984; SSE-NEXT:    sarq $63, %rdx2985; SSE-NEXT:    andq %rcx, %rdx2986; SSE-NEXT:    orq %rax, %rdx2987; SSE-NEXT:    movq %rdx, %xmm32988; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]2989; SSE-NEXT:    movaps %xmm0, %xmm32990; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[3,3],xmm0[3,3]2991; SSE-NEXT:    cvttss2si %xmm3, %rax2992; SSE-NEXT:    subss %xmm2, %xmm32993; SSE-NEXT:    cvttss2si %xmm3, %rcx2994; SSE-NEXT:    movq %rax, %rdx2995; SSE-NEXT:    sarq $63, %rdx2996; SSE-NEXT:    andq %rcx, %rdx2997; SSE-NEXT:    orq %rax, %rdx2998; SSE-NEXT:    movq %rdx, %xmm32999; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]3000; SSE-NEXT:    cvttss2si %xmm0, %rax3001; SSE-NEXT:    subss %xmm2, %xmm03002; SSE-NEXT:    cvttss2si %xmm0, %rcx3003; SSE-NEXT:    movq %rax, %rdx3004; SSE-NEXT:    sarq $63, %rdx3005; SSE-NEXT:    andq %rcx, %rdx3006; SSE-NEXT:    orq %rax, %rdx3007; SSE-NEXT:    movq %rdx, %xmm03008; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]3009; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]3010; SSE-NEXT:    movdqa %xmm0, %xmm33011; SSE-NEXT:    pxor %xmm2, %xmm33012; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]3013; SSE-NEXT:    movdqa {{.*#+}} xmm5 = [2147483647,2147483647,2147483647,2147483647]3014; SSE-NEXT:    movdqa %xmm5, %xmm63015; SSE-NEXT:    pcmpgtd %xmm4, %xmm63016; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]3017; SSE-NEXT:    pcmpeqd %xmm2, %xmm33018; SSE-NEXT:    pand %xmm6, %xmm33019; SSE-NEXT:    pcmpeqd %xmm4, %xmm43020; SSE-NEXT:    pand %xmm3, %xmm03021; SSE-NEXT:    pxor %xmm4, %xmm33022; SSE-NEXT:    por %xmm0, %xmm33023; SSE-NEXT:    movdqa %xmm1, %xmm03024; SSE-NEXT:    pxor %xmm2, %xmm03025; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[0,0,2,2]3026; SSE-NEXT:    pcmpgtd %xmm6, %xmm53027; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]3028; SSE-NEXT:    pcmpeqd %xmm2, %xmm03029; SSE-NEXT:    pand %xmm5, %xmm03030; SSE-NEXT:    pxor %xmm0, %xmm43031; SSE-NEXT:    pand %xmm1, %xmm03032; SSE-NEXT:    por %xmm4, %xmm03033; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]3034; SSE-NEXT:    retq3035;3036; AVX2-LABEL: utest_f32i32_mm:3037; AVX2:       # %bb.0: # %entry3038; AVX2-NEXT:    vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]3039; AVX2-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]3040; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm33041; AVX2-NEXT:    vcvttss2si %xmm3, %rax3042; AVX2-NEXT:    vcvttss2si %xmm2, %rcx3043; AVX2-NEXT:    movq %rcx, %rdx3044; AVX2-NEXT:    sarq $63, %rdx3045; AVX2-NEXT:    andq %rax, %rdx3046; AVX2-NEXT:    orq %rcx, %rdx3047; AVX2-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]3048; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm33049; AVX2-NEXT:    vcvttss2si %xmm3, %rax3050; AVX2-NEXT:    vcvttss2si %xmm2, %rcx3051; AVX2-NEXT:    vmovq %rdx, %xmm23052; AVX2-NEXT:    movq %rcx, %rdx3053; AVX2-NEXT:    sarq $63, %rdx3054; AVX2-NEXT:    andq %rax, %rdx3055; AVX2-NEXT:    orq %rcx, %rdx3056; AVX2-NEXT:    vmovq %rdx, %xmm33057; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm43058; AVX2-NEXT:    vcvttss2si %xmm4, %rax3059; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]3060; AVX2-NEXT:    vcvttss2si %xmm0, %rcx3061; AVX2-NEXT:    movq %rcx, %rdx3062; AVX2-NEXT:    sarq $63, %rdx3063; AVX2-NEXT:    andq %rax, %rdx3064; AVX2-NEXT:    orq %rcx, %rdx3065; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]3066; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm13067; AVX2-NEXT:    vcvttss2si %xmm1, %rax3068; AVX2-NEXT:    vcvttss2si %xmm0, %rcx3069; AVX2-NEXT:    vmovq %rdx, %xmm03070; AVX2-NEXT:    movq %rcx, %rdx3071; AVX2-NEXT:    sarq $63, %rdx3072; AVX2-NEXT:    andq %rax, %rdx3073; AVX2-NEXT:    orq %rcx, %rdx3074; AVX2-NEXT:    vmovq %rdx, %xmm13075; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]3076; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm03077; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]3078; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm13079; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372041149743102,9223372041149743102,9223372041149743102,9223372041149743102]3080; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm13081; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]3082; AVX2-NEXT:    vblendvpd %ymm1, %ymm2, %ymm0, %ymm03083; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]3084; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]3085; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm03086; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03087; AVX2-NEXT:    vzeroupper3088; AVX2-NEXT:    retq3089;3090; AVX512-LABEL: utest_f32i32_mm:3091; AVX512:       # %bb.0: # %entry3092; AVX512-NEXT:    vcvttps2uqq %xmm0, %ymm03093; AVX512-NEXT:    vpmovusqd %ymm0, %xmm03094; AVX512-NEXT:    vzeroupper3095; AVX512-NEXT:    retq3096entry:3097  %conv = fptoui <4 x float> %x to <4 x i64>3098  %spec.store.select = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)3099  %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>3100  ret <4 x i32> %conv63101}3102 3103define <4 x i32> @ustest_f32i32_mm(<4 x float> %x) nounwind {3104; SSE-LABEL: ustest_f32i32_mm:3105; SSE:       # %bb.0: # %entry3106; SSE-NEXT:    movaps %xmm0, %xmm13107; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]3108; SSE-NEXT:    cvttss2si %xmm1, %rax3109; SSE-NEXT:    movq %rax, %xmm13110; SSE-NEXT:    movaps %xmm0, %xmm23111; SSE-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm0[1]3112; SSE-NEXT:    cvttss2si %xmm2, %rax3113; SSE-NEXT:    movq %rax, %xmm23114; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]3115; SSE-NEXT:    cvttss2si %xmm0, %rax3116; SSE-NEXT:    movq %rax, %xmm33117; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]3118; SSE-NEXT:    cvttss2si %xmm0, %rax3119; SSE-NEXT:    movq %rax, %xmm03120; SSE-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm0[0]3121; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]3122; SSE-NEXT:    movdqa %xmm3, %xmm13123; SSE-NEXT:    pxor %xmm0, %xmm13124; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]3125; SSE-NEXT:    pxor %xmm5, %xmm53126; SSE-NEXT:    pcmpeqd %xmm5, %xmm43127; SSE-NEXT:    movdqa {{.*#+}} xmm6 = [2147483647,2147483647]3128; SSE-NEXT:    movdqa %xmm6, %xmm73129; SSE-NEXT:    pcmpgtd %xmm1, %xmm73130; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]3131; SSE-NEXT:    pand %xmm4, %xmm83132; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]3133; SSE-NEXT:    por %xmm8, %xmm13134; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [4294967295,4294967295]3135; SSE-NEXT:    pand %xmm1, %xmm33136; SSE-NEXT:    pandn %xmm4, %xmm13137; SSE-NEXT:    por %xmm3, %xmm13138; SSE-NEXT:    movdqa %xmm2, %xmm33139; SSE-NEXT:    pxor %xmm0, %xmm33140; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]3141; SSE-NEXT:    pcmpeqd %xmm5, %xmm73142; SSE-NEXT:    pcmpgtd %xmm3, %xmm63143; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[0,0,2,2]3144; SSE-NEXT:    pand %xmm7, %xmm33145; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]3146; SSE-NEXT:    por %xmm3, %xmm53147; SSE-NEXT:    pand %xmm5, %xmm23148; SSE-NEXT:    pandn %xmm4, %xmm53149; SSE-NEXT:    por %xmm2, %xmm53150; SSE-NEXT:    movdqa %xmm5, %xmm23151; SSE-NEXT:    pxor %xmm0, %xmm23152; SSE-NEXT:    movdqa %xmm2, %xmm33153; SSE-NEXT:    pcmpgtd %xmm0, %xmm33154; SSE-NEXT:    pcmpeqd %xmm0, %xmm23155; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]3156; SSE-NEXT:    pand %xmm3, %xmm23157; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]3158; SSE-NEXT:    por %xmm2, %xmm33159; SSE-NEXT:    pand %xmm5, %xmm33160; SSE-NEXT:    movdqa %xmm1, %xmm23161; SSE-NEXT:    pxor %xmm0, %xmm23162; SSE-NEXT:    movdqa %xmm2, %xmm43163; SSE-NEXT:    pcmpgtd %xmm0, %xmm43164; SSE-NEXT:    pcmpeqd %xmm0, %xmm23165; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]3166; SSE-NEXT:    pand %xmm4, %xmm23167; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]3168; SSE-NEXT:    por %xmm2, %xmm03169; SSE-NEXT:    pand %xmm1, %xmm03170; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]3171; SSE-NEXT:    retq3172;3173; AVX2-LABEL: ustest_f32i32_mm:3174; AVX2:       # %bb.0: # %entry3175; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]3176; AVX2-NEXT:    vcvttss2si %xmm1, %rax3177; AVX2-NEXT:    vmovq %rax, %xmm13178; AVX2-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]3179; AVX2-NEXT:    vcvttss2si %xmm2, %rax3180; AVX2-NEXT:    vmovq %rax, %xmm23181; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]3182; AVX2-NEXT:    vcvttss2si %xmm0, %rax3183; AVX2-NEXT:    vmovq %rax, %xmm23184; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]3185; AVX2-NEXT:    vcvttss2si %xmm0, %rax3186; AVX2-NEXT:    vmovq %rax, %xmm03187; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]3188; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm03189; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]3190; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm23191; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm03192; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm13193; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm13194; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm03195; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]3196; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]3197; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm03198; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03199; AVX2-NEXT:    vzeroupper3200; AVX2-NEXT:    retq3201;3202; AVX512-LABEL: ustest_f32i32_mm:3203; AVX512:       # %bb.0: # %entry3204; AVX512-NEXT:    vcvttps2qq %xmm0, %ymm03205; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm13206; AVX512-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm03207; AVX512-NEXT:    vpmovusqd %ymm0, %xmm03208; AVX512-NEXT:    vzeroupper3209; AVX512-NEXT:    retq3210entry:3211  %conv = fptosi <4 x float> %x to <4 x i64>3212  %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)3213  %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> zeroinitializer)3214  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>3215  ret <4 x i32> %conv63216}3217 3218define <4 x i32> @stest_f16i32_mm(<4 x half> %x) nounwind {3219; SSE-LABEL: stest_f16i32_mm:3220; SSE:       # %bb.0: # %entry3221; SSE-NEXT:    subq $72, %rsp3222; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill3223; SSE-NEXT:    movdqa %xmm0, %xmm13224; SSE-NEXT:    psrld $16, %xmm13225; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3226; SSE-NEXT:    movdqa %xmm0, %xmm13227; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]3228; SSE-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3229; SSE-NEXT:    psrlq $48, %xmm03230; SSE-NEXT:    callq __extendhfsf2@PLT3231; SSE-NEXT:    cvttss2si %xmm0, %rax3232; SSE-NEXT:    movq %rax, %xmm03233; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3234; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3235; SSE-NEXT:    callq __extendhfsf2@PLT3236; SSE-NEXT:    cvttss2si %xmm0, %rax3237; SSE-NEXT:    movq %rax, %xmm03238; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3239; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]3240; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3241; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3242; SSE-NEXT:    callq __extendhfsf2@PLT3243; SSE-NEXT:    cvttss2si %xmm0, %rax3244; SSE-NEXT:    movq %rax, %xmm03245; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill3246; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3247; SSE-NEXT:    callq __extendhfsf2@PLT3248; SSE-NEXT:    cvttss2si %xmm0, %rax3249; SSE-NEXT:    movq %rax, %xmm03250; SSE-NEXT:    movdqa (%rsp), %xmm2 # 16-byte Reload3251; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]3252; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]3253; SSE-NEXT:    movdqa %xmm2, %xmm13254; SSE-NEXT:    movdqa %xmm2, %xmm73255; SSE-NEXT:    pxor %xmm0, %xmm13256; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]3257; SSE-NEXT:    pxor %xmm3, %xmm33258; SSE-NEXT:    pcmpeqd %xmm3, %xmm23259; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [4294967295,4294967295]3260; SSE-NEXT:    movdqa %xmm4, %xmm53261; SSE-NEXT:    pcmpgtd %xmm1, %xmm53262; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]3263; SSE-NEXT:    pand %xmm2, %xmm63264; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]3265; SSE-NEXT:    por %xmm6, %xmm13266; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2147483647,2147483647]3267; SSE-NEXT:    pand %xmm1, %xmm73268; SSE-NEXT:    pandn %xmm2, %xmm13269; SSE-NEXT:    por %xmm7, %xmm13270; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload3271; SSE-NEXT:    movdqa %xmm7, %xmm53272; SSE-NEXT:    pxor %xmm0, %xmm53273; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]3274; SSE-NEXT:    pcmpeqd %xmm3, %xmm63275; SSE-NEXT:    pcmpgtd %xmm5, %xmm43276; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,0,2,2]3277; SSE-NEXT:    pand %xmm6, %xmm33278; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]3279; SSE-NEXT:    por %xmm3, %xmm43280; SSE-NEXT:    movdqa %xmm7, %xmm33281; SSE-NEXT:    pand %xmm4, %xmm33282; SSE-NEXT:    pandn %xmm2, %xmm43283; SSE-NEXT:    por %xmm3, %xmm43284; SSE-NEXT:    movdqa %xmm4, %xmm23285; SSE-NEXT:    pxor %xmm0, %xmm23286; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]3287; SSE-NEXT:    pcmpeqd %xmm5, %xmm53288; SSE-NEXT:    pcmpeqd %xmm5, %xmm33289; SSE-NEXT:    movdqa {{.*#+}} xmm6 = [18446744069414584320,18446744069414584320]3290; SSE-NEXT:    pcmpgtd %xmm6, %xmm23291; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[0,0,2,2]3292; SSE-NEXT:    pand %xmm3, %xmm73293; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]3294; SSE-NEXT:    por %xmm7, %xmm23295; SSE-NEXT:    movdqa {{.*#+}} xmm3 = [18446744071562067968,18446744071562067968]3296; SSE-NEXT:    pand %xmm2, %xmm43297; SSE-NEXT:    pandn %xmm3, %xmm23298; SSE-NEXT:    por %xmm4, %xmm23299; SSE-NEXT:    pxor %xmm1, %xmm03300; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]3301; SSE-NEXT:    pcmpeqd %xmm5, %xmm43302; SSE-NEXT:    pcmpgtd %xmm6, %xmm03303; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2]3304; SSE-NEXT:    pand %xmm4, %xmm53305; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]3306; SSE-NEXT:    por %xmm5, %xmm03307; SSE-NEXT:    pand %xmm0, %xmm13308; SSE-NEXT:    pandn %xmm3, %xmm03309; SSE-NEXT:    por %xmm1, %xmm03310; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]3311; SSE-NEXT:    addq $72, %rsp3312; SSE-NEXT:    retq3313;3314; AVX2-LABEL: stest_f16i32_mm:3315; AVX2:       # %bb.0: # %entry3316; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm13317; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm13318; AVX2-NEXT:    vcvttss2si %xmm1, %rax3319; AVX2-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]3320; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm13321; AVX2-NEXT:    vcvttss2si %xmm1, %rcx3322; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm13323; AVX2-NEXT:    vmovq %rax, %xmm23324; AVX2-NEXT:    vcvttss2si %xmm1, %rax3325; AVX2-NEXT:    vmovq %rcx, %xmm13326; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]3327; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm03328; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm03329; AVX2-NEXT:    vmovq %rax, %xmm23330; AVX2-NEXT:    vcvttss2si %xmm0, %rax3331; AVX2-NEXT:    vmovq %rax, %xmm03332; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]3333; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm03334; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647]3335; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm23336; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm03337; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]3338; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm23339; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm03340; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]3341; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]3342; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm03343; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03344; AVX2-NEXT:    vzeroupper3345; AVX2-NEXT:    retq3346;3347; AVX512-LABEL: stest_f16i32_mm:3348; AVX512:       # %bb.0: # %entry3349; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm03350; AVX512-NEXT:    vcvttps2qq %ymm0, %zmm03351; AVX512-NEXT:    vpmovsqd %ymm0, %xmm03352; AVX512-NEXT:    vzeroupper3353; AVX512-NEXT:    retq3354entry:3355  %conv = fptosi <4 x half> %x to <4 x i64>3356  %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>)3357  %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>)3358  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>3359  ret <4 x i32> %conv63360}3361 3362define <4 x i32> @utest_f16i32_mm(<4 x half> %x) nounwind {3363; SSE-LABEL: utest_f16i32_mm:3364; SSE:       # %bb.0: # %entry3365; SSE-NEXT:    subq $72, %rsp3366; SSE-NEXT:    movaps %xmm0, %xmm13367; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]3368; SSE-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3369; SSE-NEXT:    movaps %xmm0, %xmm13370; SSE-NEXT:    psrlq $48, %xmm13371; SSE-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill3372; SSE-NEXT:    movaps %xmm0, %xmm13373; SSE-NEXT:    psrld $16, %xmm13374; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3375; SSE-NEXT:    callq __extendhfsf2@PLT3376; SSE-NEXT:    cvttss2si %xmm0, %rax3377; SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03378; SSE-NEXT:    cvttss2si %xmm0, %rcx3379; SSE-NEXT:    movq %rax, %rdx3380; SSE-NEXT:    sarq $63, %rdx3381; SSE-NEXT:    andq %rcx, %rdx3382; SSE-NEXT:    orq %rax, %rdx3383; SSE-NEXT:    movq %rdx, %xmm03384; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3385; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3386; SSE-NEXT:    callq __extendhfsf2@PLT3387; SSE-NEXT:    cvttss2si %xmm0, %rax3388; SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03389; SSE-NEXT:    cvttss2si %xmm0, %rcx3390; SSE-NEXT:    movq %rax, %rdx3391; SSE-NEXT:    sarq $63, %rdx3392; SSE-NEXT:    andq %rcx, %rdx3393; SSE-NEXT:    orq %rax, %rdx3394; SSE-NEXT:    movq %rdx, %xmm03395; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3396; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]3397; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3398; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3399; SSE-NEXT:    callq __extendhfsf2@PLT3400; SSE-NEXT:    cvttss2si %xmm0, %rax3401; SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03402; SSE-NEXT:    cvttss2si %xmm0, %rcx3403; SSE-NEXT:    movq %rax, %rdx3404; SSE-NEXT:    sarq $63, %rdx3405; SSE-NEXT:    andq %rcx, %rdx3406; SSE-NEXT:    orq %rax, %rdx3407; SSE-NEXT:    movq %rdx, %xmm03408; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill3409; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3410; SSE-NEXT:    callq __extendhfsf2@PLT3411; SSE-NEXT:    cvttss2si %xmm0, %rax3412; SSE-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03413; SSE-NEXT:    cvttss2si %xmm0, %rcx3414; SSE-NEXT:    movq %rax, %rdx3415; SSE-NEXT:    sarq $63, %rdx3416; SSE-NEXT:    andq %rcx, %rdx3417; SSE-NEXT:    orq %rax, %rdx3418; SSE-NEXT:    movq %rdx, %xmm03419; SSE-NEXT:    punpcklqdq (%rsp), %xmm0 # 16-byte Folded Reload3420; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]3421; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [9223372039002259456,9223372039002259456]3422; SSE-NEXT:    movdqa %xmm0, %xmm23423; SSE-NEXT:    pxor %xmm1, %xmm23424; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]3425; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2147483647,2147483647,2147483647,2147483647]3426; SSE-NEXT:    movdqa %xmm4, %xmm53427; SSE-NEXT:    pcmpgtd %xmm3, %xmm53428; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]3429; SSE-NEXT:    pcmpeqd %xmm1, %xmm23430; SSE-NEXT:    pand %xmm5, %xmm23431; SSE-NEXT:    pcmpeqd %xmm3, %xmm33432; SSE-NEXT:    pand %xmm2, %xmm03433; SSE-NEXT:    pxor %xmm3, %xmm23434; SSE-NEXT:    por %xmm0, %xmm23435; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload3436; SSE-NEXT:    movdqa %xmm6, %xmm03437; SSE-NEXT:    pxor %xmm1, %xmm03438; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2]3439; SSE-NEXT:    pcmpgtd %xmm5, %xmm43440; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]3441; SSE-NEXT:    pcmpeqd %xmm1, %xmm03442; SSE-NEXT:    pand %xmm4, %xmm03443; SSE-NEXT:    pxor %xmm0, %xmm33444; SSE-NEXT:    pand %xmm6, %xmm03445; SSE-NEXT:    por %xmm3, %xmm03446; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]3447; SSE-NEXT:    addq $72, %rsp3448; SSE-NEXT:    retq3449;3450; AVX2-LABEL: utest_f16i32_mm:3451; AVX2:       # %bb.0: # %entry3452; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm13453; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm23454; AVX2-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]3455; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm33456; AVX2-NEXT:    vcvttss2si %xmm3, %rax3457; AVX2-NEXT:    vcvttss2si %xmm2, %rcx3458; AVX2-NEXT:    movq %rcx, %rdx3459; AVX2-NEXT:    sarq $63, %rdx3460; AVX2-NEXT:    andq %rax, %rdx3461; AVX2-NEXT:    orq %rcx, %rdx3462; AVX2-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]3463; AVX2-NEXT:    vcvtph2ps %xmm2, %xmm23464; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm33465; AVX2-NEXT:    vcvttss2si %xmm3, %rax3466; AVX2-NEXT:    vcvttss2si %xmm2, %rcx3467; AVX2-NEXT:    vmovq %rdx, %xmm23468; AVX2-NEXT:    movq %rcx, %rdx3469; AVX2-NEXT:    sarq $63, %rdx3470; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm33471; AVX2-NEXT:    andq %rax, %rdx3472; AVX2-NEXT:    vsubss %xmm1, %xmm3, %xmm43473; AVX2-NEXT:    vcvttss2si %xmm4, %rax3474; AVX2-NEXT:    orq %rcx, %rdx3475; AVX2-NEXT:    vmovq %rdx, %xmm43476; AVX2-NEXT:    vcvttss2si %xmm3, %rcx3477; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]3478; AVX2-NEXT:    movq %rcx, %rdx3479; AVX2-NEXT:    sarq $63, %rdx3480; AVX2-NEXT:    andq %rax, %rdx3481; AVX2-NEXT:    orq %rcx, %rdx3482; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm03483; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm03484; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm13485; AVX2-NEXT:    vcvttss2si %xmm1, %rax3486; AVX2-NEXT:    vcvttss2si %xmm0, %rcx3487; AVX2-NEXT:    vmovq %rdx, %xmm03488; AVX2-NEXT:    movq %rcx, %rdx3489; AVX2-NEXT:    sarq $63, %rdx3490; AVX2-NEXT:    andq %rax, %rdx3491; AVX2-NEXT:    orq %rcx, %rdx3492; AVX2-NEXT:    vmovq %rdx, %xmm13493; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]3494; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm03495; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]3496; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm13497; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372041149743102,9223372041149743102,9223372041149743102,9223372041149743102]3498; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm13499; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]3500; AVX2-NEXT:    vblendvpd %ymm1, %ymm2, %ymm0, %ymm03501; AVX2-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]3502; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]3503; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm03504; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03505; AVX2-NEXT:    vzeroupper3506; AVX2-NEXT:    retq3507;3508; AVX512-LABEL: utest_f16i32_mm:3509; AVX512:       # %bb.0: # %entry3510; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm03511; AVX512-NEXT:    vcvttps2uqq %ymm0, %zmm03512; AVX512-NEXT:    vpmovusqd %ymm0, %xmm03513; AVX512-NEXT:    vzeroupper3514; AVX512-NEXT:    retq3515entry:3516  %conv = fptoui <4 x half> %x to <4 x i64>3517  %spec.store.select = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)3518  %conv6 = trunc <4 x i64> %spec.store.select to <4 x i32>3519  ret <4 x i32> %conv63520}3521 3522define <4 x i32> @ustest_f16i32_mm(<4 x half> %x) nounwind {3523; SSE-LABEL: ustest_f16i32_mm:3524; SSE:       # %bb.0: # %entry3525; SSE-NEXT:    subq $72, %rsp3526; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill3527; SSE-NEXT:    movdqa %xmm0, %xmm13528; SSE-NEXT:    psrld $16, %xmm13529; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3530; SSE-NEXT:    movdqa %xmm0, %xmm13531; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]3532; SSE-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3533; SSE-NEXT:    psrlq $48, %xmm03534; SSE-NEXT:    callq __extendhfsf2@PLT3535; SSE-NEXT:    cvttss2si %xmm0, %rax3536; SSE-NEXT:    movq %rax, %xmm03537; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3538; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3539; SSE-NEXT:    callq __extendhfsf2@PLT3540; SSE-NEXT:    cvttss2si %xmm0, %rax3541; SSE-NEXT:    movq %rax, %xmm03542; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3543; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]3544; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3545; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3546; SSE-NEXT:    callq __extendhfsf2@PLT3547; SSE-NEXT:    cvttss2si %xmm0, %rax3548; SSE-NEXT:    movq %rax, %xmm03549; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill3550; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3551; SSE-NEXT:    callq __extendhfsf2@PLT3552; SSE-NEXT:    cvttss2si %xmm0, %rax3553; SSE-NEXT:    movq %rax, %xmm03554; SSE-NEXT:    movdqa (%rsp), %xmm2 # 16-byte Reload3555; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]3556; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]3557; SSE-NEXT:    movdqa %xmm2, %xmm13558; SSE-NEXT:    movdqa %xmm2, %xmm73559; SSE-NEXT:    pxor %xmm0, %xmm13560; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]3561; SSE-NEXT:    pxor %xmm3, %xmm33562; SSE-NEXT:    pcmpeqd %xmm3, %xmm23563; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2147483647,2147483647]3564; SSE-NEXT:    movdqa %xmm4, %xmm53565; SSE-NEXT:    pcmpgtd %xmm1, %xmm53566; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]3567; SSE-NEXT:    pand %xmm2, %xmm63568; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]3569; SSE-NEXT:    por %xmm6, %xmm13570; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [4294967295,4294967295]3571; SSE-NEXT:    pand %xmm1, %xmm73572; SSE-NEXT:    pandn %xmm2, %xmm13573; SSE-NEXT:    por %xmm7, %xmm13574; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload3575; SSE-NEXT:    movdqa %xmm7, %xmm53576; SSE-NEXT:    pxor %xmm0, %xmm53577; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]3578; SSE-NEXT:    pcmpeqd %xmm3, %xmm63579; SSE-NEXT:    pcmpgtd %xmm5, %xmm43580; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,0,2,2]3581; SSE-NEXT:    pand %xmm6, %xmm33582; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]3583; SSE-NEXT:    por %xmm3, %xmm43584; SSE-NEXT:    movdqa %xmm7, %xmm33585; SSE-NEXT:    pand %xmm4, %xmm33586; SSE-NEXT:    pandn %xmm2, %xmm43587; SSE-NEXT:    por %xmm3, %xmm43588; SSE-NEXT:    movdqa %xmm4, %xmm23589; SSE-NEXT:    pxor %xmm0, %xmm23590; SSE-NEXT:    movdqa %xmm2, %xmm33591; SSE-NEXT:    pcmpgtd %xmm0, %xmm33592; SSE-NEXT:    pcmpeqd %xmm0, %xmm23593; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]3594; SSE-NEXT:    pand %xmm3, %xmm23595; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]3596; SSE-NEXT:    por %xmm2, %xmm33597; SSE-NEXT:    pand %xmm4, %xmm33598; SSE-NEXT:    movdqa %xmm1, %xmm23599; SSE-NEXT:    pxor %xmm0, %xmm23600; SSE-NEXT:    movdqa %xmm2, %xmm43601; SSE-NEXT:    pcmpgtd %xmm0, %xmm43602; SSE-NEXT:    pcmpeqd %xmm0, %xmm23603; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]3604; SSE-NEXT:    pand %xmm4, %xmm23605; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]3606; SSE-NEXT:    por %xmm2, %xmm03607; SSE-NEXT:    pand %xmm1, %xmm03608; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]3609; SSE-NEXT:    addq $72, %rsp3610; SSE-NEXT:    retq3611;3612; AVX2-LABEL: ustest_f16i32_mm:3613; AVX2:       # %bb.0: # %entry3614; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm13615; AVX2-NEXT:    vcvtph2ps %xmm1, %xmm13616; AVX2-NEXT:    vcvttss2si %xmm1, %rax3617; AVX2-NEXT:    vmovq %rax, %xmm13618; AVX2-NEXT:    vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]3619; AVX2-NEXT:    vcvtph2ps %xmm2, %xmm23620; AVX2-NEXT:    vcvttss2si %xmm2, %rax3621; AVX2-NEXT:    vmovq %rax, %xmm23622; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]3623; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm23624; AVX2-NEXT:    vcvttss2si %xmm2, %rax3625; AVX2-NEXT:    vmovq %rax, %xmm23626; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm03627; AVX2-NEXT:    vcvtph2ps %xmm0, %xmm03628; AVX2-NEXT:    vcvttss2si %xmm0, %rax3629; AVX2-NEXT:    vmovq %rax, %xmm03630; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]3631; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm03632; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]3633; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm23634; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm03635; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm13636; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm13637; AVX2-NEXT:    vpand %ymm0, %ymm1, %ymm03638; AVX2-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,2,4,6,0,2,4,6]3639; AVX2-NEXT:    # ymm1 = mem[0,1,0,1]3640; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm03641; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03642; AVX2-NEXT:    vzeroupper3643; AVX2-NEXT:    retq3644;3645; AVX512-LABEL: ustest_f16i32_mm:3646; AVX512:       # %bb.0: # %entry3647; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm03648; AVX512-NEXT:    vcvttps2qq %ymm0, %zmm03649; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm13650; AVX512-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm03651; AVX512-NEXT:    vpmovusqd %ymm0, %xmm03652; AVX512-NEXT:    vzeroupper3653; AVX512-NEXT:    retq3654entry:3655  %conv = fptosi <4 x half> %x to <4 x i64>3656  %spec.store.select = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %conv, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>)3657  %spec.store.select7 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %spec.store.select, <4 x i64> zeroinitializer)3658  %conv6 = trunc <4 x i64> %spec.store.select7 to <4 x i32>3659  ret <4 x i32> %conv63660}3661 3662; i16 saturate3663 3664define <2 x i16> @stest_f64i16_mm(<2 x double> %x) nounwind {3665; SSE-LABEL: stest_f64i16_mm:3666; SSE:       # %bb.0: # %entry3667; SSE-NEXT:    cvttpd2dq %xmm0, %xmm03668; SSE-NEXT:    packssdw %xmm0, %xmm03669; SSE-NEXT:    retq3670;3671; AVX-LABEL: stest_f64i16_mm:3672; AVX:       # %bb.0: # %entry3673; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm03674; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm03675; AVX-NEXT:    retq3676entry:3677  %conv = fptosi <2 x double> %x to <2 x i32>3678  %spec.store.select = call <2 x i32> @llvm.smin.v2i32(<2 x i32> %conv, <2 x i32> <i32 32767, i32 32767>)3679  %spec.store.select7 = call <2 x i32> @llvm.smax.v2i32(<2 x i32> %spec.store.select, <2 x i32> <i32 -32768, i32 -32768>)3680  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>3681  ret <2 x i16> %conv63682}3683 3684define <2 x i16> @utest_f64i16_mm(<2 x double> %x) nounwind {3685; SSE-LABEL: utest_f64i16_mm:3686; SSE:       # %bb.0: # %entry3687; SSE-NEXT:    cvttpd2dq %xmm0, %xmm13688; SSE-NEXT:    movapd %xmm1, %xmm23689; SSE-NEXT:    psrad $31, %xmm23690; SSE-NEXT:    addpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03691; SSE-NEXT:    cvttpd2dq %xmm0, %xmm03692; SSE-NEXT:    andpd %xmm2, %xmm03693; SSE-NEXT:    orpd %xmm1, %xmm03694; SSE-NEXT:    movapd {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]3695; SSE-NEXT:    xorpd %xmm0, %xmm13696; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13697; SSE-NEXT:    movdqa %xmm1, %xmm23698; SSE-NEXT:    pandn %xmm0, %xmm23699; SSE-NEXT:    psrld $16, %xmm13700; SSE-NEXT:    por %xmm2, %xmm13701; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]3702; SSE-NEXT:    retq3703;3704; AVX2-LABEL: utest_f64i16_mm:3705; AVX2:       # %bb.0: # %entry3706; AVX2-NEXT:    vcvttpd2dq %xmm0, %xmm13707; AVX2-NEXT:    vaddpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03708; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm23709; AVX2-NEXT:    vcvttpd2dq %xmm0, %xmm03710; AVX2-NEXT:    vandpd %xmm2, %xmm0, %xmm03711; AVX2-NEXT:    vorpd %xmm0, %xmm1, %xmm03712; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [65535,65535,65535,65535]3713; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm03714; AVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]3715; AVX2-NEXT:    retq3716;3717; AVX512-LABEL: utest_f64i16_mm:3718; AVX512:       # %bb.0: # %entry3719; AVX512-NEXT:    vcvttpd2udq %xmm0, %xmm03720; AVX512-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm03721; AVX512-NEXT:    vpmovdw %xmm0, %xmm03722; AVX512-NEXT:    retq3723entry:3724  %conv = fptoui <2 x double> %x to <2 x i32>3725  %spec.store.select = call <2 x i32> @llvm.umin.v2i32(<2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>)3726  %conv6 = trunc <2 x i32> %spec.store.select to <2 x i16>3727  ret <2 x i16> %conv63728}3729 3730define <2 x i16> @ustest_f64i16_mm(<2 x double> %x) nounwind {3731; SSE-LABEL: ustest_f64i16_mm:3732; SSE:       # %bb.0: # %entry3733; SSE-NEXT:    cvttpd2dq %xmm0, %xmm03734; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,u,u]3735; SSE-NEXT:    movdqa %xmm1, %xmm23736; SSE-NEXT:    pcmpgtd %xmm0, %xmm23737; SSE-NEXT:    pand %xmm2, %xmm03738; SSE-NEXT:    pandn %xmm1, %xmm23739; SSE-NEXT:    por %xmm0, %xmm23740; SSE-NEXT:    pxor %xmm0, %xmm03741; SSE-NEXT:    movdqa %xmm2, %xmm13742; SSE-NEXT:    pcmpgtd %xmm0, %xmm13743; SSE-NEXT:    pand %xmm2, %xmm13744; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]3745; SSE-NEXT:    retq3746;3747; AVX-LABEL: ustest_f64i16_mm:3748; AVX:       # %bb.0: # %entry3749; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm03750; AVX-NEXT:    vpackusdw %xmm0, %xmm0, %xmm03751; AVX-NEXT:    retq3752entry:3753  %conv = fptosi <2 x double> %x to <2 x i32>3754  %spec.store.select = call <2 x i32> @llvm.smin.v2i32(<2 x i32> %conv, <2 x i32> <i32 65535, i32 65535>)3755  %spec.store.select7 = call <2 x i32> @llvm.smax.v2i32(<2 x i32> %spec.store.select, <2 x i32> zeroinitializer)3756  %conv6 = trunc <2 x i32> %spec.store.select7 to <2 x i16>3757  ret <2 x i16> %conv63758}3759 3760define <4 x i16> @stest_f32i16_mm(<4 x float> %x) nounwind {3761; SSE-LABEL: stest_f32i16_mm:3762; SSE:       # %bb.0: # %entry3763; SSE-NEXT:    cvttps2dq %xmm0, %xmm03764; SSE-NEXT:    packssdw %xmm0, %xmm03765; SSE-NEXT:    retq3766;3767; AVX-LABEL: stest_f32i16_mm:3768; AVX:       # %bb.0: # %entry3769; AVX-NEXT:    vcvttps2dq %xmm0, %xmm03770; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm03771; AVX-NEXT:    retq3772entry:3773  %conv = fptosi <4 x float> %x to <4 x i32>3774  %spec.store.select = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %conv, <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>)3775  %spec.store.select7 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %spec.store.select, <4 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768>)3776  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>3777  ret <4 x i16> %conv63778}3779 3780define <4 x i16> @utest_f32i16_mm(<4 x float> %x) nounwind {3781; SSE-LABEL: utest_f32i16_mm:3782; SSE:       # %bb.0: # %entry3783; SSE-NEXT:    cvttps2dq %xmm0, %xmm13784; SSE-NEXT:    movdqa %xmm1, %xmm23785; SSE-NEXT:    psrad $31, %xmm23786; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03787; SSE-NEXT:    cvttps2dq %xmm0, %xmm03788; SSE-NEXT:    pand %xmm2, %xmm03789; SSE-NEXT:    por %xmm1, %xmm03790; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]3791; SSE-NEXT:    pxor %xmm0, %xmm13792; SSE-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13793; SSE-NEXT:    movdqa %xmm1, %xmm23794; SSE-NEXT:    pandn %xmm0, %xmm23795; SSE-NEXT:    psrld $16, %xmm13796; SSE-NEXT:    por %xmm2, %xmm13797; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]3798; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]3799; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]3800; SSE-NEXT:    retq3801;3802; AVX2-LABEL: utest_f32i16_mm:3803; AVX2:       # %bb.0: # %entry3804; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm1 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]3805; AVX2-NEXT:    vsubps %xmm1, %xmm0, %xmm13806; AVX2-NEXT:    vcvttps2dq %xmm1, %xmm13807; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm03808; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm23809; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm13810; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm03811; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [65535,65535,65535,65535]3812; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm03813; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm03814; AVX2-NEXT:    retq3815;3816; AVX512-LABEL: utest_f32i16_mm:3817; AVX512:       # %bb.0: # %entry3818; AVX512-NEXT:    vcvttps2udq %xmm0, %xmm03819; AVX512-NEXT:    vpmovusdw %xmm0, %xmm03820; AVX512-NEXT:    retq3821entry:3822  %conv = fptoui <4 x float> %x to <4 x i32>3823  %spec.store.select = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>)3824  %conv6 = trunc <4 x i32> %spec.store.select to <4 x i16>3825  ret <4 x i16> %conv63826}3827 3828define <4 x i16> @ustest_f32i16_mm(<4 x float> %x) nounwind {3829; SSE-LABEL: ustest_f32i16_mm:3830; SSE:       # %bb.0: # %entry3831; SSE-NEXT:    cvttps2dq %xmm0, %xmm03832; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,65535]3833; SSE-NEXT:    movdqa %xmm1, %xmm23834; SSE-NEXT:    pcmpgtd %xmm0, %xmm23835; SSE-NEXT:    pand %xmm2, %xmm03836; SSE-NEXT:    pandn %xmm1, %xmm23837; SSE-NEXT:    por %xmm0, %xmm23838; SSE-NEXT:    pxor %xmm0, %xmm03839; SSE-NEXT:    movdqa %xmm2, %xmm13840; SSE-NEXT:    pcmpgtd %xmm0, %xmm13841; SSE-NEXT:    pand %xmm2, %xmm13842; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,2,2,3,4,5,6,7]3843; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]3844; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]3845; SSE-NEXT:    retq3846;3847; AVX-LABEL: ustest_f32i16_mm:3848; AVX:       # %bb.0: # %entry3849; AVX-NEXT:    vcvttps2dq %xmm0, %xmm03850; AVX-NEXT:    vpackusdw %xmm0, %xmm0, %xmm03851; AVX-NEXT:    retq3852entry:3853  %conv = fptosi <4 x float> %x to <4 x i32>3854  %spec.store.select = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %conv, <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>)3855  %spec.store.select7 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %spec.store.select, <4 x i32> zeroinitializer)3856  %conv6 = trunc <4 x i32> %spec.store.select7 to <4 x i16>3857  ret <4 x i16> %conv63858}3859 3860define <8 x i16> @stest_f16i16_mm(<8 x half> %x) nounwind {3861; SSE-LABEL: stest_f16i16_mm:3862; SSE:       # %bb.0: # %entry3863; SSE-NEXT:    subq $72, %rsp3864; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill3865; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3866; SSE-NEXT:    callq __extendhfsf2@PLT3867; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3868; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3869; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]3870; SSE-NEXT:    callq __extendhfsf2@PLT3871; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3872; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3873; SSE-NEXT:    cvttps2dq %xmm0, %xmm03874; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3875; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload3876; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3877; SSE-NEXT:    callq __extendhfsf2@PLT3878; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3879; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3880; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]3881; SSE-NEXT:    callq __extendhfsf2@PLT3882; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3883; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3884; SSE-NEXT:    cvttps2dq %xmm0, %xmm03885; SSE-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3886; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]3887; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3888; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload3889; SSE-NEXT:    psrlq $48, %xmm03890; SSE-NEXT:    callq __extendhfsf2@PLT3891; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3892; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3893; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]3894; SSE-NEXT:    callq __extendhfsf2@PLT3895; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3896; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3897; SSE-NEXT:    cvttps2dq %xmm0, %xmm03898; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3899; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3900; SSE-NEXT:    callq __extendhfsf2@PLT3901; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3902; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload3903; SSE-NEXT:    psrld $16, %xmm03904; SSE-NEXT:    callq __extendhfsf2@PLT3905; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3906; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]3907; SSE-NEXT:    cvttps2dq %xmm1, %xmm03908; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3909; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]3910; SSE-NEXT:    packssdw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3911; SSE-NEXT:    addq $72, %rsp3912; SSE-NEXT:    retq3913;3914; AVX2-LABEL: stest_f16i16_mm:3915; AVX2:       # %bb.0: # %entry3916; AVX2-NEXT:    vcvtph2ps %xmm0, %ymm03917; AVX2-NEXT:    vcvttps2dq %ymm0, %ymm03918; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm13919; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm03920; AVX2-NEXT:    vzeroupper3921; AVX2-NEXT:    retq3922;3923; AVX512-LABEL: stest_f16i16_mm:3924; AVX512:       # %bb.0: # %entry3925; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm03926; AVX512-NEXT:    vcvttps2dq %ymm0, %ymm03927; AVX512-NEXT:    vpmovsdw %ymm0, %xmm03928; AVX512-NEXT:    vzeroupper3929; AVX512-NEXT:    retq3930entry:3931  %conv = fptosi <8 x half> %x to <8 x i32>3932  %spec.store.select = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %conv, <8 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>)3933  %spec.store.select7 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %spec.store.select, <8 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>)3934  %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>3935  ret <8 x i16> %conv63936}3937 3938define <8 x i16> @utest_f16i16_mm(<8 x half> %x) nounwind {3939; SSE-LABEL: utest_f16i16_mm:3940; SSE:       # %bb.0: # %entry3941; SSE-NEXT:    subq $72, %rsp3942; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill3943; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3944; SSE-NEXT:    callq __extendhfsf2@PLT3945; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3946; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3947; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]3948; SSE-NEXT:    callq __extendhfsf2@PLT3949; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3950; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3951; SSE-NEXT:    cvttps2dq %xmm0, %xmm13952; SSE-NEXT:    movdqa %xmm1, %xmm23953; SSE-NEXT:    psrad $31, %xmm23954; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03955; SSE-NEXT:    cvttps2dq %xmm0, %xmm03956; SSE-NEXT:    pand %xmm2, %xmm03957; SSE-NEXT:    por %xmm1, %xmm03958; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3959; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload3960; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero3961; SSE-NEXT:    callq __extendhfsf2@PLT3962; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3963; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3964; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]3965; SSE-NEXT:    callq __extendhfsf2@PLT3966; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3967; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3968; SSE-NEXT:    cvttps2dq %xmm0, %xmm13969; SSE-NEXT:    movdqa %xmm1, %xmm23970; SSE-NEXT:    psrad $31, %xmm23971; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03972; SSE-NEXT:    cvttps2dq %xmm0, %xmm03973; SSE-NEXT:    pand %xmm2, %xmm03974; SSE-NEXT:    por %xmm1, %xmm03975; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3976; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]3977; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3978; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload3979; SSE-NEXT:    psrlq $48, %xmm03980; SSE-NEXT:    callq __extendhfsf2@PLT3981; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3982; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3983; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]3984; SSE-NEXT:    callq __extendhfsf2@PLT3985; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3986; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3987; SSE-NEXT:    cvttps2dq %xmm0, %xmm13988; SSE-NEXT:    movdqa %xmm1, %xmm23989; SSE-NEXT:    psrad $31, %xmm23990; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03991; SSE-NEXT:    cvttps2dq %xmm0, %xmm03992; SSE-NEXT:    pand %xmm2, %xmm03993; SSE-NEXT:    por %xmm1, %xmm03994; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3995; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload3996; SSE-NEXT:    callq __extendhfsf2@PLT3997; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3998; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload3999; SSE-NEXT:    psrld $16, %xmm04000; SSE-NEXT:    callq __extendhfsf2@PLT4001; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload4002; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]4003; SSE-NEXT:    cvttps2dq %xmm2, %xmm04004; SSE-NEXT:    movdqa %xmm0, %xmm14005; SSE-NEXT:    psrad $31, %xmm14006; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm24007; SSE-NEXT:    cvttps2dq %xmm2, %xmm24008; SSE-NEXT:    pand %xmm1, %xmm24009; SSE-NEXT:    por %xmm0, %xmm24010; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload4011; SSE-NEXT:    # xmm2 = xmm2[0],mem[0]4012; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]4013; SSE-NEXT:    movdqa %xmm2, %xmm34014; SSE-NEXT:    pxor %xmm1, %xmm34015; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2147549183,2147549183,2147549183,2147549183]4016; SSE-NEXT:    movdqa %xmm4, %xmm04017; SSE-NEXT:    pcmpgtd %xmm3, %xmm04018; SSE-NEXT:    pand %xmm0, %xmm24019; SSE-NEXT:    pcmpeqd %xmm3, %xmm34020; SSE-NEXT:    pxor %xmm3, %xmm04021; SSE-NEXT:    por %xmm2, %xmm04022; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload4023; SSE-NEXT:    pxor %xmm2, %xmm14024; SSE-NEXT:    pcmpgtd %xmm1, %xmm44025; SSE-NEXT:    pand %xmm4, %xmm24026; SSE-NEXT:    pxor %xmm3, %xmm44027; SSE-NEXT:    por %xmm2, %xmm44028; SSE-NEXT:    pslld $16, %xmm44029; SSE-NEXT:    psrad $16, %xmm44030; SSE-NEXT:    pslld $16, %xmm04031; SSE-NEXT:    psrad $16, %xmm04032; SSE-NEXT:    packssdw %xmm4, %xmm04033; SSE-NEXT:    addq $72, %rsp4034; SSE-NEXT:    retq4035;4036; AVX2-LABEL: utest_f16i16_mm:4037; AVX2:       # %bb.0: # %entry4038; AVX2-NEXT:    vcvtph2ps %xmm0, %ymm04039; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm1 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]4040; AVX2-NEXT:    vsubps %ymm1, %ymm0, %ymm14041; AVX2-NEXT:    vcvttps2dq %ymm1, %ymm14042; AVX2-NEXT:    vcvttps2dq %ymm0, %ymm04043; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm24044; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm14045; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm04046; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [65535,65535,65535,65535,65535,65535,65535,65535]4047; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm04048; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm14049; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm04050; AVX2-NEXT:    vzeroupper4051; AVX2-NEXT:    retq4052;4053; AVX512-LABEL: utest_f16i16_mm:4054; AVX512:       # %bb.0: # %entry4055; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm04056; AVX512-NEXT:    vcvttps2udq %ymm0, %ymm04057; AVX512-NEXT:    vpmovusdw %ymm0, %xmm04058; AVX512-NEXT:    vzeroupper4059; AVX512-NEXT:    retq4060entry:4061  %conv = fptoui <8 x half> %x to <8 x i32>4062  %spec.store.select = call <8 x i32> @llvm.umin.v8i32(<8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>)4063  %conv6 = trunc <8 x i32> %spec.store.select to <8 x i16>4064  ret <8 x i16> %conv64065}4066 4067define <8 x i16> @ustest_f16i16_mm(<8 x half> %x) nounwind {4068; SSE-LABEL: ustest_f16i16_mm:4069; SSE:       # %bb.0: # %entry4070; SSE-NEXT:    subq $72, %rsp4071; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill4072; SSE-NEXT:    psrlq $48, %xmm04073; SSE-NEXT:    callq __extendhfsf2@PLT4074; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4075; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4076; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]4077; SSE-NEXT:    callq __extendhfsf2@PLT4078; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4079; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4080; SSE-NEXT:    cvttps2dq %xmm0, %xmm04081; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4082; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4083; SSE-NEXT:    callq __extendhfsf2@PLT4084; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4085; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload4086; SSE-NEXT:    psrld $16, %xmm04087; SSE-NEXT:    callq __extendhfsf2@PLT4088; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4089; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]4090; SSE-NEXT:    cvttps2dq %xmm1, %xmm04091; SSE-NEXT:    unpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4092; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]4093; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4094; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload4095; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero4096; SSE-NEXT:    callq __extendhfsf2@PLT4097; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4098; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4099; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]4100; SSE-NEXT:    callq __extendhfsf2@PLT4101; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4102; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4103; SSE-NEXT:    cvttps2dq %xmm0, %xmm04104; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4105; SSE-NEXT:    movdqa (%rsp), %xmm0 # 16-byte Reload4106; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero4107; SSE-NEXT:    callq __extendhfsf2@PLT4108; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4109; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4110; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]4111; SSE-NEXT:    callq __extendhfsf2@PLT4112; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4113; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4114; SSE-NEXT:    cvttps2dq %xmm0, %xmm04115; SSE-NEXT:    punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4116; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]4117; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,65535]4118; SSE-NEXT:    movdqa %xmm1, %xmm24119; SSE-NEXT:    pcmpgtd %xmm0, %xmm24120; SSE-NEXT:    pand %xmm2, %xmm04121; SSE-NEXT:    pandn %xmm1, %xmm24122; SSE-NEXT:    por %xmm0, %xmm24123; SSE-NEXT:    movdqa %xmm1, %xmm34124; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4125; SSE-NEXT:    pcmpgtd %xmm0, %xmm34126; SSE-NEXT:    pand %xmm3, %xmm04127; SSE-NEXT:    pandn %xmm1, %xmm34128; SSE-NEXT:    por %xmm0, %xmm34129; SSE-NEXT:    pxor %xmm1, %xmm14130; SSE-NEXT:    movdqa %xmm3, %xmm04131; SSE-NEXT:    pcmpgtd %xmm1, %xmm04132; SSE-NEXT:    pand %xmm3, %xmm04133; SSE-NEXT:    movdqa %xmm2, %xmm34134; SSE-NEXT:    pcmpgtd %xmm1, %xmm34135; SSE-NEXT:    pand %xmm2, %xmm34136; SSE-NEXT:    pslld $16, %xmm34137; SSE-NEXT:    psrad $16, %xmm34138; SSE-NEXT:    pslld $16, %xmm04139; SSE-NEXT:    psrad $16, %xmm04140; SSE-NEXT:    packssdw %xmm3, %xmm04141; SSE-NEXT:    addq $72, %rsp4142; SSE-NEXT:    retq4143;4144; AVX2-LABEL: ustest_f16i16_mm:4145; AVX2:       # %bb.0: # %entry4146; AVX2-NEXT:    vcvtph2ps %xmm0, %ymm04147; AVX2-NEXT:    vcvttps2dq %ymm0, %ymm04148; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm14149; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm04150; AVX2-NEXT:    vzeroupper4151; AVX2-NEXT:    retq4152;4153; AVX512-LABEL: ustest_f16i16_mm:4154; AVX512:       # %bb.0: # %entry4155; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm04156; AVX512-NEXT:    vcvttps2dq %ymm0, %ymm04157; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm14158; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm04159; AVX512-NEXT:    vpmovusdw %ymm0, %xmm04160; AVX512-NEXT:    vzeroupper4161; AVX512-NEXT:    retq4162entry:4163  %conv = fptosi <8 x half> %x to <8 x i32>4164  %spec.store.select = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %conv, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>)4165  %spec.store.select7 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %spec.store.select, <8 x i32> zeroinitializer)4166  %conv6 = trunc <8 x i32> %spec.store.select7 to <8 x i16>4167  ret <8 x i16> %conv64168}4169 4170; i64 saturate4171 4172define <2 x i64> @stest_f64i64_mm(<2 x double> %x) nounwind {4173; SSE-LABEL: stest_f64i64_mm:4174; SSE:       # %bb.0: # %entry4175; SSE-NEXT:    pushq %r144176; SSE-NEXT:    pushq %rbx4177; SSE-NEXT:    subq $24, %rsp4178; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill4179; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]4180; SSE-NEXT:    callq __fixdfti@PLT4181; SSE-NEXT:    movq %rax, %rbx4182; SSE-NEXT:    movq %rdx, %r144183; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4184; SSE-NEXT:    callq __fixdfti@PLT4185; SSE-NEXT:    xorl %ecx, %ecx4186; SSE-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4187; SSE-NEXT:    cmpq %rsi, %rax4188; SSE-NEXT:    movq %rdx, %rdi4189; SSE-NEXT:    sbbq $0, %rdi4190; SSE-NEXT:    cmovgeq %rcx, %rdx4191; SSE-NEXT:    cmovgeq %rsi, %rax4192; SSE-NEXT:    cmpq %rsi, %rbx4193; SSE-NEXT:    movq %r14, %rdi4194; SSE-NEXT:    sbbq $0, %rdi4195; SSE-NEXT:    cmovlq %r14, %rcx4196; SSE-NEXT:    cmovlq %rbx, %rsi4197; SSE-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000004198; SSE-NEXT:    cmpq %rsi, %rdi4199; SSE-NEXT:    movq $-1, %r84200; SSE-NEXT:    movq $-1, %r94201; SSE-NEXT:    sbbq %rcx, %r94202; SSE-NEXT:    cmovgeq %rdi, %rsi4203; SSE-NEXT:    cmpq %rax, %rdi4204; SSE-NEXT:    sbbq %rdx, %r84205; SSE-NEXT:    cmovgeq %rdi, %rax4206; SSE-NEXT:    movq %rax, %xmm04207; SSE-NEXT:    movq %rsi, %xmm14208; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4209; SSE-NEXT:    addq $24, %rsp4210; SSE-NEXT:    popq %rbx4211; SSE-NEXT:    popq %r144212; SSE-NEXT:    retq4213;4214; AVX2-LABEL: stest_f64i64_mm:4215; AVX2:       # %bb.0: # %entry4216; AVX2-NEXT:    pushq %r144217; AVX2-NEXT:    pushq %rbx4218; AVX2-NEXT:    subq $24, %rsp4219; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill4220; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]4221; AVX2-NEXT:    callq __fixdfti@PLT4222; AVX2-NEXT:    movq %rax, %rbx4223; AVX2-NEXT:    movq %rdx, %r144224; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4225; AVX2-NEXT:    callq __fixdfti@PLT4226; AVX2-NEXT:    xorl %ecx, %ecx4227; AVX2-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4228; AVX2-NEXT:    cmpq %rsi, %rax4229; AVX2-NEXT:    movq %rdx, %rdi4230; AVX2-NEXT:    sbbq $0, %rdi4231; AVX2-NEXT:    cmovgeq %rcx, %rdx4232; AVX2-NEXT:    cmovgeq %rsi, %rax4233; AVX2-NEXT:    cmpq %rsi, %rbx4234; AVX2-NEXT:    movq %r14, %rdi4235; AVX2-NEXT:    sbbq $0, %rdi4236; AVX2-NEXT:    cmovlq %r14, %rcx4237; AVX2-NEXT:    cmovlq %rbx, %rsi4238; AVX2-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000004239; AVX2-NEXT:    cmpq %rsi, %rdi4240; AVX2-NEXT:    movq $-1, %r84241; AVX2-NEXT:    sbbq %rcx, %r84242; AVX2-NEXT:    movq $-1, %rcx4243; AVX2-NEXT:    cmovgeq %rdi, %rsi4244; AVX2-NEXT:    cmpq %rax, %rdi4245; AVX2-NEXT:    sbbq %rdx, %rcx4246; AVX2-NEXT:    cmovgeq %rdi, %rax4247; AVX2-NEXT:    vmovq %rax, %xmm04248; AVX2-NEXT:    vmovq %rsi, %xmm14249; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4250; AVX2-NEXT:    addq $24, %rsp4251; AVX2-NEXT:    popq %rbx4252; AVX2-NEXT:    popq %r144253; AVX2-NEXT:    retq4254;4255; AVX512-LABEL: stest_f64i64_mm:4256; AVX512:       # %bb.0: # %entry4257; AVX512-NEXT:    pushq %r144258; AVX512-NEXT:    pushq %rbx4259; AVX512-NEXT:    subq $24, %rsp4260; AVX512-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill4261; AVX512-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]4262; AVX512-NEXT:    callq __fixdfti@PLT4263; AVX512-NEXT:    movq %rax, %rbx4264; AVX512-NEXT:    movq %rdx, %r144265; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4266; AVX512-NEXT:    callq __fixdfti@PLT4267; AVX512-NEXT:    xorl %ecx, %ecx4268; AVX512-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4269; AVX512-NEXT:    cmpq %rsi, %rax4270; AVX512-NEXT:    movq %rdx, %rdi4271; AVX512-NEXT:    sbbq $0, %rdi4272; AVX512-NEXT:    cmovgeq %rcx, %rdx4273; AVX512-NEXT:    cmovgeq %rsi, %rax4274; AVX512-NEXT:    cmpq %rsi, %rbx4275; AVX512-NEXT:    movq %r14, %rdi4276; AVX512-NEXT:    sbbq $0, %rdi4277; AVX512-NEXT:    cmovlq %r14, %rcx4278; AVX512-NEXT:    cmovlq %rbx, %rsi4279; AVX512-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000004280; AVX512-NEXT:    cmpq %rsi, %rdi4281; AVX512-NEXT:    movq $-1, %r84282; AVX512-NEXT:    movq $-1, %r94283; AVX512-NEXT:    sbbq %rcx, %r94284; AVX512-NEXT:    cmovgeq %rdi, %rsi4285; AVX512-NEXT:    cmpq %rax, %rdi4286; AVX512-NEXT:    sbbq %rdx, %r84287; AVX512-NEXT:    cmovgeq %rdi, %rax4288; AVX512-NEXT:    vmovq %rax, %xmm04289; AVX512-NEXT:    vmovq %rsi, %xmm14290; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4291; AVX512-NEXT:    addq $24, %rsp4292; AVX512-NEXT:    popq %rbx4293; AVX512-NEXT:    popq %r144294; AVX512-NEXT:    retq4295entry:4296  %conv = fptosi <2 x double> %x to <2 x i128>4297  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>)4298  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>)4299  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>4300  ret <2 x i64> %conv64301}4302 4303define <2 x i64> @utest_f64i64_mm(<2 x double> %x) nounwind {4304; SSE-LABEL: utest_f64i64_mm:4305; SSE:       # %bb.0: # %entry4306; SSE-NEXT:    pushq %r144307; SSE-NEXT:    pushq %rbx4308; SSE-NEXT:    subq $24, %rsp4309; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill4310; SSE-NEXT:    callq __fixunsdfti@PLT4311; SSE-NEXT:    movq %rax, %rbx4312; SSE-NEXT:    movq %rdx, %r144313; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4314; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]4315; SSE-NEXT:    callq __fixunsdfti@PLT4316; SSE-NEXT:    xorl %ecx, %ecx4317; SSE-NEXT:    testq %rdx, %rdx4318; SSE-NEXT:    cmovneq %rcx, %rax4319; SSE-NEXT:    testq %r14, %r144320; SSE-NEXT:    cmovneq %rcx, %rbx4321; SSE-NEXT:    movq %rbx, %xmm04322; SSE-NEXT:    movq %rax, %xmm14323; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4324; SSE-NEXT:    addq $24, %rsp4325; SSE-NEXT:    popq %rbx4326; SSE-NEXT:    popq %r144327; SSE-NEXT:    retq4328;4329; AVX-LABEL: utest_f64i64_mm:4330; AVX:       # %bb.0: # %entry4331; AVX-NEXT:    pushq %r144332; AVX-NEXT:    pushq %rbx4333; AVX-NEXT:    subq $24, %rsp4334; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4335; AVX-NEXT:    callq __fixunsdfti@PLT4336; AVX-NEXT:    movq %rax, %rbx4337; AVX-NEXT:    movq %rdx, %r144338; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4339; AVX-NEXT:    # xmm0 = mem[1,0]4340; AVX-NEXT:    callq __fixunsdfti@PLT4341; AVX-NEXT:    xorl %ecx, %ecx4342; AVX-NEXT:    testq %rdx, %rdx4343; AVX-NEXT:    cmovneq %rcx, %rax4344; AVX-NEXT:    testq %r14, %r144345; AVX-NEXT:    cmovneq %rcx, %rbx4346; AVX-NEXT:    vmovq %rbx, %xmm04347; AVX-NEXT:    vmovq %rax, %xmm14348; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4349; AVX-NEXT:    addq $24, %rsp4350; AVX-NEXT:    popq %rbx4351; AVX-NEXT:    popq %r144352; AVX-NEXT:    retq4353entry:4354  %conv = fptoui <2 x double> %x to <2 x i128>4355  %spec.store.select = call <2 x i128> @llvm.umin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)4356  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>4357  ret <2 x i64> %conv64358}4359 4360define <2 x i64> @ustest_f64i64_mm(<2 x double> %x) nounwind {4361; SSE-LABEL: ustest_f64i64_mm:4362; SSE:       # %bb.0: # %entry4363; SSE-NEXT:    pushq %r144364; SSE-NEXT:    pushq %rbx4365; SSE-NEXT:    subq $24, %rsp4366; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill4367; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]4368; SSE-NEXT:    callq __fixdfti@PLT4369; SSE-NEXT:    movq %rax, %rbx4370; SSE-NEXT:    movq %rdx, %r144371; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4372; SSE-NEXT:    callq __fixdfti@PLT4373; SSE-NEXT:    xorl %ecx, %ecx4374; SSE-NEXT:    testq %rdx, %rdx4375; SSE-NEXT:    cmovgq %rcx, %rax4376; SSE-NEXT:    movl $1, %esi4377; SSE-NEXT:    cmovgq %rsi, %rdx4378; SSE-NEXT:    testq %r14, %r144379; SSE-NEXT:    cmovgq %rcx, %rbx4380; SSE-NEXT:    cmovleq %r14, %rsi4381; SSE-NEXT:    testq %rsi, %rsi4382; SSE-NEXT:    cmovsq %rcx, %rbx4383; SSE-NEXT:    testq %rdx, %rdx4384; SSE-NEXT:    cmovsq %rcx, %rax4385; SSE-NEXT:    movq %rax, %xmm04386; SSE-NEXT:    movq %rbx, %xmm14387; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4388; SSE-NEXT:    addq $24, %rsp4389; SSE-NEXT:    popq %rbx4390; SSE-NEXT:    popq %r144391; SSE-NEXT:    retq4392;4393; AVX-LABEL: ustest_f64i64_mm:4394; AVX:       # %bb.0: # %entry4395; AVX-NEXT:    pushq %r144396; AVX-NEXT:    pushq %rbx4397; AVX-NEXT:    subq $24, %rsp4398; AVX-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill4399; AVX-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]4400; AVX-NEXT:    callq __fixdfti@PLT4401; AVX-NEXT:    movq %rax, %rbx4402; AVX-NEXT:    movq %rdx, %r144403; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4404; AVX-NEXT:    callq __fixdfti@PLT4405; AVX-NEXT:    xorl %ecx, %ecx4406; AVX-NEXT:    testq %rdx, %rdx4407; AVX-NEXT:    cmovgq %rcx, %rax4408; AVX-NEXT:    movl $1, %esi4409; AVX-NEXT:    cmovgq %rsi, %rdx4410; AVX-NEXT:    testq %r14, %r144411; AVX-NEXT:    cmovgq %rcx, %rbx4412; AVX-NEXT:    cmovleq %r14, %rsi4413; AVX-NEXT:    testq %rsi, %rsi4414; AVX-NEXT:    cmovsq %rcx, %rbx4415; AVX-NEXT:    testq %rdx, %rdx4416; AVX-NEXT:    cmovsq %rcx, %rax4417; AVX-NEXT:    vmovq %rax, %xmm04418; AVX-NEXT:    vmovq %rbx, %xmm14419; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4420; AVX-NEXT:    addq $24, %rsp4421; AVX-NEXT:    popq %rbx4422; AVX-NEXT:    popq %r144423; AVX-NEXT:    retq4424entry:4425  %conv = fptosi <2 x double> %x to <2 x i128>4426  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)4427  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> zeroinitializer)4428  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>4429  ret <2 x i64> %conv64430}4431 4432define <2 x i64> @stest_f32i64_mm(<2 x float> %x) nounwind {4433; SSE-LABEL: stest_f32i64_mm:4434; SSE:       # %bb.0: # %entry4435; SSE-NEXT:    pushq %r144436; SSE-NEXT:    pushq %rbx4437; SSE-NEXT:    subq $24, %rsp4438; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill4439; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]4440; SSE-NEXT:    callq __fixsfti@PLT4441; SSE-NEXT:    movq %rax, %rbx4442; SSE-NEXT:    movq %rdx, %r144443; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4444; SSE-NEXT:    callq __fixsfti@PLT4445; SSE-NEXT:    xorl %ecx, %ecx4446; SSE-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4447; SSE-NEXT:    cmpq %rsi, %rax4448; SSE-NEXT:    movq %rdx, %rdi4449; SSE-NEXT:    sbbq $0, %rdi4450; SSE-NEXT:    cmovgeq %rcx, %rdx4451; SSE-NEXT:    cmovgeq %rsi, %rax4452; SSE-NEXT:    cmpq %rsi, %rbx4453; SSE-NEXT:    movq %r14, %rdi4454; SSE-NEXT:    sbbq $0, %rdi4455; SSE-NEXT:    cmovlq %r14, %rcx4456; SSE-NEXT:    cmovlq %rbx, %rsi4457; SSE-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000004458; SSE-NEXT:    cmpq %rsi, %rdi4459; SSE-NEXT:    movq $-1, %r84460; SSE-NEXT:    movq $-1, %r94461; SSE-NEXT:    sbbq %rcx, %r94462; SSE-NEXT:    cmovgeq %rdi, %rsi4463; SSE-NEXT:    cmpq %rax, %rdi4464; SSE-NEXT:    sbbq %rdx, %r84465; SSE-NEXT:    cmovgeq %rdi, %rax4466; SSE-NEXT:    movq %rax, %xmm04467; SSE-NEXT:    movq %rsi, %xmm14468; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4469; SSE-NEXT:    addq $24, %rsp4470; SSE-NEXT:    popq %rbx4471; SSE-NEXT:    popq %r144472; SSE-NEXT:    retq4473;4474; AVX2-LABEL: stest_f32i64_mm:4475; AVX2:       # %bb.0: # %entry4476; AVX2-NEXT:    pushq %r144477; AVX2-NEXT:    pushq %rbx4478; AVX2-NEXT:    subq $24, %rsp4479; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4480; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]4481; AVX2-NEXT:    callq __fixsfti@PLT4482; AVX2-NEXT:    movq %rax, %rbx4483; AVX2-NEXT:    movq %rdx, %r144484; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4485; AVX2-NEXT:    callq __fixsfti@PLT4486; AVX2-NEXT:    xorl %ecx, %ecx4487; AVX2-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4488; AVX2-NEXT:    cmpq %rsi, %rax4489; AVX2-NEXT:    movq %rdx, %rdi4490; AVX2-NEXT:    sbbq $0, %rdi4491; AVX2-NEXT:    cmovgeq %rcx, %rdx4492; AVX2-NEXT:    cmovgeq %rsi, %rax4493; AVX2-NEXT:    cmpq %rsi, %rbx4494; AVX2-NEXT:    movq %r14, %rdi4495; AVX2-NEXT:    sbbq $0, %rdi4496; AVX2-NEXT:    cmovlq %r14, %rcx4497; AVX2-NEXT:    cmovlq %rbx, %rsi4498; AVX2-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000004499; AVX2-NEXT:    cmpq %rsi, %rdi4500; AVX2-NEXT:    movq $-1, %r84501; AVX2-NEXT:    sbbq %rcx, %r84502; AVX2-NEXT:    movq $-1, %rcx4503; AVX2-NEXT:    cmovgeq %rdi, %rsi4504; AVX2-NEXT:    cmpq %rax, %rdi4505; AVX2-NEXT:    sbbq %rdx, %rcx4506; AVX2-NEXT:    cmovgeq %rdi, %rax4507; AVX2-NEXT:    vmovq %rax, %xmm04508; AVX2-NEXT:    vmovq %rsi, %xmm14509; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4510; AVX2-NEXT:    addq $24, %rsp4511; AVX2-NEXT:    popq %rbx4512; AVX2-NEXT:    popq %r144513; AVX2-NEXT:    retq4514;4515; AVX512-LABEL: stest_f32i64_mm:4516; AVX512:       # %bb.0: # %entry4517; AVX512-NEXT:    pushq %r144518; AVX512-NEXT:    pushq %rbx4519; AVX512-NEXT:    subq $24, %rsp4520; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4521; AVX512-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]4522; AVX512-NEXT:    callq __fixsfti@PLT4523; AVX512-NEXT:    movq %rax, %rbx4524; AVX512-NEXT:    movq %rdx, %r144525; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4526; AVX512-NEXT:    callq __fixsfti@PLT4527; AVX512-NEXT:    xorl %ecx, %ecx4528; AVX512-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4529; AVX512-NEXT:    cmpq %rsi, %rax4530; AVX512-NEXT:    movq %rdx, %rdi4531; AVX512-NEXT:    sbbq $0, %rdi4532; AVX512-NEXT:    cmovgeq %rcx, %rdx4533; AVX512-NEXT:    cmovgeq %rsi, %rax4534; AVX512-NEXT:    cmpq %rsi, %rbx4535; AVX512-NEXT:    movq %r14, %rdi4536; AVX512-NEXT:    sbbq $0, %rdi4537; AVX512-NEXT:    cmovlq %r14, %rcx4538; AVX512-NEXT:    cmovlq %rbx, %rsi4539; AVX512-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000004540; AVX512-NEXT:    cmpq %rsi, %rdi4541; AVX512-NEXT:    movq $-1, %r84542; AVX512-NEXT:    movq $-1, %r94543; AVX512-NEXT:    sbbq %rcx, %r94544; AVX512-NEXT:    cmovgeq %rdi, %rsi4545; AVX512-NEXT:    cmpq %rax, %rdi4546; AVX512-NEXT:    sbbq %rdx, %r84547; AVX512-NEXT:    cmovgeq %rdi, %rax4548; AVX512-NEXT:    vmovq %rax, %xmm04549; AVX512-NEXT:    vmovq %rsi, %xmm14550; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4551; AVX512-NEXT:    addq $24, %rsp4552; AVX512-NEXT:    popq %rbx4553; AVX512-NEXT:    popq %r144554; AVX512-NEXT:    retq4555entry:4556  %conv = fptosi <2 x float> %x to <2 x i128>4557  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>)4558  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>)4559  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>4560  ret <2 x i64> %conv64561}4562 4563define <2 x i64> @utest_f32i64_mm(<2 x float> %x) nounwind {4564; SSE-LABEL: utest_f32i64_mm:4565; SSE:       # %bb.0: # %entry4566; SSE-NEXT:    pushq %r144567; SSE-NEXT:    pushq %rbx4568; SSE-NEXT:    subq $24, %rsp4569; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill4570; SSE-NEXT:    callq __fixunssfti@PLT4571; SSE-NEXT:    movq %rax, %rbx4572; SSE-NEXT:    movq %rdx, %r144573; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4574; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]4575; SSE-NEXT:    callq __fixunssfti@PLT4576; SSE-NEXT:    xorl %ecx, %ecx4577; SSE-NEXT:    testq %rdx, %rdx4578; SSE-NEXT:    cmovneq %rcx, %rax4579; SSE-NEXT:    testq %r14, %r144580; SSE-NEXT:    cmovneq %rcx, %rbx4581; SSE-NEXT:    movq %rbx, %xmm04582; SSE-NEXT:    movq %rax, %xmm14583; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4584; SSE-NEXT:    addq $24, %rsp4585; SSE-NEXT:    popq %rbx4586; SSE-NEXT:    popq %r144587; SSE-NEXT:    retq4588;4589; AVX-LABEL: utest_f32i64_mm:4590; AVX:       # %bb.0: # %entry4591; AVX-NEXT:    pushq %r144592; AVX-NEXT:    pushq %rbx4593; AVX-NEXT:    subq $24, %rsp4594; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4595; AVX-NEXT:    callq __fixunssfti@PLT4596; AVX-NEXT:    movq %rax, %rbx4597; AVX-NEXT:    movq %rdx, %r144598; AVX-NEXT:    vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload4599; AVX-NEXT:    # xmm0 = mem[1,1,3,3]4600; AVX-NEXT:    callq __fixunssfti@PLT4601; AVX-NEXT:    xorl %ecx, %ecx4602; AVX-NEXT:    testq %rdx, %rdx4603; AVX-NEXT:    cmovneq %rcx, %rax4604; AVX-NEXT:    testq %r14, %r144605; AVX-NEXT:    cmovneq %rcx, %rbx4606; AVX-NEXT:    vmovq %rbx, %xmm04607; AVX-NEXT:    vmovq %rax, %xmm14608; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4609; AVX-NEXT:    addq $24, %rsp4610; AVX-NEXT:    popq %rbx4611; AVX-NEXT:    popq %r144612; AVX-NEXT:    retq4613entry:4614  %conv = fptoui <2 x float> %x to <2 x i128>4615  %spec.store.select = call <2 x i128> @llvm.umin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)4616  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>4617  ret <2 x i64> %conv64618}4619 4620define <2 x i64> @ustest_f32i64_mm(<2 x float> %x) nounwind {4621; SSE-LABEL: ustest_f32i64_mm:4622; SSE:       # %bb.0: # %entry4623; SSE-NEXT:    pushq %r144624; SSE-NEXT:    pushq %rbx4625; SSE-NEXT:    subq $24, %rsp4626; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill4627; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]4628; SSE-NEXT:    callq __fixsfti@PLT4629; SSE-NEXT:    movq %rax, %rbx4630; SSE-NEXT:    movq %rdx, %r144631; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4632; SSE-NEXT:    callq __fixsfti@PLT4633; SSE-NEXT:    xorl %ecx, %ecx4634; SSE-NEXT:    testq %rdx, %rdx4635; SSE-NEXT:    cmovgq %rcx, %rax4636; SSE-NEXT:    movl $1, %esi4637; SSE-NEXT:    cmovgq %rsi, %rdx4638; SSE-NEXT:    testq %r14, %r144639; SSE-NEXT:    cmovgq %rcx, %rbx4640; SSE-NEXT:    cmovleq %r14, %rsi4641; SSE-NEXT:    testq %rsi, %rsi4642; SSE-NEXT:    cmovsq %rcx, %rbx4643; SSE-NEXT:    testq %rdx, %rdx4644; SSE-NEXT:    cmovsq %rcx, %rax4645; SSE-NEXT:    movq %rax, %xmm04646; SSE-NEXT:    movq %rbx, %xmm14647; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4648; SSE-NEXT:    addq $24, %rsp4649; SSE-NEXT:    popq %rbx4650; SSE-NEXT:    popq %r144651; SSE-NEXT:    retq4652;4653; AVX-LABEL: ustest_f32i64_mm:4654; AVX:       # %bb.0: # %entry4655; AVX-NEXT:    pushq %r144656; AVX-NEXT:    pushq %rbx4657; AVX-NEXT:    subq $24, %rsp4658; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4659; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]4660; AVX-NEXT:    callq __fixsfti@PLT4661; AVX-NEXT:    movq %rax, %rbx4662; AVX-NEXT:    movq %rdx, %r144663; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4664; AVX-NEXT:    callq __fixsfti@PLT4665; AVX-NEXT:    xorl %ecx, %ecx4666; AVX-NEXT:    testq %rdx, %rdx4667; AVX-NEXT:    cmovgq %rcx, %rax4668; AVX-NEXT:    movl $1, %esi4669; AVX-NEXT:    cmovgq %rsi, %rdx4670; AVX-NEXT:    testq %r14, %r144671; AVX-NEXT:    cmovgq %rcx, %rbx4672; AVX-NEXT:    cmovleq %r14, %rsi4673; AVX-NEXT:    testq %rsi, %rsi4674; AVX-NEXT:    cmovsq %rcx, %rbx4675; AVX-NEXT:    testq %rdx, %rdx4676; AVX-NEXT:    cmovsq %rcx, %rax4677; AVX-NEXT:    vmovq %rax, %xmm04678; AVX-NEXT:    vmovq %rbx, %xmm14679; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4680; AVX-NEXT:    addq $24, %rsp4681; AVX-NEXT:    popq %rbx4682; AVX-NEXT:    popq %r144683; AVX-NEXT:    retq4684entry:4685  %conv = fptosi <2 x float> %x to <2 x i128>4686  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)4687  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> zeroinitializer)4688  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>4689  ret <2 x i64> %conv64690}4691 4692define <2 x i64> @stest_f16i64_mm(<2 x half> %x) nounwind {4693; SSE-LABEL: stest_f16i64_mm:4694; SSE:       # %bb.0: # %entry4695; SSE-NEXT:    pushq %r144696; SSE-NEXT:    pushq %rbx4697; SSE-NEXT:    subq $24, %rsp4698; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill4699; SSE-NEXT:    psrld $16, %xmm04700; SSE-NEXT:    callq __fixhfti@PLT4701; SSE-NEXT:    movq %rax, %rbx4702; SSE-NEXT:    movq %rdx, %r144703; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4704; SSE-NEXT:    callq __fixhfti@PLT4705; SSE-NEXT:    xorl %ecx, %ecx4706; SSE-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4707; SSE-NEXT:    cmpq %rsi, %rax4708; SSE-NEXT:    movq %rdx, %rdi4709; SSE-NEXT:    sbbq $0, %rdi4710; SSE-NEXT:    cmovgeq %rcx, %rdx4711; SSE-NEXT:    cmovgeq %rsi, %rax4712; SSE-NEXT:    cmpq %rsi, %rbx4713; SSE-NEXT:    movq %r14, %rdi4714; SSE-NEXT:    sbbq $0, %rdi4715; SSE-NEXT:    cmovlq %r14, %rcx4716; SSE-NEXT:    cmovlq %rbx, %rsi4717; SSE-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000004718; SSE-NEXT:    cmpq %rsi, %rdi4719; SSE-NEXT:    movq $-1, %r84720; SSE-NEXT:    movq $-1, %r94721; SSE-NEXT:    sbbq %rcx, %r94722; SSE-NEXT:    cmovgeq %rdi, %rsi4723; SSE-NEXT:    cmpq %rax, %rdi4724; SSE-NEXT:    sbbq %rdx, %r84725; SSE-NEXT:    cmovgeq %rdi, %rax4726; SSE-NEXT:    movq %rax, %xmm04727; SSE-NEXT:    movq %rsi, %xmm14728; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4729; SSE-NEXT:    addq $24, %rsp4730; SSE-NEXT:    popq %rbx4731; SSE-NEXT:    popq %r144732; SSE-NEXT:    retq4733;4734; AVX2-LABEL: stest_f16i64_mm:4735; AVX2:       # %bb.0: # %entry4736; AVX2-NEXT:    pushq %r144737; AVX2-NEXT:    pushq %rbx4738; AVX2-NEXT:    subq $24, %rsp4739; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4740; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm04741; AVX2-NEXT:    callq __fixhfti@PLT4742; AVX2-NEXT:    movq %rax, %rbx4743; AVX2-NEXT:    movq %rdx, %r144744; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4745; AVX2-NEXT:    callq __fixhfti@PLT4746; AVX2-NEXT:    xorl %ecx, %ecx4747; AVX2-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4748; AVX2-NEXT:    cmpq %rsi, %rax4749; AVX2-NEXT:    movq %rdx, %rdi4750; AVX2-NEXT:    sbbq $0, %rdi4751; AVX2-NEXT:    cmovgeq %rcx, %rdx4752; AVX2-NEXT:    cmovgeq %rsi, %rax4753; AVX2-NEXT:    cmpq %rsi, %rbx4754; AVX2-NEXT:    movq %r14, %rdi4755; AVX2-NEXT:    sbbq $0, %rdi4756; AVX2-NEXT:    cmovlq %r14, %rcx4757; AVX2-NEXT:    cmovlq %rbx, %rsi4758; AVX2-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000004759; AVX2-NEXT:    cmpq %rsi, %rdi4760; AVX2-NEXT:    movq $-1, %r84761; AVX2-NEXT:    sbbq %rcx, %r84762; AVX2-NEXT:    movq $-1, %rcx4763; AVX2-NEXT:    cmovgeq %rdi, %rsi4764; AVX2-NEXT:    cmpq %rax, %rdi4765; AVX2-NEXT:    sbbq %rdx, %rcx4766; AVX2-NEXT:    cmovgeq %rdi, %rax4767; AVX2-NEXT:    vmovq %rax, %xmm04768; AVX2-NEXT:    vmovq %rsi, %xmm14769; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4770; AVX2-NEXT:    addq $24, %rsp4771; AVX2-NEXT:    popq %rbx4772; AVX2-NEXT:    popq %r144773; AVX2-NEXT:    retq4774;4775; AVX512-LABEL: stest_f16i64_mm:4776; AVX512:       # %bb.0: # %entry4777; AVX512-NEXT:    pushq %r144778; AVX512-NEXT:    pushq %rbx4779; AVX512-NEXT:    subq $24, %rsp4780; AVX512-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4781; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm04782; AVX512-NEXT:    callq __fixhfti@PLT4783; AVX512-NEXT:    movq %rax, %rbx4784; AVX512-NEXT:    movq %rdx, %r144785; AVX512-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4786; AVX512-NEXT:    callq __fixhfti@PLT4787; AVX512-NEXT:    xorl %ecx, %ecx4788; AVX512-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF4789; AVX512-NEXT:    cmpq %rsi, %rax4790; AVX512-NEXT:    movq %rdx, %rdi4791; AVX512-NEXT:    sbbq $0, %rdi4792; AVX512-NEXT:    cmovgeq %rcx, %rdx4793; AVX512-NEXT:    cmovgeq %rsi, %rax4794; AVX512-NEXT:    cmpq %rsi, %rbx4795; AVX512-NEXT:    movq %r14, %rdi4796; AVX512-NEXT:    sbbq $0, %rdi4797; AVX512-NEXT:    cmovlq %r14, %rcx4798; AVX512-NEXT:    cmovlq %rbx, %rsi4799; AVX512-NEXT:    movabsq $-9223372036854775808, %rdi # imm = 0x80000000000000004800; AVX512-NEXT:    cmpq %rsi, %rdi4801; AVX512-NEXT:    movq $-1, %r84802; AVX512-NEXT:    movq $-1, %r94803; AVX512-NEXT:    sbbq %rcx, %r94804; AVX512-NEXT:    cmovgeq %rdi, %rsi4805; AVX512-NEXT:    cmpq %rax, %rdi4806; AVX512-NEXT:    sbbq %rdx, %r84807; AVX512-NEXT:    cmovgeq %rdi, %rax4808; AVX512-NEXT:    vmovq %rax, %xmm04809; AVX512-NEXT:    vmovq %rsi, %xmm14810; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4811; AVX512-NEXT:    addq $24, %rsp4812; AVX512-NEXT:    popq %rbx4813; AVX512-NEXT:    popq %r144814; AVX512-NEXT:    retq4815entry:4816  %conv = fptosi <2 x half> %x to <2 x i128>4817  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 9223372036854775807, i128 9223372036854775807>)4818  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> <i128 -9223372036854775808, i128 -9223372036854775808>)4819  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>4820  ret <2 x i64> %conv64821}4822 4823define <2 x i64> @utest_f16i64_mm(<2 x half> %x) nounwind {4824; SSE-LABEL: utest_f16i64_mm:4825; SSE:       # %bb.0: # %entry4826; SSE-NEXT:    pushq %r144827; SSE-NEXT:    pushq %rbx4828; SSE-NEXT:    subq $24, %rsp4829; SSE-NEXT:    movdqa %xmm0, %xmm14830; SSE-NEXT:    psrld $16, %xmm14831; SSE-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill4832; SSE-NEXT:    callq __fixunshfti@PLT4833; SSE-NEXT:    movq %rax, %rbx4834; SSE-NEXT:    movq %rdx, %r144835; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4836; SSE-NEXT:    callq __fixunshfti@PLT4837; SSE-NEXT:    xorl %ecx, %ecx4838; SSE-NEXT:    testq %rdx, %rdx4839; SSE-NEXT:    cmovneq %rcx, %rax4840; SSE-NEXT:    testq %r14, %r144841; SSE-NEXT:    cmovneq %rcx, %rbx4842; SSE-NEXT:    movq %rbx, %xmm04843; SSE-NEXT:    movq %rax, %xmm14844; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4845; SSE-NEXT:    addq $24, %rsp4846; SSE-NEXT:    popq %rbx4847; SSE-NEXT:    popq %r144848; SSE-NEXT:    retq4849;4850; AVX2-LABEL: utest_f16i64_mm:4851; AVX2:       # %bb.0: # %entry4852; AVX2-NEXT:    pushq %r144853; AVX2-NEXT:    pushq %rbx4854; AVX2-NEXT:    subq $24, %rsp4855; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4856; AVX2-NEXT:    callq __fixunshfti@PLT4857; AVX2-NEXT:    movq %rax, %rbx4858; AVX2-NEXT:    movq %rdx, %r144859; AVX2-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload4860; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm04861; AVX2-NEXT:    callq __fixunshfti@PLT4862; AVX2-NEXT:    xorl %ecx, %ecx4863; AVX2-NEXT:    testq %rdx, %rdx4864; AVX2-NEXT:    cmovneq %rcx, %rax4865; AVX2-NEXT:    testq %r14, %r144866; AVX2-NEXT:    cmovneq %rcx, %rbx4867; AVX2-NEXT:    vmovq %rbx, %xmm04868; AVX2-NEXT:    vmovq %rax, %xmm14869; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4870; AVX2-NEXT:    addq $24, %rsp4871; AVX2-NEXT:    popq %rbx4872; AVX2-NEXT:    popq %r144873; AVX2-NEXT:    retq4874;4875; AVX512-LABEL: utest_f16i64_mm:4876; AVX512:       # %bb.0: # %entry4877; AVX512-NEXT:    pushq %r144878; AVX512-NEXT:    pushq %rbx4879; AVX512-NEXT:    subq $24, %rsp4880; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4881; AVX512-NEXT:    callq __fixunshfti@PLT4882; AVX512-NEXT:    movq %rax, %rbx4883; AVX512-NEXT:    movq %rdx, %r144884; AVX512-NEXT:    vpsrld $16, (%rsp), %xmm0 # 16-byte Folded Reload4885; AVX512-NEXT:    callq __fixunshfti@PLT4886; AVX512-NEXT:    xorl %ecx, %ecx4887; AVX512-NEXT:    testq %rdx, %rdx4888; AVX512-NEXT:    cmovneq %rcx, %rax4889; AVX512-NEXT:    testq %r14, %r144890; AVX512-NEXT:    cmovneq %rcx, %rbx4891; AVX512-NEXT:    vmovq %rbx, %xmm04892; AVX512-NEXT:    vmovq %rax, %xmm14893; AVX512-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4894; AVX512-NEXT:    addq $24, %rsp4895; AVX512-NEXT:    popq %rbx4896; AVX512-NEXT:    popq %r144897; AVX512-NEXT:    retq4898entry:4899  %conv = fptoui <2 x half> %x to <2 x i128>4900  %spec.store.select = call <2 x i128> @llvm.umin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)4901  %conv6 = trunc <2 x i128> %spec.store.select to <2 x i64>4902  ret <2 x i64> %conv64903}4904 4905define <2 x i64> @ustest_f16i64_mm(<2 x half> %x) nounwind {4906; SSE-LABEL: ustest_f16i64_mm:4907; SSE:       # %bb.0: # %entry4908; SSE-NEXT:    pushq %r144909; SSE-NEXT:    pushq %rbx4910; SSE-NEXT:    subq $24, %rsp4911; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill4912; SSE-NEXT:    psrld $16, %xmm04913; SSE-NEXT:    callq __fixhfti@PLT4914; SSE-NEXT:    movq %rax, %rbx4915; SSE-NEXT:    movq %rdx, %r144916; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4917; SSE-NEXT:    callq __fixhfti@PLT4918; SSE-NEXT:    xorl %ecx, %ecx4919; SSE-NEXT:    testq %rdx, %rdx4920; SSE-NEXT:    cmovgq %rcx, %rax4921; SSE-NEXT:    movl $1, %esi4922; SSE-NEXT:    cmovgq %rsi, %rdx4923; SSE-NEXT:    testq %r14, %r144924; SSE-NEXT:    cmovgq %rcx, %rbx4925; SSE-NEXT:    cmovleq %r14, %rsi4926; SSE-NEXT:    testq %rsi, %rsi4927; SSE-NEXT:    cmovsq %rcx, %rbx4928; SSE-NEXT:    testq %rdx, %rdx4929; SSE-NEXT:    cmovsq %rcx, %rax4930; SSE-NEXT:    movq %rax, %xmm04931; SSE-NEXT:    movq %rbx, %xmm14932; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4933; SSE-NEXT:    addq $24, %rsp4934; SSE-NEXT:    popq %rbx4935; SSE-NEXT:    popq %r144936; SSE-NEXT:    retq4937;4938; AVX-LABEL: ustest_f16i64_mm:4939; AVX:       # %bb.0: # %entry4940; AVX-NEXT:    pushq %r144941; AVX-NEXT:    pushq %rbx4942; AVX-NEXT:    subq $24, %rsp4943; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4944; AVX-NEXT:    vpsrld $16, %xmm0, %xmm04945; AVX-NEXT:    callq __fixhfti@PLT4946; AVX-NEXT:    movq %rax, %rbx4947; AVX-NEXT:    movq %rdx, %r144948; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4949; AVX-NEXT:    callq __fixhfti@PLT4950; AVX-NEXT:    xorl %ecx, %ecx4951; AVX-NEXT:    testq %rdx, %rdx4952; AVX-NEXT:    cmovgq %rcx, %rax4953; AVX-NEXT:    movl $1, %esi4954; AVX-NEXT:    cmovgq %rsi, %rdx4955; AVX-NEXT:    testq %r14, %r144956; AVX-NEXT:    cmovgq %rcx, %rbx4957; AVX-NEXT:    cmovleq %r14, %rsi4958; AVX-NEXT:    testq %rsi, %rsi4959; AVX-NEXT:    cmovsq %rcx, %rbx4960; AVX-NEXT:    testq %rdx, %rdx4961; AVX-NEXT:    cmovsq %rcx, %rax4962; AVX-NEXT:    vmovq %rax, %xmm04963; AVX-NEXT:    vmovq %rbx, %xmm14964; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]4965; AVX-NEXT:    addq $24, %rsp4966; AVX-NEXT:    popq %rbx4967; AVX-NEXT:    popq %r144968; AVX-NEXT:    retq4969entry:4970  %conv = fptosi <2 x half> %x to <2 x i128>4971  %spec.store.select = call <2 x i128> @llvm.smin.v2i128(<2 x i128> %conv, <2 x i128> <i128 18446744073709551616, i128 18446744073709551616>)4972  %spec.store.select7 = call <2 x i128> @llvm.smax.v2i128(<2 x i128> %spec.store.select, <2 x i128> zeroinitializer)4973  %conv6 = trunc <2 x i128> %spec.store.select7 to <2 x i64>4974  ret <2 x i64> %conv64975}4976 4977; i32 non saturate4978 4979define <4 x i32> @ustest_f16i32_nsat(<4 x half> %x) nounwind {4980; SSE-LABEL: ustest_f16i32_nsat:4981; SSE:       # %bb.0: # %entry4982; SSE-NEXT:    subq $72, %rsp4983; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4984; SSE-NEXT:    movdqa %xmm0, %xmm14985; SSE-NEXT:    psrld $16, %xmm14986; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4987; SSE-NEXT:    movdqa %xmm0, %xmm14988; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]4989; SSE-NEXT:    movaps %xmm1, (%rsp) # 16-byte Spill4990; SSE-NEXT:    psrlq $48, %xmm04991; SSE-NEXT:    callq __extendhfsf2@PLT4992; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4993; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload4994; SSE-NEXT:    callq __extendhfsf2@PLT4995; SSE-NEXT:    unpcklps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4996; SSE-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4997; SSE-NEXT:    cvttps2dq %xmm0, %xmm04998; SSE-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill4999; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload5000; SSE-NEXT:    callq __extendhfsf2@PLT5001; SSE-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5002; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload5003; SSE-NEXT:    callq __extendhfsf2@PLT5004; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload5005; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]5006; SSE-NEXT:    cvttps2dq %xmm1, %xmm05007; SSE-NEXT:    punpcklqdq (%rsp), %xmm0 # 16-byte Folded Reload5008; SSE-NEXT:    # xmm0 = xmm0[0],mem[0]5009; SSE-NEXT:    pxor %xmm1, %xmm15010; SSE-NEXT:    pxor %xmm2, %xmm25011; SSE-NEXT:    pcmpgtd %xmm0, %xmm25012; SSE-NEXT:    pand %xmm0, %xmm25013; SSE-NEXT:    movdqa %xmm2, %xmm05014; SSE-NEXT:    pcmpgtd %xmm1, %xmm05015; SSE-NEXT:    pand %xmm2, %xmm05016; SSE-NEXT:    addq $72, %rsp5017; SSE-NEXT:    retq5018;5019; AVX-LABEL: ustest_f16i32_nsat:5020; AVX:       # %bb.0: # %entry5021; AVX-NEXT:    vcvtph2ps %xmm0, %xmm05022; AVX-NEXT:    vcvttps2dq %xmm0, %xmm05023; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm15024; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm05025; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm05026; AVX-NEXT:    retq5027entry:5028  %conv = fptosi <4 x half> %x to <4 x i32>5029  %spec.store.select = call <4 x i32> @llvm.smin.v4i32(<4 x i32> zeroinitializer, <4 x i32> %conv)5030  %spec.store.select7 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %spec.store.select, <4 x i32> zeroinitializer)5031  ret <4 x i32> %spec.store.select75032}5033 5034declare <2 x i32> @llvm.smin.v2i32(<2 x i32>, <2 x i32>)5035declare <2 x i32> @llvm.smax.v2i32(<2 x i32>, <2 x i32>)5036declare <2 x i32> @llvm.umin.v2i32(<2 x i32>, <2 x i32>)5037declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>)5038declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>)5039declare <4 x i32> @llvm.umin.v4i32(<4 x i32>, <4 x i32>)5040declare <8 x i32> @llvm.smin.v8i32(<8 x i32>, <8 x i32>)5041declare <8 x i32> @llvm.smax.v8i32(<8 x i32>, <8 x i32>)5042declare <8 x i32> @llvm.umin.v8i32(<8 x i32>, <8 x i32>)5043declare <2 x i64> @llvm.smin.v2i64(<2 x i64>, <2 x i64>)5044declare <2 x i64> @llvm.smax.v2i64(<2 x i64>, <2 x i64>)5045declare <2 x i64> @llvm.umin.v2i64(<2 x i64>, <2 x i64>)5046declare <4 x i64> @llvm.smin.v4i64(<4 x i64>, <4 x i64>)5047declare <4 x i64> @llvm.smax.v4i64(<4 x i64>, <4 x i64>)5048declare <4 x i64> @llvm.umin.v4i64(<4 x i64>, <4 x i64>)5049declare <2 x i128> @llvm.smin.v2i128(<2 x i128>, <2 x i128>)5050declare <2 x i128> @llvm.smax.v2i128(<2 x i128>, <2 x i128>)5051declare <2 x i128> @llvm.umin.v2i128(<2 x i128>, <2 x i128>)5052