brintos

brintos / llvm-project-archived public Read only

0
0
Text · 97.1 KiB · df2dc77 Raw
2839 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,VEX,AVX14; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,VEX,AVX25; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefixes=AVX,AVX512,AVX512DQ8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VLDQ9;10; 32-bit tests to make sure we're not doing anything stupid.11; RUN: llc < %s -mtriple=i686-unknown-unknown12; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse13; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse214 15;16; Double to Signed Integer17;18 19define <2 x i64> @fptosi_2f64_to_2i64(<2 x double> %a) {20; SSE-LABEL: fptosi_2f64_to_2i64:21; SSE:       # %bb.0:22; SSE-NEXT:    cvttsd2si %xmm0, %rax23; SSE-NEXT:    movq %rax, %xmm124; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]25; SSE-NEXT:    cvttsd2si %xmm0, %rax26; SSE-NEXT:    movq %rax, %xmm027; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]28; SSE-NEXT:    movdqa %xmm1, %xmm029; SSE-NEXT:    retq30;31; VEX-LABEL: fptosi_2f64_to_2i64:32; VEX:       # %bb.0:33; VEX-NEXT:    vcvttsd2si %xmm0, %rax34; VEX-NEXT:    vmovq %rax, %xmm135; VEX-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]36; VEX-NEXT:    vcvttsd2si %xmm0, %rax37; VEX-NEXT:    vmovq %rax, %xmm038; VEX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]39; VEX-NEXT:    retq40;41; AVX512F-LABEL: fptosi_2f64_to_2i64:42; AVX512F:       # %bb.0:43; AVX512F-NEXT:    vcvttsd2si %xmm0, %rax44; AVX512F-NEXT:    vmovq %rax, %xmm145; AVX512F-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]46; AVX512F-NEXT:    vcvttsd2si %xmm0, %rax47; AVX512F-NEXT:    vmovq %rax, %xmm048; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]49; AVX512F-NEXT:    retq50;51; AVX512VL-LABEL: fptosi_2f64_to_2i64:52; AVX512VL:       # %bb.0:53; AVX512VL-NEXT:    vcvttsd2si %xmm0, %rax54; AVX512VL-NEXT:    vmovq %rax, %xmm155; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]56; AVX512VL-NEXT:    vcvttsd2si %xmm0, %rax57; AVX512VL-NEXT:    vmovq %rax, %xmm058; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]59; AVX512VL-NEXT:    retq60;61; AVX512DQ-LABEL: fptosi_2f64_to_2i64:62; AVX512DQ:       # %bb.0:63; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm064; AVX512DQ-NEXT:    vcvttpd2qq %zmm0, %zmm065; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm066; AVX512DQ-NEXT:    vzeroupper67; AVX512DQ-NEXT:    retq68;69; AVX512VLDQ-LABEL: fptosi_2f64_to_2i64:70; AVX512VLDQ:       # %bb.0:71; AVX512VLDQ-NEXT:    vcvttpd2qq %xmm0, %xmm072; AVX512VLDQ-NEXT:    retq73  %cvt = fptosi <2 x double> %a to <2 x i64>74  ret <2 x i64> %cvt75}76 77define <4 x i32> @fptosi_2f64_to_4i32(<2 x double> %a) {78; SSE-LABEL: fptosi_2f64_to_4i32:79; SSE:       # %bb.0:80; SSE-NEXT:    cvttpd2dq %xmm0, %xmm081; SSE-NEXT:    retq82;83; AVX-LABEL: fptosi_2f64_to_4i32:84; AVX:       # %bb.0:85; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm086; AVX-NEXT:    retq87  %cvt = fptosi <2 x double> %a to <2 x i32>88  %ext = shufflevector <2 x i32> %cvt, <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>89  ret <4 x i32> %ext90}91 92define <2 x i32> @fptosi_2f64_to_2i32(<2 x double> %a) {93; SSE-LABEL: fptosi_2f64_to_2i32:94; SSE:       # %bb.0:95; SSE-NEXT:    cvttpd2dq %xmm0, %xmm096; SSE-NEXT:    retq97;98; AVX-LABEL: fptosi_2f64_to_2i32:99; AVX:       # %bb.0:100; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm0101; AVX-NEXT:    retq102  %cvt = fptosi <2 x double> %a to <2 x i32>103  ret <2 x i32> %cvt104}105 106define <4 x i32> @fptosi_4f64_to_2i32(<2 x double> %a) {107; SSE-LABEL: fptosi_4f64_to_2i32:108; SSE:       # %bb.0:109; SSE-NEXT:    cvttpd2dq %xmm0, %xmm0110; SSE-NEXT:    retq111;112; AVX-LABEL: fptosi_4f64_to_2i32:113; AVX:       # %bb.0:114; AVX-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0115; AVX-NEXT:    vcvttpd2dq %ymm0, %xmm0116; AVX-NEXT:    vzeroupper117; AVX-NEXT:    retq118  %ext = shufflevector <2 x double> %a, <2 x double> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>119  %cvt = fptosi <4 x double> %ext to <4 x i32>120  ret <4 x i32> %cvt121}122 123define <4 x i64> @fptosi_4f64_to_4i64(<4 x double> %a) {124; SSE-LABEL: fptosi_4f64_to_4i64:125; SSE:       # %bb.0:126; SSE-NEXT:    cvttsd2si %xmm0, %rax127; SSE-NEXT:    movq %rax, %xmm2128; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]129; SSE-NEXT:    cvttsd2si %xmm0, %rax130; SSE-NEXT:    movq %rax, %xmm0131; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]132; SSE-NEXT:    cvttsd2si %xmm1, %rax133; SSE-NEXT:    movq %rax, %xmm3134; SSE-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1,1]135; SSE-NEXT:    cvttsd2si %xmm1, %rax136; SSE-NEXT:    movq %rax, %xmm0137; SSE-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm0[0]138; SSE-NEXT:    movdqa %xmm2, %xmm0139; SSE-NEXT:    movdqa %xmm3, %xmm1140; SSE-NEXT:    retq141;142; AVX1-LABEL: fptosi_4f64_to_4i64:143; AVX1:       # %bb.0:144; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1145; AVX1-NEXT:    vcvttsd2si %xmm1, %rax146; AVX1-NEXT:    vmovq %rax, %xmm2147; AVX1-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1,0]148; AVX1-NEXT:    vcvttsd2si %xmm1, %rax149; AVX1-NEXT:    vmovq %rax, %xmm1150; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]151; AVX1-NEXT:    vcvttsd2si %xmm0, %rax152; AVX1-NEXT:    vmovq %rax, %xmm2153; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]154; AVX1-NEXT:    vcvttsd2si %xmm0, %rax155; AVX1-NEXT:    vmovq %rax, %xmm0156; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]157; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0158; AVX1-NEXT:    retq159;160; AVX2-LABEL: fptosi_4f64_to_4i64:161; AVX2:       # %bb.0:162; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1163; AVX2-NEXT:    vcvttsd2si %xmm1, %rax164; AVX2-NEXT:    vmovq %rax, %xmm2165; AVX2-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1,0]166; AVX2-NEXT:    vcvttsd2si %xmm1, %rax167; AVX2-NEXT:    vmovq %rax, %xmm1168; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]169; AVX2-NEXT:    vcvttsd2si %xmm0, %rax170; AVX2-NEXT:    vmovq %rax, %xmm2171; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]172; AVX2-NEXT:    vcvttsd2si %xmm0, %rax173; AVX2-NEXT:    vmovq %rax, %xmm0174; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]175; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0176; AVX2-NEXT:    retq177;178; AVX512F-LABEL: fptosi_4f64_to_4i64:179; AVX512F:       # %bb.0:180; AVX512F-NEXT:    vextractf128 $1, %ymm0, %xmm1181; AVX512F-NEXT:    vcvttsd2si %xmm1, %rax182; AVX512F-NEXT:    vmovq %rax, %xmm2183; AVX512F-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1,0]184; AVX512F-NEXT:    vcvttsd2si %xmm1, %rax185; AVX512F-NEXT:    vmovq %rax, %xmm1186; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]187; AVX512F-NEXT:    vcvttsd2si %xmm0, %rax188; AVX512F-NEXT:    vmovq %rax, %xmm2189; AVX512F-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]190; AVX512F-NEXT:    vcvttsd2si %xmm0, %rax191; AVX512F-NEXT:    vmovq %rax, %xmm0192; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]193; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0194; AVX512F-NEXT:    retq195;196; AVX512VL-LABEL: fptosi_4f64_to_4i64:197; AVX512VL:       # %bb.0:198; AVX512VL-NEXT:    vextractf128 $1, %ymm0, %xmm1199; AVX512VL-NEXT:    vcvttsd2si %xmm1, %rax200; AVX512VL-NEXT:    vmovq %rax, %xmm2201; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1,0]202; AVX512VL-NEXT:    vcvttsd2si %xmm1, %rax203; AVX512VL-NEXT:    vmovq %rax, %xmm1204; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]205; AVX512VL-NEXT:    vcvttsd2si %xmm0, %rax206; AVX512VL-NEXT:    vmovq %rax, %xmm2207; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]208; AVX512VL-NEXT:    vcvttsd2si %xmm0, %rax209; AVX512VL-NEXT:    vmovq %rax, %xmm0210; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]211; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0212; AVX512VL-NEXT:    retq213;214; AVX512DQ-LABEL: fptosi_4f64_to_4i64:215; AVX512DQ:       # %bb.0:216; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0217; AVX512DQ-NEXT:    vcvttpd2qq %zmm0, %zmm0218; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0219; AVX512DQ-NEXT:    retq220;221; AVX512VLDQ-LABEL: fptosi_4f64_to_4i64:222; AVX512VLDQ:       # %bb.0:223; AVX512VLDQ-NEXT:    vcvttpd2qq %ymm0, %ymm0224; AVX512VLDQ-NEXT:    retq225  %cvt = fptosi <4 x double> %a to <4 x i64>226  ret <4 x i64> %cvt227}228 229define <4 x i32> @fptosi_4f64_to_4i32(<4 x double> %a) {230; SSE-LABEL: fptosi_4f64_to_4i32:231; SSE:       # %bb.0:232; SSE-NEXT:    cvttpd2dq %xmm1, %xmm1233; SSE-NEXT:    cvttpd2dq %xmm0, %xmm0234; SSE-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]235; SSE-NEXT:    retq236;237; AVX-LABEL: fptosi_4f64_to_4i32:238; AVX:       # %bb.0:239; AVX-NEXT:    vcvttpd2dq %ymm0, %xmm0240; AVX-NEXT:    vzeroupper241; AVX-NEXT:    retq242  %cvt = fptosi <4 x double> %a to <4 x i32>243  ret <4 x i32> %cvt244}245 246;247; Double to Unsigned Integer248;249 250define <2 x i64> @fptoui_2f64_to_2i64(<2 x double> %a) {251; SSE-LABEL: fptoui_2f64_to_2i64:252; SSE:       # %bb.0:253; SSE-NEXT:    movsd {{.*#+}} xmm2 = [9.2233720368547758E+18,0.0E+0]254; SSE-NEXT:    movapd %xmm0, %xmm1255; SSE-NEXT:    subsd %xmm2, %xmm1256; SSE-NEXT:    cvttsd2si %xmm1, %rax257; SSE-NEXT:    cvttsd2si %xmm0, %rcx258; SSE-NEXT:    movq %rcx, %rdx259; SSE-NEXT:    sarq $63, %rdx260; SSE-NEXT:    andq %rax, %rdx261; SSE-NEXT:    orq %rcx, %rdx262; SSE-NEXT:    movq %rdx, %xmm1263; SSE-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1,1]264; SSE-NEXT:    cvttsd2si %xmm0, %rax265; SSE-NEXT:    subsd %xmm2, %xmm0266; SSE-NEXT:    cvttsd2si %xmm0, %rcx267; SSE-NEXT:    movq %rax, %rdx268; SSE-NEXT:    sarq $63, %rdx269; SSE-NEXT:    andq %rcx, %rdx270; SSE-NEXT:    orq %rax, %rdx271; SSE-NEXT:    movq %rdx, %xmm0272; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]273; SSE-NEXT:    movdqa %xmm1, %xmm0274; SSE-NEXT:    retq275;276; VEX-LABEL: fptoui_2f64_to_2i64:277; VEX:       # %bb.0:278; VEX-NEXT:    vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]279; VEX-NEXT:    vsubsd %xmm1, %xmm0, %xmm2280; VEX-NEXT:    vcvttsd2si %xmm2, %rax281; VEX-NEXT:    vcvttsd2si %xmm0, %rcx282; VEX-NEXT:    movq %rcx, %rdx283; VEX-NEXT:    sarq $63, %rdx284; VEX-NEXT:    andq %rax, %rdx285; VEX-NEXT:    orq %rcx, %rdx286; VEX-NEXT:    vmovq %rdx, %xmm2287; VEX-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]288; VEX-NEXT:    vsubsd %xmm1, %xmm0, %xmm1289; VEX-NEXT:    vcvttsd2si %xmm1, %rax290; VEX-NEXT:    vcvttsd2si %xmm0, %rcx291; VEX-NEXT:    movq %rcx, %rdx292; VEX-NEXT:    sarq $63, %rdx293; VEX-NEXT:    andq %rax, %rdx294; VEX-NEXT:    orq %rcx, %rdx295; VEX-NEXT:    vmovq %rdx, %xmm0296; VEX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]297; VEX-NEXT:    retq298;299; AVX512F-LABEL: fptoui_2f64_to_2i64:300; AVX512F:       # %bb.0:301; AVX512F-NEXT:    vcvttsd2usi %xmm0, %rax302; AVX512F-NEXT:    vmovq %rax, %xmm1303; AVX512F-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]304; AVX512F-NEXT:    vcvttsd2usi %xmm0, %rax305; AVX512F-NEXT:    vmovq %rax, %xmm0306; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]307; AVX512F-NEXT:    retq308;309; AVX512VL-LABEL: fptoui_2f64_to_2i64:310; AVX512VL:       # %bb.0:311; AVX512VL-NEXT:    vcvttsd2usi %xmm0, %rax312; AVX512VL-NEXT:    vmovq %rax, %xmm1313; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]314; AVX512VL-NEXT:    vcvttsd2usi %xmm0, %rax315; AVX512VL-NEXT:    vmovq %rax, %xmm0316; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]317; AVX512VL-NEXT:    retq318;319; AVX512DQ-LABEL: fptoui_2f64_to_2i64:320; AVX512DQ:       # %bb.0:321; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0322; AVX512DQ-NEXT:    vcvttpd2uqq %zmm0, %zmm0323; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0324; AVX512DQ-NEXT:    vzeroupper325; AVX512DQ-NEXT:    retq326;327; AVX512VLDQ-LABEL: fptoui_2f64_to_2i64:328; AVX512VLDQ:       # %bb.0:329; AVX512VLDQ-NEXT:    vcvttpd2uqq %xmm0, %xmm0330; AVX512VLDQ-NEXT:    retq331  %cvt = fptoui <2 x double> %a to <2 x i64>332  ret <2 x i64> %cvt333}334 335define <4 x i32> @fptoui_2f64_to_4i32(<2 x double> %a) {336; SSE-LABEL: fptoui_2f64_to_4i32:337; SSE:       # %bb.0:338; SSE-NEXT:    cvttpd2dq %xmm0, %xmm1339; SSE-NEXT:    movapd %xmm1, %xmm2340; SSE-NEXT:    psrad $31, %xmm2341; SSE-NEXT:    addpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0342; SSE-NEXT:    cvttpd2dq %xmm0, %xmm0343; SSE-NEXT:    andpd %xmm2, %xmm0344; SSE-NEXT:    orpd %xmm1, %xmm0345; SSE-NEXT:    retq346;347; VEX-LABEL: fptoui_2f64_to_4i32:348; VEX:       # %bb.0:349; VEX-NEXT:    vcvttpd2dq %xmm0, %xmm1350; VEX-NEXT:    vpsrad $31, %xmm1, %xmm2351; VEX-NEXT:    vaddpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0352; VEX-NEXT:    vcvttpd2dq %xmm0, %xmm0353; VEX-NEXT:    vandpd %xmm2, %xmm0, %xmm0354; VEX-NEXT:    vorpd %xmm0, %xmm1, %xmm0355; VEX-NEXT:    retq356;357; AVX512F-LABEL: fptoui_2f64_to_4i32:358; AVX512F:       # %bb.0:359; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0360; AVX512F-NEXT:    vcvttpd2udq %zmm0, %ymm0361; AVX512F-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero362; AVX512F-NEXT:    vzeroupper363; AVX512F-NEXT:    retq364;365; AVX512VL-LABEL: fptoui_2f64_to_4i32:366; AVX512VL:       # %bb.0:367; AVX512VL-NEXT:    vcvttpd2udq %xmm0, %xmm0368; AVX512VL-NEXT:    retq369;370; AVX512DQ-LABEL: fptoui_2f64_to_4i32:371; AVX512DQ:       # %bb.0:372; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0373; AVX512DQ-NEXT:    vcvttpd2udq %zmm0, %ymm0374; AVX512DQ-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero375; AVX512DQ-NEXT:    vzeroupper376; AVX512DQ-NEXT:    retq377;378; AVX512VLDQ-LABEL: fptoui_2f64_to_4i32:379; AVX512VLDQ:       # %bb.0:380; AVX512VLDQ-NEXT:    vcvttpd2udq %xmm0, %xmm0381; AVX512VLDQ-NEXT:    retq382  %cvt = fptoui <2 x double> %a to <2 x i32>383  %ext = shufflevector <2 x i32> %cvt, <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>384  ret <4 x i32> %ext385}386 387define <4 x i32> @fptoui_2f64_to_2i32(<2 x double> %a) {388; SSE-LABEL: fptoui_2f64_to_2i32:389; SSE:       # %bb.0:390; SSE-NEXT:    cvttpd2dq %xmm0, %xmm1391; SSE-NEXT:    movapd %xmm1, %xmm2392; SSE-NEXT:    psrad $31, %xmm2393; SSE-NEXT:    addpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0394; SSE-NEXT:    cvttpd2dq %xmm0, %xmm0395; SSE-NEXT:    andpd %xmm2, %xmm0396; SSE-NEXT:    orpd %xmm1, %xmm0397; SSE-NEXT:    retq398;399; VEX-LABEL: fptoui_2f64_to_2i32:400; VEX:       # %bb.0:401; VEX-NEXT:    vcvttpd2dq %xmm0, %xmm1402; VEX-NEXT:    vpsrad $31, %xmm1, %xmm2403; VEX-NEXT:    vaddpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0404; VEX-NEXT:    vcvttpd2dq %xmm0, %xmm0405; VEX-NEXT:    vandpd %xmm2, %xmm0, %xmm0406; VEX-NEXT:    vorpd %xmm0, %xmm1, %xmm0407; VEX-NEXT:    retq408;409; AVX512F-LABEL: fptoui_2f64_to_2i32:410; AVX512F:       # %bb.0:411; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0412; AVX512F-NEXT:    vcvttpd2udq %zmm0, %ymm0413; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0414; AVX512F-NEXT:    vzeroupper415; AVX512F-NEXT:    retq416;417; AVX512VL-LABEL: fptoui_2f64_to_2i32:418; AVX512VL:       # %bb.0:419; AVX512VL-NEXT:    vcvttpd2udq %xmm0, %xmm0420; AVX512VL-NEXT:    retq421;422; AVX512DQ-LABEL: fptoui_2f64_to_2i32:423; AVX512DQ:       # %bb.0:424; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0425; AVX512DQ-NEXT:    vcvttpd2udq %zmm0, %ymm0426; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0427; AVX512DQ-NEXT:    vzeroupper428; AVX512DQ-NEXT:    retq429;430; AVX512VLDQ-LABEL: fptoui_2f64_to_2i32:431; AVX512VLDQ:       # %bb.0:432; AVX512VLDQ-NEXT:    vcvttpd2udq %xmm0, %xmm0433; AVX512VLDQ-NEXT:    retq434  %cvt = fptoui <2 x double> %a to <2 x i32>435  %ext = shufflevector <2 x i32> %cvt, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>436  ret <4 x i32> %ext437}438 439define <4 x i32> @fptoui_4f64_to_2i32(<2 x double> %a) {440; SSE-LABEL: fptoui_4f64_to_2i32:441; SSE:       # %bb.0:442; SSE-NEXT:    cvttpd2dq %xmm0, %xmm1443; SSE-NEXT:    movapd %xmm1, %xmm2444; SSE-NEXT:    psrad $31, %xmm2445; SSE-NEXT:    addpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0446; SSE-NEXT:    cvttpd2dq %xmm0, %xmm0447; SSE-NEXT:    andpd %xmm2, %xmm0448; SSE-NEXT:    orpd %xmm1, %xmm0449; SSE-NEXT:    retq450;451; AVX1-LABEL: fptoui_4f64_to_2i32:452; AVX1:       # %bb.0:453; AVX1-NEXT:    vmovapd %xmm0, %xmm0454; AVX1-NEXT:    vcvttpd2dq %ymm0, %xmm1455; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm2456; AVX1-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0457; AVX1-NEXT:    vcvttpd2dq %ymm0, %xmm0458; AVX1-NEXT:    vandpd %xmm2, %xmm0, %xmm0459; AVX1-NEXT:    vorpd %xmm0, %xmm1, %xmm0460; AVX1-NEXT:    vzeroupper461; AVX1-NEXT:    retq462;463; AVX2-LABEL: fptoui_4f64_to_2i32:464; AVX2:       # %bb.0:465; AVX2-NEXT:    vmovapd %xmm0, %xmm0466; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [2.147483648E+9,2.147483648E+9,2.147483648E+9,2.147483648E+9]467; AVX2-NEXT:    vsubpd %ymm1, %ymm0, %ymm1468; AVX2-NEXT:    vcvttpd2dq %ymm1, %xmm1469; AVX2-NEXT:    vcvttpd2dq %ymm0, %xmm0470; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm2471; AVX2-NEXT:    vandpd %xmm2, %xmm1, %xmm1472; AVX2-NEXT:    vorpd %xmm1, %xmm0, %xmm0473; AVX2-NEXT:    vzeroupper474; AVX2-NEXT:    retq475;476; AVX512F-LABEL: fptoui_4f64_to_2i32:477; AVX512F:       # %bb.0:478; AVX512F-NEXT:    vmovaps %xmm0, %xmm0479; AVX512F-NEXT:    vcvttpd2udq %zmm0, %ymm0480; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0481; AVX512F-NEXT:    vzeroupper482; AVX512F-NEXT:    retq483;484; AVX512VL-LABEL: fptoui_4f64_to_2i32:485; AVX512VL:       # %bb.0:486; AVX512VL-NEXT:    vmovaps %xmm0, %xmm0487; AVX512VL-NEXT:    vcvttpd2udq %ymm0, %xmm0488; AVX512VL-NEXT:    vzeroupper489; AVX512VL-NEXT:    retq490;491; AVX512DQ-LABEL: fptoui_4f64_to_2i32:492; AVX512DQ:       # %bb.0:493; AVX512DQ-NEXT:    vmovaps %xmm0, %xmm0494; AVX512DQ-NEXT:    vcvttpd2udq %zmm0, %ymm0495; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0496; AVX512DQ-NEXT:    vzeroupper497; AVX512DQ-NEXT:    retq498;499; AVX512VLDQ-LABEL: fptoui_4f64_to_2i32:500; AVX512VLDQ:       # %bb.0:501; AVX512VLDQ-NEXT:    vmovaps %xmm0, %xmm0502; AVX512VLDQ-NEXT:    vcvttpd2udq %ymm0, %xmm0503; AVX512VLDQ-NEXT:    vzeroupper504; AVX512VLDQ-NEXT:    retq505  %ext = shufflevector <2 x double> %a, <2 x double> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>506  %cvt = fptoui <4 x double> %ext to <4 x i32>507  ret <4 x i32> %cvt508}509 510define <4 x i64> @fptoui_4f64_to_4i64(<4 x double> %a) {511; SSE-LABEL: fptoui_4f64_to_4i64:512; SSE:       # %bb.0:513; SSE-NEXT:    movapd %xmm0, %xmm2514; SSE-NEXT:    movsd {{.*#+}} xmm3 = [9.2233720368547758E+18,0.0E+0]515; SSE-NEXT:    subsd %xmm3, %xmm0516; SSE-NEXT:    cvttsd2si %xmm0, %rax517; SSE-NEXT:    cvttsd2si %xmm2, %rcx518; SSE-NEXT:    movq %rcx, %rdx519; SSE-NEXT:    sarq $63, %rdx520; SSE-NEXT:    andq %rax, %rdx521; SSE-NEXT:    orq %rcx, %rdx522; SSE-NEXT:    movq %rdx, %xmm0523; SSE-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1,1]524; SSE-NEXT:    cvttsd2si %xmm2, %rax525; SSE-NEXT:    subsd %xmm3, %xmm2526; SSE-NEXT:    cvttsd2si %xmm2, %rcx527; SSE-NEXT:    movq %rax, %rdx528; SSE-NEXT:    sarq $63, %rdx529; SSE-NEXT:    andq %rcx, %rdx530; SSE-NEXT:    orq %rax, %rdx531; SSE-NEXT:    movq %rdx, %xmm2532; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]533; SSE-NEXT:    movapd %xmm1, %xmm2534; SSE-NEXT:    subsd %xmm3, %xmm2535; SSE-NEXT:    cvttsd2si %xmm2, %rax536; SSE-NEXT:    cvttsd2si %xmm1, %rcx537; SSE-NEXT:    movq %rcx, %rdx538; SSE-NEXT:    sarq $63, %rdx539; SSE-NEXT:    andq %rax, %rdx540; SSE-NEXT:    orq %rcx, %rdx541; SSE-NEXT:    movq %rdx, %xmm2542; SSE-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1,1]543; SSE-NEXT:    cvttsd2si %xmm1, %rax544; SSE-NEXT:    subsd %xmm3, %xmm1545; SSE-NEXT:    cvttsd2si %xmm1, %rcx546; SSE-NEXT:    movq %rax, %rdx547; SSE-NEXT:    sarq $63, %rdx548; SSE-NEXT:    andq %rcx, %rdx549; SSE-NEXT:    orq %rax, %rdx550; SSE-NEXT:    movq %rdx, %xmm1551; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]552; SSE-NEXT:    movdqa %xmm2, %xmm1553; SSE-NEXT:    retq554;555; AVX1-LABEL: fptoui_4f64_to_4i64:556; AVX1:       # %bb.0:557; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2558; AVX1-NEXT:    vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]559; AVX1-NEXT:    vsubsd %xmm1, %xmm2, %xmm3560; AVX1-NEXT:    vcvttsd2si %xmm3, %rax561; AVX1-NEXT:    vcvttsd2si %xmm2, %rcx562; AVX1-NEXT:    movq %rcx, %rdx563; AVX1-NEXT:    sarq $63, %rdx564; AVX1-NEXT:    andq %rax, %rdx565; AVX1-NEXT:    orq %rcx, %rdx566; AVX1-NEXT:    vmovq %rdx, %xmm3567; AVX1-NEXT:    vshufpd {{.*#+}} xmm2 = xmm2[1,0]568; AVX1-NEXT:    vsubsd %xmm1, %xmm2, %xmm4569; AVX1-NEXT:    vcvttsd2si %xmm4, %rax570; AVX1-NEXT:    vcvttsd2si %xmm2, %rcx571; AVX1-NEXT:    movq %rcx, %rdx572; AVX1-NEXT:    sarq $63, %rdx573; AVX1-NEXT:    andq %rax, %rdx574; AVX1-NEXT:    orq %rcx, %rdx575; AVX1-NEXT:    vmovq %rdx, %xmm2576; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]577; AVX1-NEXT:    vsubsd %xmm1, %xmm0, %xmm3578; AVX1-NEXT:    vcvttsd2si %xmm3, %rax579; AVX1-NEXT:    vcvttsd2si %xmm0, %rcx580; AVX1-NEXT:    movq %rcx, %rdx581; AVX1-NEXT:    sarq $63, %rdx582; AVX1-NEXT:    andq %rax, %rdx583; AVX1-NEXT:    orq %rcx, %rdx584; AVX1-NEXT:    vmovq %rdx, %xmm3585; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]586; AVX1-NEXT:    vsubsd %xmm1, %xmm0, %xmm1587; AVX1-NEXT:    vcvttsd2si %xmm1, %rax588; AVX1-NEXT:    vcvttsd2si %xmm0, %rcx589; AVX1-NEXT:    movq %rcx, %rdx590; AVX1-NEXT:    sarq $63, %rdx591; AVX1-NEXT:    andq %rax, %rdx592; AVX1-NEXT:    orq %rcx, %rdx593; AVX1-NEXT:    vmovq %rdx, %xmm0594; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]595; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0596; AVX1-NEXT:    retq597;598; AVX2-LABEL: fptoui_4f64_to_4i64:599; AVX2:       # %bb.0:600; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm2601; AVX2-NEXT:    vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]602; AVX2-NEXT:    vsubsd %xmm1, %xmm2, %xmm3603; AVX2-NEXT:    vcvttsd2si %xmm3, %rax604; AVX2-NEXT:    vcvttsd2si %xmm2, %rcx605; AVX2-NEXT:    movq %rcx, %rdx606; AVX2-NEXT:    sarq $63, %rdx607; AVX2-NEXT:    andq %rax, %rdx608; AVX2-NEXT:    orq %rcx, %rdx609; AVX2-NEXT:    vmovq %rdx, %xmm3610; AVX2-NEXT:    vshufpd {{.*#+}} xmm2 = xmm2[1,0]611; AVX2-NEXT:    vsubsd %xmm1, %xmm2, %xmm4612; AVX2-NEXT:    vcvttsd2si %xmm4, %rax613; AVX2-NEXT:    vcvttsd2si %xmm2, %rcx614; AVX2-NEXT:    movq %rcx, %rdx615; AVX2-NEXT:    sarq $63, %rdx616; AVX2-NEXT:    andq %rax, %rdx617; AVX2-NEXT:    orq %rcx, %rdx618; AVX2-NEXT:    vmovq %rdx, %xmm2619; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]620; AVX2-NEXT:    vsubsd %xmm1, %xmm0, %xmm3621; AVX2-NEXT:    vcvttsd2si %xmm3, %rax622; AVX2-NEXT:    vcvttsd2si %xmm0, %rcx623; AVX2-NEXT:    movq %rcx, %rdx624; AVX2-NEXT:    sarq $63, %rdx625; AVX2-NEXT:    andq %rax, %rdx626; AVX2-NEXT:    orq %rcx, %rdx627; AVX2-NEXT:    vmovq %rdx, %xmm3628; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]629; AVX2-NEXT:    vsubsd %xmm1, %xmm0, %xmm1630; AVX2-NEXT:    vcvttsd2si %xmm1, %rax631; AVX2-NEXT:    vcvttsd2si %xmm0, %rcx632; AVX2-NEXT:    movq %rcx, %rdx633; AVX2-NEXT:    sarq $63, %rdx634; AVX2-NEXT:    andq %rax, %rdx635; AVX2-NEXT:    orq %rcx, %rdx636; AVX2-NEXT:    vmovq %rdx, %xmm0637; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]638; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0639; AVX2-NEXT:    retq640;641; AVX512F-LABEL: fptoui_4f64_to_4i64:642; AVX512F:       # %bb.0:643; AVX512F-NEXT:    vextractf128 $1, %ymm0, %xmm1644; AVX512F-NEXT:    vcvttsd2usi %xmm1, %rax645; AVX512F-NEXT:    vmovq %rax, %xmm2646; AVX512F-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1,0]647; AVX512F-NEXT:    vcvttsd2usi %xmm1, %rax648; AVX512F-NEXT:    vmovq %rax, %xmm1649; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]650; AVX512F-NEXT:    vcvttsd2usi %xmm0, %rax651; AVX512F-NEXT:    vmovq %rax, %xmm2652; AVX512F-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]653; AVX512F-NEXT:    vcvttsd2usi %xmm0, %rax654; AVX512F-NEXT:    vmovq %rax, %xmm0655; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]656; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0657; AVX512F-NEXT:    retq658;659; AVX512VL-LABEL: fptoui_4f64_to_4i64:660; AVX512VL:       # %bb.0:661; AVX512VL-NEXT:    vextractf128 $1, %ymm0, %xmm1662; AVX512VL-NEXT:    vcvttsd2usi %xmm1, %rax663; AVX512VL-NEXT:    vmovq %rax, %xmm2664; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1,0]665; AVX512VL-NEXT:    vcvttsd2usi %xmm1, %rax666; AVX512VL-NEXT:    vmovq %rax, %xmm1667; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]668; AVX512VL-NEXT:    vcvttsd2usi %xmm0, %rax669; AVX512VL-NEXT:    vmovq %rax, %xmm2670; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]671; AVX512VL-NEXT:    vcvttsd2usi %xmm0, %rax672; AVX512VL-NEXT:    vmovq %rax, %xmm0673; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]674; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0675; AVX512VL-NEXT:    retq676;677; AVX512DQ-LABEL: fptoui_4f64_to_4i64:678; AVX512DQ:       # %bb.0:679; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0680; AVX512DQ-NEXT:    vcvttpd2uqq %zmm0, %zmm0681; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0682; AVX512DQ-NEXT:    retq683;684; AVX512VLDQ-LABEL: fptoui_4f64_to_4i64:685; AVX512VLDQ:       # %bb.0:686; AVX512VLDQ-NEXT:    vcvttpd2uqq %ymm0, %ymm0687; AVX512VLDQ-NEXT:    retq688  %cvt = fptoui <4 x double> %a to <4 x i64>689  ret <4 x i64> %cvt690}691 692define <4 x i32> @fptoui_4f64_to_4i32(<4 x double> %a) {693; SSE-LABEL: fptoui_4f64_to_4i32:694; SSE:       # %bb.0:695; SSE-NEXT:    movapd {{.*#+}} xmm2 = [2.147483648E+9,2.147483648E+9]696; SSE-NEXT:    cvttpd2dq %xmm1, %xmm3697; SSE-NEXT:    subpd %xmm2, %xmm1698; SSE-NEXT:    cvttpd2dq %xmm1, %xmm1699; SSE-NEXT:    movapd %xmm3, %xmm4700; SSE-NEXT:    psrad $31, %xmm4701; SSE-NEXT:    pand %xmm1, %xmm4702; SSE-NEXT:    por %xmm3, %xmm4703; SSE-NEXT:    cvttpd2dq %xmm0, %xmm1704; SSE-NEXT:    subpd %xmm2, %xmm0705; SSE-NEXT:    cvttpd2dq %xmm0, %xmm2706; SSE-NEXT:    movapd %xmm1, %xmm0707; SSE-NEXT:    psrad $31, %xmm0708; SSE-NEXT:    pand %xmm2, %xmm0709; SSE-NEXT:    por %xmm1, %xmm0710; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm4[0]711; SSE-NEXT:    retq712;713; AVX1-LABEL: fptoui_4f64_to_4i32:714; AVX1:       # %bb.0:715; AVX1-NEXT:    vcvttpd2dq %ymm0, %xmm1716; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm2717; AVX1-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0718; AVX1-NEXT:    vcvttpd2dq %ymm0, %xmm0719; AVX1-NEXT:    vandpd %xmm2, %xmm0, %xmm0720; AVX1-NEXT:    vorpd %xmm0, %xmm1, %xmm0721; AVX1-NEXT:    vzeroupper722; AVX1-NEXT:    retq723;724; AVX2-LABEL: fptoui_4f64_to_4i32:725; AVX2:       # %bb.0:726; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [2.147483648E+9,2.147483648E+9,2.147483648E+9,2.147483648E+9]727; AVX2-NEXT:    vsubpd %ymm1, %ymm0, %ymm1728; AVX2-NEXT:    vcvttpd2dq %ymm1, %xmm1729; AVX2-NEXT:    vcvttpd2dq %ymm0, %xmm0730; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm2731; AVX2-NEXT:    vandpd %xmm2, %xmm1, %xmm1732; AVX2-NEXT:    vorpd %xmm1, %xmm0, %xmm0733; AVX2-NEXT:    vzeroupper734; AVX2-NEXT:    retq735;736; AVX512F-LABEL: fptoui_4f64_to_4i32:737; AVX512F:       # %bb.0:738; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0739; AVX512F-NEXT:    vcvttpd2udq %zmm0, %ymm0740; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0741; AVX512F-NEXT:    vzeroupper742; AVX512F-NEXT:    retq743;744; AVX512VL-LABEL: fptoui_4f64_to_4i32:745; AVX512VL:       # %bb.0:746; AVX512VL-NEXT:    vcvttpd2udq %ymm0, %xmm0747; AVX512VL-NEXT:    vzeroupper748; AVX512VL-NEXT:    retq749;750; AVX512DQ-LABEL: fptoui_4f64_to_4i32:751; AVX512DQ:       # %bb.0:752; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0753; AVX512DQ-NEXT:    vcvttpd2udq %zmm0, %ymm0754; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0755; AVX512DQ-NEXT:    vzeroupper756; AVX512DQ-NEXT:    retq757;758; AVX512VLDQ-LABEL: fptoui_4f64_to_4i32:759; AVX512VLDQ:       # %bb.0:760; AVX512VLDQ-NEXT:    vcvttpd2udq %ymm0, %xmm0761; AVX512VLDQ-NEXT:    vzeroupper762; AVX512VLDQ-NEXT:    retq763  %cvt = fptoui <4 x double> %a to <4 x i32>764  ret <4 x i32> %cvt765}766 767;768; Float to Signed Integer769;770 771define <2 x i32> @fptosi_2f32_to_2i32(<2 x float> %a) {772; SSE-LABEL: fptosi_2f32_to_2i32:773; SSE:       # %bb.0:774; SSE-NEXT:    cvttps2dq %xmm0, %xmm0775; SSE-NEXT:    retq776;777; AVX-LABEL: fptosi_2f32_to_2i32:778; AVX:       # %bb.0:779; AVX-NEXT:    vcvttps2dq %xmm0, %xmm0780; AVX-NEXT:    retq781  %cvt = fptosi <2 x float> %a to <2 x i32>782  ret <2 x i32> %cvt783}784 785define <4 x i32> @fptosi_4f32_to_4i32(<4 x float> %a) {786; SSE-LABEL: fptosi_4f32_to_4i32:787; SSE:       # %bb.0:788; SSE-NEXT:    cvttps2dq %xmm0, %xmm0789; SSE-NEXT:    retq790;791; AVX-LABEL: fptosi_4f32_to_4i32:792; AVX:       # %bb.0:793; AVX-NEXT:    vcvttps2dq %xmm0, %xmm0794; AVX-NEXT:    retq795  %cvt = fptosi <4 x float> %a to <4 x i32>796  ret <4 x i32> %cvt797}798 799define <2 x i64> @fptosi_2f32_to_2i64(<4 x float> %a) {800; SSE-LABEL: fptosi_2f32_to_2i64:801; SSE:       # %bb.0:802; SSE-NEXT:    cvttss2si %xmm0, %rax803; SSE-NEXT:    movq %rax, %xmm1804; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]805; SSE-NEXT:    cvttss2si %xmm0, %rax806; SSE-NEXT:    movq %rax, %xmm0807; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]808; SSE-NEXT:    movdqa %xmm1, %xmm0809; SSE-NEXT:    retq810;811; VEX-LABEL: fptosi_2f32_to_2i64:812; VEX:       # %bb.0:813; VEX-NEXT:    vcvttss2si %xmm0, %rax814; VEX-NEXT:    vmovq %rax, %xmm1815; VEX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]816; VEX-NEXT:    vcvttss2si %xmm0, %rax817; VEX-NEXT:    vmovq %rax, %xmm0818; VEX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]819; VEX-NEXT:    retq820;821; AVX512F-LABEL: fptosi_2f32_to_2i64:822; AVX512F:       # %bb.0:823; AVX512F-NEXT:    vcvttss2si %xmm0, %rax824; AVX512F-NEXT:    vmovq %rax, %xmm1825; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]826; AVX512F-NEXT:    vcvttss2si %xmm0, %rax827; AVX512F-NEXT:    vmovq %rax, %xmm0828; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]829; AVX512F-NEXT:    retq830;831; AVX512VL-LABEL: fptosi_2f32_to_2i64:832; AVX512VL:       # %bb.0:833; AVX512VL-NEXT:    vcvttss2si %xmm0, %rax834; AVX512VL-NEXT:    vmovq %rax, %xmm1835; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]836; AVX512VL-NEXT:    vcvttss2si %xmm0, %rax837; AVX512VL-NEXT:    vmovq %rax, %xmm0838; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]839; AVX512VL-NEXT:    retq840;841; AVX512DQ-LABEL: fptosi_2f32_to_2i64:842; AVX512DQ:       # %bb.0:843; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0844; AVX512DQ-NEXT:    vcvttps2qq %ymm0, %zmm0845; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0846; AVX512DQ-NEXT:    vzeroupper847; AVX512DQ-NEXT:    retq848;849; AVX512VLDQ-LABEL: fptosi_2f32_to_2i64:850; AVX512VLDQ:       # %bb.0:851; AVX512VLDQ-NEXT:    vcvttps2qq %xmm0, %xmm0852; AVX512VLDQ-NEXT:    retq853  %shuf = shufflevector <4 x float> %a, <4 x float> undef, <2 x i32> <i32 0, i32 1>854  %cvt = fptosi <2 x float> %shuf to <2 x i64>855  ret <2 x i64> %cvt856}857 858define <2 x i64> @fptosi_4f32_to_2i64(<4 x float> %a) {859; SSE-LABEL: fptosi_4f32_to_2i64:860; SSE:       # %bb.0:861; SSE-NEXT:    cvttss2si %xmm0, %rax862; SSE-NEXT:    movq %rax, %xmm1863; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]864; SSE-NEXT:    cvttss2si %xmm0, %rax865; SSE-NEXT:    movq %rax, %xmm0866; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]867; SSE-NEXT:    movdqa %xmm1, %xmm0868; SSE-NEXT:    retq869;870; VEX-LABEL: fptosi_4f32_to_2i64:871; VEX:       # %bb.0:872; VEX-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]873; VEX-NEXT:    vcvttss2si %xmm1, %rax874; VEX-NEXT:    vcvttss2si %xmm0, %rcx875; VEX-NEXT:    vmovq %rcx, %xmm0876; VEX-NEXT:    vmovq %rax, %xmm1877; VEX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]878; VEX-NEXT:    retq879;880; AVX512F-LABEL: fptosi_4f32_to_2i64:881; AVX512F:       # %bb.0:882; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]883; AVX512F-NEXT:    vcvttss2si %xmm1, %rax884; AVX512F-NEXT:    vcvttss2si %xmm0, %rcx885; AVX512F-NEXT:    vmovq %rcx, %xmm0886; AVX512F-NEXT:    vmovq %rax, %xmm1887; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]888; AVX512F-NEXT:    retq889;890; AVX512VL-LABEL: fptosi_4f32_to_2i64:891; AVX512VL:       # %bb.0:892; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]893; AVX512VL-NEXT:    vcvttss2si %xmm1, %rax894; AVX512VL-NEXT:    vcvttss2si %xmm0, %rcx895; AVX512VL-NEXT:    vmovq %rcx, %xmm0896; AVX512VL-NEXT:    vmovq %rax, %xmm1897; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]898; AVX512VL-NEXT:    retq899;900; AVX512DQ-LABEL: fptosi_4f32_to_2i64:901; AVX512DQ:       # %bb.0:902; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0903; AVX512DQ-NEXT:    vcvttps2qq %ymm0, %zmm0904; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0905; AVX512DQ-NEXT:    vzeroupper906; AVX512DQ-NEXT:    retq907;908; AVX512VLDQ-LABEL: fptosi_4f32_to_2i64:909; AVX512VLDQ:       # %bb.0:910; AVX512VLDQ-NEXT:    vcvttps2qq %xmm0, %ymm0911; AVX512VLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0912; AVX512VLDQ-NEXT:    vzeroupper913; AVX512VLDQ-NEXT:    retq914  %cvt = fptosi <4 x float> %a to <4 x i64>915  %shuf = shufflevector <4 x i64> %cvt, <4 x i64> undef, <2 x i32> <i32 0, i32 1>916  ret <2 x i64> %shuf917}918 919define <8 x i32> @fptosi_8f32_to_8i32(<8 x float> %a) {920; SSE-LABEL: fptosi_8f32_to_8i32:921; SSE:       # %bb.0:922; SSE-NEXT:    cvttps2dq %xmm0, %xmm0923; SSE-NEXT:    cvttps2dq %xmm1, %xmm1924; SSE-NEXT:    retq925;926; AVX-LABEL: fptosi_8f32_to_8i32:927; AVX:       # %bb.0:928; AVX-NEXT:    vcvttps2dq %ymm0, %ymm0929; AVX-NEXT:    retq930  %cvt = fptosi <8 x float> %a to <8 x i32>931  ret <8 x i32> %cvt932}933 934define <4 x i64> @fptosi_4f32_to_4i64(<8 x float> %a) {935; SSE-LABEL: fptosi_4f32_to_4i64:936; SSE:       # %bb.0:937; SSE-NEXT:    cvttss2si %xmm0, %rax938; SSE-NEXT:    movq %rax, %xmm2939; SSE-NEXT:    movaps %xmm0, %xmm1940; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]941; SSE-NEXT:    cvttss2si %xmm1, %rax942; SSE-NEXT:    movq %rax, %xmm1943; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]944; SSE-NEXT:    movaps %xmm0, %xmm1945; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]946; SSE-NEXT:    cvttss2si %xmm1, %rax947; SSE-NEXT:    movq %rax, %xmm3948; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]949; SSE-NEXT:    cvttss2si %xmm0, %rax950; SSE-NEXT:    movq %rax, %xmm1951; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]952; SSE-NEXT:    movdqa %xmm2, %xmm0953; SSE-NEXT:    retq954;955; AVX1-LABEL: fptosi_4f32_to_4i64:956; AVX1:       # %bb.0:957; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]958; AVX1-NEXT:    vcvttss2si %xmm1, %rax959; AVX1-NEXT:    vmovq %rax, %xmm1960; AVX1-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]961; AVX1-NEXT:    vcvttss2si %xmm2, %rax962; AVX1-NEXT:    vmovq %rax, %xmm2963; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]964; AVX1-NEXT:    vcvttss2si %xmm0, %rax965; AVX1-NEXT:    vmovq %rax, %xmm2966; AVX1-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]967; AVX1-NEXT:    vcvttss2si %xmm0, %rax968; AVX1-NEXT:    vmovq %rax, %xmm0969; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]970; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0971; AVX1-NEXT:    retq972;973; AVX2-LABEL: fptosi_4f32_to_4i64:974; AVX2:       # %bb.0:975; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]976; AVX2-NEXT:    vcvttss2si %xmm1, %rax977; AVX2-NEXT:    vmovq %rax, %xmm1978; AVX2-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]979; AVX2-NEXT:    vcvttss2si %xmm2, %rax980; AVX2-NEXT:    vmovq %rax, %xmm2981; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]982; AVX2-NEXT:    vcvttss2si %xmm0, %rax983; AVX2-NEXT:    vmovq %rax, %xmm2984; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]985; AVX2-NEXT:    vcvttss2si %xmm0, %rax986; AVX2-NEXT:    vmovq %rax, %xmm0987; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]988; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0989; AVX2-NEXT:    retq990;991; AVX512F-LABEL: fptosi_4f32_to_4i64:992; AVX512F:       # %bb.0:993; AVX512F-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]994; AVX512F-NEXT:    vcvttss2si %xmm1, %rax995; AVX512F-NEXT:    vmovq %rax, %xmm1996; AVX512F-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]997; AVX512F-NEXT:    vcvttss2si %xmm2, %rax998; AVX512F-NEXT:    vmovq %rax, %xmm2999; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]1000; AVX512F-NEXT:    vcvttss2si %xmm0, %rax1001; AVX512F-NEXT:    vmovq %rax, %xmm21002; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1003; AVX512F-NEXT:    vcvttss2si %xmm0, %rax1004; AVX512F-NEXT:    vmovq %rax, %xmm01005; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]1006; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01007; AVX512F-NEXT:    retq1008;1009; AVX512VL-LABEL: fptosi_4f32_to_4i64:1010; AVX512VL:       # %bb.0:1011; AVX512VL-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]1012; AVX512VL-NEXT:    vcvttss2si %xmm1, %rax1013; AVX512VL-NEXT:    vmovq %rax, %xmm11014; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]1015; AVX512VL-NEXT:    vcvttss2si %xmm2, %rax1016; AVX512VL-NEXT:    vmovq %rax, %xmm21017; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]1018; AVX512VL-NEXT:    vcvttss2si %xmm0, %rax1019; AVX512VL-NEXT:    vmovq %rax, %xmm21020; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1021; AVX512VL-NEXT:    vcvttss2si %xmm0, %rax1022; AVX512VL-NEXT:    vmovq %rax, %xmm01023; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]1024; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01025; AVX512VL-NEXT:    retq1026;1027; AVX512DQ-LABEL: fptosi_4f32_to_4i64:1028; AVX512DQ:       # %bb.0:1029; AVX512DQ-NEXT:    vcvttps2qq %ymm0, %zmm01030; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01031; AVX512DQ-NEXT:    retq1032;1033; AVX512VLDQ-LABEL: fptosi_4f32_to_4i64:1034; AVX512VLDQ:       # %bb.0:1035; AVX512VLDQ-NEXT:    vcvttps2qq %xmm0, %ymm01036; AVX512VLDQ-NEXT:    retq1037  %shuf = shufflevector <8 x float> %a, <8 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1038  %cvt = fptosi <4 x float> %shuf to <4 x i64>1039  ret <4 x i64> %cvt1040}1041 1042define <4 x i64> @fptosi_8f32_to_4i64(<8 x float> %a) {1043; SSE-LABEL: fptosi_8f32_to_4i64:1044; SSE:       # %bb.0:1045; SSE-NEXT:    cvttss2si %xmm0, %rax1046; SSE-NEXT:    movq %rax, %xmm21047; SSE-NEXT:    movaps %xmm0, %xmm11048; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]1049; SSE-NEXT:    cvttss2si %xmm1, %rax1050; SSE-NEXT:    movq %rax, %xmm11051; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]1052; SSE-NEXT:    movaps %xmm0, %xmm11053; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]1054; SSE-NEXT:    cvttss2si %xmm1, %rax1055; SSE-NEXT:    movq %rax, %xmm31056; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1057; SSE-NEXT:    cvttss2si %xmm0, %rax1058; SSE-NEXT:    movq %rax, %xmm11059; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]1060; SSE-NEXT:    movdqa %xmm2, %xmm01061; SSE-NEXT:    retq1062;1063; AVX1-LABEL: fptosi_8f32_to_4i64:1064; AVX1:       # %bb.0:1065; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]1066; AVX1-NEXT:    vcvttss2si %xmm1, %rax1067; AVX1-NEXT:    vmovq %rax, %xmm11068; AVX1-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]1069; AVX1-NEXT:    vcvttss2si %xmm2, %rax1070; AVX1-NEXT:    vmovq %rax, %xmm21071; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]1072; AVX1-NEXT:    vcvttss2si %xmm0, %rax1073; AVX1-NEXT:    vmovq %rax, %xmm21074; AVX1-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1075; AVX1-NEXT:    vcvttss2si %xmm0, %rax1076; AVX1-NEXT:    vmovq %rax, %xmm01077; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]1078; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01079; AVX1-NEXT:    retq1080;1081; AVX2-LABEL: fptosi_8f32_to_4i64:1082; AVX2:       # %bb.0:1083; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]1084; AVX2-NEXT:    vcvttss2si %xmm1, %rax1085; AVX2-NEXT:    vmovq %rax, %xmm11086; AVX2-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]1087; AVX2-NEXT:    vcvttss2si %xmm2, %rax1088; AVX2-NEXT:    vmovq %rax, %xmm21089; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]1090; AVX2-NEXT:    vcvttss2si %xmm0, %rax1091; AVX2-NEXT:    vmovq %rax, %xmm21092; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1093; AVX2-NEXT:    vcvttss2si %xmm0, %rax1094; AVX2-NEXT:    vmovq %rax, %xmm01095; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]1096; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01097; AVX2-NEXT:    retq1098;1099; AVX512F-LABEL: fptosi_8f32_to_4i64:1100; AVX512F:       # %bb.0:1101; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]1102; AVX512F-NEXT:    vcvttss2si %xmm1, %rax1103; AVX512F-NEXT:    vcvttss2si %xmm0, %rcx1104; AVX512F-NEXT:    vshufpd {{.*#+}} xmm1 = xmm0[1,0]1105; AVX512F-NEXT:    vcvttss2si %xmm1, %rdx1106; AVX512F-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1107; AVX512F-NEXT:    vcvttss2si %xmm0, %rsi1108; AVX512F-NEXT:    vmovq %rsi, %xmm01109; AVX512F-NEXT:    vmovq %rdx, %xmm11110; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]1111; AVX512F-NEXT:    vmovq %rcx, %xmm11112; AVX512F-NEXT:    vmovq %rax, %xmm21113; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]1114; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm01115; AVX512F-NEXT:    retq1116;1117; AVX512VL-LABEL: fptosi_8f32_to_4i64:1118; AVX512VL:       # %bb.0:1119; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]1120; AVX512VL-NEXT:    vcvttss2si %xmm1, %rax1121; AVX512VL-NEXT:    vcvttss2si %xmm0, %rcx1122; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm1 = xmm0[1,0]1123; AVX512VL-NEXT:    vcvttss2si %xmm1, %rdx1124; AVX512VL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1125; AVX512VL-NEXT:    vcvttss2si %xmm0, %rsi1126; AVX512VL-NEXT:    vmovq %rsi, %xmm01127; AVX512VL-NEXT:    vmovq %rdx, %xmm11128; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]1129; AVX512VL-NEXT:    vmovq %rcx, %xmm11130; AVX512VL-NEXT:    vmovq %rax, %xmm21131; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]1132; AVX512VL-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm01133; AVX512VL-NEXT:    retq1134;1135; AVX512DQ-LABEL: fptosi_8f32_to_4i64:1136; AVX512DQ:       # %bb.0:1137; AVX512DQ-NEXT:    vcvttps2qq %ymm0, %zmm01138; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01139; AVX512DQ-NEXT:    retq1140;1141; AVX512VLDQ-LABEL: fptosi_8f32_to_4i64:1142; AVX512VLDQ:       # %bb.0:1143; AVX512VLDQ-NEXT:    vcvttps2qq %ymm0, %zmm01144; AVX512VLDQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01145; AVX512VLDQ-NEXT:    retq1146  %cvt = fptosi <8 x float> %a to <8 x i64>1147  %shuf = shufflevector <8 x i64> %cvt, <8 x i64> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1148  ret <4 x i64> %shuf1149}1150 1151;1152; Float to Unsigned Integer1153;1154 1155define <2 x i32> @fptoui_2f32_to_2i32(<2 x float> %a) {1156; SSE-LABEL: fptoui_2f32_to_2i32:1157; SSE:       # %bb.0:1158; SSE-NEXT:    cvttps2dq %xmm0, %xmm11159; SSE-NEXT:    movdqa %xmm1, %xmm21160; SSE-NEXT:    psrad $31, %xmm21161; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01162; SSE-NEXT:    cvttps2dq %xmm0, %xmm01163; SSE-NEXT:    pand %xmm2, %xmm01164; SSE-NEXT:    por %xmm1, %xmm01165; SSE-NEXT:    retq1166;1167; AVX1-LABEL: fptoui_2f32_to_2i32:1168; AVX1:       # %bb.0:1169; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm11170; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm21171; AVX1-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01172; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm01173; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm01174; AVX1-NEXT:    vpor %xmm0, %xmm1, %xmm01175; AVX1-NEXT:    retq1176;1177; AVX2-LABEL: fptoui_2f32_to_2i32:1178; AVX2:       # %bb.0:1179; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm1 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]1180; AVX2-NEXT:    vsubps %xmm1, %xmm0, %xmm11181; AVX2-NEXT:    vcvttps2dq %xmm1, %xmm11182; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm01183; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm21184; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm11185; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01186; AVX2-NEXT:    retq1187;1188; AVX512F-LABEL: fptoui_2f32_to_2i32:1189; AVX512F:       # %bb.0:1190; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01191; AVX512F-NEXT:    vcvttps2udq %zmm0, %zmm01192; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01193; AVX512F-NEXT:    vzeroupper1194; AVX512F-NEXT:    retq1195;1196; AVX512VL-LABEL: fptoui_2f32_to_2i32:1197; AVX512VL:       # %bb.0:1198; AVX512VL-NEXT:    vcvttps2udq %xmm0, %xmm01199; AVX512VL-NEXT:    retq1200;1201; AVX512DQ-LABEL: fptoui_2f32_to_2i32:1202; AVX512DQ:       # %bb.0:1203; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01204; AVX512DQ-NEXT:    vcvttps2udq %zmm0, %zmm01205; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01206; AVX512DQ-NEXT:    vzeroupper1207; AVX512DQ-NEXT:    retq1208;1209; AVX512VLDQ-LABEL: fptoui_2f32_to_2i32:1210; AVX512VLDQ:       # %bb.0:1211; AVX512VLDQ-NEXT:    vcvttps2udq %xmm0, %xmm01212; AVX512VLDQ-NEXT:    retq1213  %cvt = fptoui <2 x float> %a to <2 x i32>1214  ret <2 x i32> %cvt1215}1216 1217define <4 x i32> @fptoui_4f32_to_4i32(<4 x float> %a) {1218; SSE-LABEL: fptoui_4f32_to_4i32:1219; SSE:       # %bb.0:1220; SSE-NEXT:    cvttps2dq %xmm0, %xmm11221; SSE-NEXT:    movdqa %xmm1, %xmm21222; SSE-NEXT:    psrad $31, %xmm21223; SSE-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01224; SSE-NEXT:    cvttps2dq %xmm0, %xmm01225; SSE-NEXT:    pand %xmm2, %xmm01226; SSE-NEXT:    por %xmm1, %xmm01227; SSE-NEXT:    retq1228;1229; AVX1-LABEL: fptoui_4f32_to_4i32:1230; AVX1:       # %bb.0:1231; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm11232; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm21233; AVX1-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01234; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm01235; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm01236; AVX1-NEXT:    vpor %xmm0, %xmm1, %xmm01237; AVX1-NEXT:    retq1238;1239; AVX2-LABEL: fptoui_4f32_to_4i32:1240; AVX2:       # %bb.0:1241; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm1 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]1242; AVX2-NEXT:    vsubps %xmm1, %xmm0, %xmm11243; AVX2-NEXT:    vcvttps2dq %xmm1, %xmm11244; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm01245; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm21246; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm11247; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01248; AVX2-NEXT:    retq1249;1250; AVX512F-LABEL: fptoui_4f32_to_4i32:1251; AVX512F:       # %bb.0:1252; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01253; AVX512F-NEXT:    vcvttps2udq %zmm0, %zmm01254; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01255; AVX512F-NEXT:    vzeroupper1256; AVX512F-NEXT:    retq1257;1258; AVX512VL-LABEL: fptoui_4f32_to_4i32:1259; AVX512VL:       # %bb.0:1260; AVX512VL-NEXT:    vcvttps2udq %xmm0, %xmm01261; AVX512VL-NEXT:    retq1262;1263; AVX512DQ-LABEL: fptoui_4f32_to_4i32:1264; AVX512DQ:       # %bb.0:1265; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01266; AVX512DQ-NEXT:    vcvttps2udq %zmm0, %zmm01267; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01268; AVX512DQ-NEXT:    vzeroupper1269; AVX512DQ-NEXT:    retq1270;1271; AVX512VLDQ-LABEL: fptoui_4f32_to_4i32:1272; AVX512VLDQ:       # %bb.0:1273; AVX512VLDQ-NEXT:    vcvttps2udq %xmm0, %xmm01274; AVX512VLDQ-NEXT:    retq1275  %cvt = fptoui <4 x float> %a to <4 x i32>1276  ret <4 x i32> %cvt1277}1278 1279define <2 x i64> @fptoui_2f32_to_2i64(<4 x float> %a) {1280; SSE-LABEL: fptoui_2f32_to_2i64:1281; SSE:       # %bb.0:1282; SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1283; SSE-NEXT:    movaps %xmm0, %xmm11284; SSE-NEXT:    subss %xmm2, %xmm11285; SSE-NEXT:    cvttss2si %xmm1, %rax1286; SSE-NEXT:    cvttss2si %xmm0, %rcx1287; SSE-NEXT:    movq %rcx, %rdx1288; SSE-NEXT:    sarq $63, %rdx1289; SSE-NEXT:    andq %rax, %rdx1290; SSE-NEXT:    orq %rcx, %rdx1291; SSE-NEXT:    movq %rdx, %xmm11292; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1293; SSE-NEXT:    cvttss2si %xmm0, %rax1294; SSE-NEXT:    subss %xmm2, %xmm01295; SSE-NEXT:    cvttss2si %xmm0, %rcx1296; SSE-NEXT:    movq %rax, %rdx1297; SSE-NEXT:    sarq $63, %rdx1298; SSE-NEXT:    andq %rcx, %rdx1299; SSE-NEXT:    orq %rax, %rdx1300; SSE-NEXT:    movq %rdx, %xmm01301; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]1302; SSE-NEXT:    movdqa %xmm1, %xmm01303; SSE-NEXT:    retq1304;1305; VEX-LABEL: fptoui_2f32_to_2i64:1306; VEX:       # %bb.0:1307; VEX-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1308; VEX-NEXT:    vsubss %xmm1, %xmm0, %xmm21309; VEX-NEXT:    vcvttss2si %xmm2, %rax1310; VEX-NEXT:    vcvttss2si %xmm0, %rcx1311; VEX-NEXT:    movq %rcx, %rdx1312; VEX-NEXT:    sarq $63, %rdx1313; VEX-NEXT:    andq %rax, %rdx1314; VEX-NEXT:    orq %rcx, %rdx1315; VEX-NEXT:    vmovq %rdx, %xmm21316; VEX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1317; VEX-NEXT:    vsubss %xmm1, %xmm0, %xmm11318; VEX-NEXT:    vcvttss2si %xmm1, %rax1319; VEX-NEXT:    vcvttss2si %xmm0, %rcx1320; VEX-NEXT:    movq %rcx, %rdx1321; VEX-NEXT:    sarq $63, %rdx1322; VEX-NEXT:    andq %rax, %rdx1323; VEX-NEXT:    orq %rcx, %rdx1324; VEX-NEXT:    vmovq %rdx, %xmm01325; VEX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]1326; VEX-NEXT:    retq1327;1328; AVX512F-LABEL: fptoui_2f32_to_2i64:1329; AVX512F:       # %bb.0:1330; AVX512F-NEXT:    vcvttss2usi %xmm0, %rax1331; AVX512F-NEXT:    vmovq %rax, %xmm11332; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1333; AVX512F-NEXT:    vcvttss2usi %xmm0, %rax1334; AVX512F-NEXT:    vmovq %rax, %xmm01335; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]1336; AVX512F-NEXT:    retq1337;1338; AVX512VL-LABEL: fptoui_2f32_to_2i64:1339; AVX512VL:       # %bb.0:1340; AVX512VL-NEXT:    vcvttss2usi %xmm0, %rax1341; AVX512VL-NEXT:    vmovq %rax, %xmm11342; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1343; AVX512VL-NEXT:    vcvttss2usi %xmm0, %rax1344; AVX512VL-NEXT:    vmovq %rax, %xmm01345; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]1346; AVX512VL-NEXT:    retq1347;1348; AVX512DQ-LABEL: fptoui_2f32_to_2i64:1349; AVX512DQ:       # %bb.0:1350; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01351; AVX512DQ-NEXT:    vcvttps2uqq %ymm0, %zmm01352; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01353; AVX512DQ-NEXT:    vzeroupper1354; AVX512DQ-NEXT:    retq1355;1356; AVX512VLDQ-LABEL: fptoui_2f32_to_2i64:1357; AVX512VLDQ:       # %bb.0:1358; AVX512VLDQ-NEXT:    vcvttps2uqq %xmm0, %xmm01359; AVX512VLDQ-NEXT:    retq1360  %shuf = shufflevector <4 x float> %a, <4 x float> undef, <2 x i32> <i32 0, i32 1>1361  %cvt = fptoui <2 x float> %shuf to <2 x i64>1362  ret <2 x i64> %cvt1363}1364 1365define <2 x i64> @fptoui_4f32_to_2i64(<4 x float> %a) {1366; SSE-LABEL: fptoui_4f32_to_2i64:1367; SSE:       # %bb.0:1368; SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1369; SSE-NEXT:    movaps %xmm0, %xmm11370; SSE-NEXT:    subss %xmm2, %xmm11371; SSE-NEXT:    cvttss2si %xmm1, %rax1372; SSE-NEXT:    cvttss2si %xmm0, %rcx1373; SSE-NEXT:    movq %rcx, %rdx1374; SSE-NEXT:    sarq $63, %rdx1375; SSE-NEXT:    andq %rax, %rdx1376; SSE-NEXT:    orq %rcx, %rdx1377; SSE-NEXT:    movq %rdx, %xmm11378; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1379; SSE-NEXT:    cvttss2si %xmm0, %rax1380; SSE-NEXT:    subss %xmm2, %xmm01381; SSE-NEXT:    cvttss2si %xmm0, %rcx1382; SSE-NEXT:    movq %rax, %rdx1383; SSE-NEXT:    sarq $63, %rdx1384; SSE-NEXT:    andq %rcx, %rdx1385; SSE-NEXT:    orq %rax, %rdx1386; SSE-NEXT:    movq %rdx, %xmm01387; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]1388; SSE-NEXT:    movdqa %xmm1, %xmm01389; SSE-NEXT:    retq1390;1391; VEX-LABEL: fptoui_4f32_to_2i64:1392; VEX:       # %bb.0:1393; VEX-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]1394; VEX-NEXT:    vmovss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1395; VEX-NEXT:    vsubss %xmm2, %xmm1, %xmm31396; VEX-NEXT:    vcvttss2si %xmm3, %rax1397; VEX-NEXT:    vcvttss2si %xmm1, %rcx1398; VEX-NEXT:    movq %rcx, %rdx1399; VEX-NEXT:    sarq $63, %rdx1400; VEX-NEXT:    andq %rax, %rdx1401; VEX-NEXT:    orq %rcx, %rdx1402; VEX-NEXT:    vsubss %xmm2, %xmm0, %xmm11403; VEX-NEXT:    vcvttss2si %xmm1, %rax1404; VEX-NEXT:    vcvttss2si %xmm0, %rcx1405; VEX-NEXT:    movq %rcx, %rsi1406; VEX-NEXT:    sarq $63, %rsi1407; VEX-NEXT:    andq %rax, %rsi1408; VEX-NEXT:    orq %rcx, %rsi1409; VEX-NEXT:    vmovq %rsi, %xmm01410; VEX-NEXT:    vmovq %rdx, %xmm11411; VEX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1412; VEX-NEXT:    retq1413;1414; AVX512F-LABEL: fptoui_4f32_to_2i64:1415; AVX512F:       # %bb.0:1416; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]1417; AVX512F-NEXT:    vcvttss2usi %xmm1, %rax1418; AVX512F-NEXT:    vcvttss2usi %xmm0, %rcx1419; AVX512F-NEXT:    vmovq %rcx, %xmm01420; AVX512F-NEXT:    vmovq %rax, %xmm11421; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1422; AVX512F-NEXT:    retq1423;1424; AVX512VL-LABEL: fptoui_4f32_to_2i64:1425; AVX512VL:       # %bb.0:1426; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]1427; AVX512VL-NEXT:    vcvttss2usi %xmm1, %rax1428; AVX512VL-NEXT:    vcvttss2usi %xmm0, %rcx1429; AVX512VL-NEXT:    vmovq %rcx, %xmm01430; AVX512VL-NEXT:    vmovq %rax, %xmm11431; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1432; AVX512VL-NEXT:    retq1433;1434; AVX512DQ-LABEL: fptoui_4f32_to_2i64:1435; AVX512DQ:       # %bb.0:1436; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01437; AVX512DQ-NEXT:    vcvttps2uqq %ymm0, %zmm01438; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01439; AVX512DQ-NEXT:    vzeroupper1440; AVX512DQ-NEXT:    retq1441;1442; AVX512VLDQ-LABEL: fptoui_4f32_to_2i64:1443; AVX512VLDQ:       # %bb.0:1444; AVX512VLDQ-NEXT:    vcvttps2uqq %xmm0, %ymm01445; AVX512VLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01446; AVX512VLDQ-NEXT:    vzeroupper1447; AVX512VLDQ-NEXT:    retq1448  %cvt = fptoui <4 x float> %a to <4 x i64>1449  %shuf = shufflevector <4 x i64> %cvt, <4 x i64> undef, <2 x i32> <i32 0, i32 1>1450  ret <2 x i64> %shuf1451}1452 1453define <8 x i32> @fptoui_8f32_to_8i32(<8 x float> %a) {1454; SSE-LABEL: fptoui_8f32_to_8i32:1455; SSE:       # %bb.0:1456; SSE-NEXT:    movaps {{.*#+}} xmm2 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]1457; SSE-NEXT:    cvttps2dq %xmm0, %xmm31458; SSE-NEXT:    subps %xmm2, %xmm01459; SSE-NEXT:    cvttps2dq %xmm0, %xmm41460; SSE-NEXT:    movdqa %xmm3, %xmm01461; SSE-NEXT:    psrad $31, %xmm01462; SSE-NEXT:    pand %xmm4, %xmm01463; SSE-NEXT:    por %xmm3, %xmm01464; SSE-NEXT:    cvttps2dq %xmm1, %xmm31465; SSE-NEXT:    subps %xmm2, %xmm11466; SSE-NEXT:    cvttps2dq %xmm1, %xmm21467; SSE-NEXT:    movdqa %xmm3, %xmm11468; SSE-NEXT:    psrad $31, %xmm11469; SSE-NEXT:    pand %xmm2, %xmm11470; SSE-NEXT:    por %xmm3, %xmm11471; SSE-NEXT:    retq1472;1473; AVX1-LABEL: fptoui_8f32_to_8i32:1474; AVX1:       # %bb.0:1475; AVX1-NEXT:    vcvttps2dq %ymm0, %ymm11476; AVX1-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01477; AVX1-NEXT:    vcvttps2dq %ymm0, %ymm01478; AVX1-NEXT:    vorps %ymm0, %ymm1, %ymm01479; AVX1-NEXT:    vblendvps %ymm1, %ymm0, %ymm1, %ymm01480; AVX1-NEXT:    retq1481;1482; AVX2-LABEL: fptoui_8f32_to_8i32:1483; AVX2:       # %bb.0:1484; 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]1485; AVX2-NEXT:    vsubps %ymm1, %ymm0, %ymm11486; AVX2-NEXT:    vcvttps2dq %ymm1, %ymm11487; AVX2-NEXT:    vcvttps2dq %ymm0, %ymm01488; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm21489; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm11490; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01491; AVX2-NEXT:    retq1492;1493; AVX512F-LABEL: fptoui_8f32_to_8i32:1494; AVX512F:       # %bb.0:1495; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01496; AVX512F-NEXT:    vcvttps2udq %zmm0, %zmm01497; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01498; AVX512F-NEXT:    retq1499;1500; AVX512VL-LABEL: fptoui_8f32_to_8i32:1501; AVX512VL:       # %bb.0:1502; AVX512VL-NEXT:    vcvttps2udq %ymm0, %ymm01503; AVX512VL-NEXT:    retq1504;1505; AVX512DQ-LABEL: fptoui_8f32_to_8i32:1506; AVX512DQ:       # %bb.0:1507; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01508; AVX512DQ-NEXT:    vcvttps2udq %zmm0, %zmm01509; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01510; AVX512DQ-NEXT:    retq1511;1512; AVX512VLDQ-LABEL: fptoui_8f32_to_8i32:1513; AVX512VLDQ:       # %bb.0:1514; AVX512VLDQ-NEXT:    vcvttps2udq %ymm0, %ymm01515; AVX512VLDQ-NEXT:    retq1516  %cvt = fptoui <8 x float> %a to <8 x i32>1517  ret <8 x i32> %cvt1518}1519 1520define <4 x i64> @fptoui_4f32_to_4i64(<8 x float> %a) {1521; SSE-LABEL: fptoui_4f32_to_4i64:1522; SSE:       # %bb.0:1523; SSE-NEXT:    movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1524; SSE-NEXT:    movaps %xmm0, %xmm21525; SSE-NEXT:    subss %xmm1, %xmm21526; SSE-NEXT:    cvttss2si %xmm2, %rax1527; SSE-NEXT:    cvttss2si %xmm0, %rcx1528; SSE-NEXT:    movq %rcx, %rdx1529; SSE-NEXT:    sarq $63, %rdx1530; SSE-NEXT:    andq %rax, %rdx1531; SSE-NEXT:    orq %rcx, %rdx1532; SSE-NEXT:    movq %rdx, %xmm21533; SSE-NEXT:    movaps %xmm0, %xmm31534; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1],xmm0[1,1]1535; SSE-NEXT:    cvttss2si %xmm3, %rax1536; SSE-NEXT:    subss %xmm1, %xmm31537; SSE-NEXT:    cvttss2si %xmm3, %rcx1538; SSE-NEXT:    movq %rax, %rdx1539; SSE-NEXT:    sarq $63, %rdx1540; SSE-NEXT:    andq %rcx, %rdx1541; SSE-NEXT:    orq %rax, %rdx1542; SSE-NEXT:    movq %rdx, %xmm31543; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]1544; SSE-NEXT:    movaps %xmm0, %xmm31545; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[3,3],xmm0[3,3]1546; SSE-NEXT:    cvttss2si %xmm3, %rax1547; SSE-NEXT:    subss %xmm1, %xmm31548; SSE-NEXT:    cvttss2si %xmm3, %rcx1549; SSE-NEXT:    movq %rax, %rdx1550; SSE-NEXT:    sarq $63, %rdx1551; SSE-NEXT:    andq %rcx, %rdx1552; SSE-NEXT:    orq %rax, %rdx1553; SSE-NEXT:    movq %rdx, %xmm31554; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1555; SSE-NEXT:    cvttss2si %xmm0, %rax1556; SSE-NEXT:    subss %xmm1, %xmm01557; SSE-NEXT:    cvttss2si %xmm0, %rcx1558; SSE-NEXT:    movq %rax, %rdx1559; SSE-NEXT:    sarq $63, %rdx1560; SSE-NEXT:    andq %rcx, %rdx1561; SSE-NEXT:    orq %rax, %rdx1562; SSE-NEXT:    movq %rdx, %xmm11563; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]1564; SSE-NEXT:    movdqa %xmm2, %xmm01565; SSE-NEXT:    retq1566;1567; AVX1-LABEL: fptoui_4f32_to_4i64:1568; AVX1:       # %bb.0:1569; AVX1-NEXT:    vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]1570; AVX1-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1571; AVX1-NEXT:    vsubss %xmm1, %xmm2, %xmm31572; AVX1-NEXT:    vcvttss2si %xmm3, %rax1573; AVX1-NEXT:    vcvttss2si %xmm2, %rcx1574; AVX1-NEXT:    movq %rcx, %rdx1575; AVX1-NEXT:    sarq $63, %rdx1576; AVX1-NEXT:    andq %rax, %rdx1577; AVX1-NEXT:    orq %rcx, %rdx1578; AVX1-NEXT:    vmovq %rdx, %xmm21579; AVX1-NEXT:    vshufpd {{.*#+}} xmm3 = xmm0[1,0]1580; AVX1-NEXT:    vsubss %xmm1, %xmm3, %xmm41581; AVX1-NEXT:    vcvttss2si %xmm4, %rax1582; AVX1-NEXT:    vcvttss2si %xmm3, %rcx1583; AVX1-NEXT:    movq %rcx, %rdx1584; AVX1-NEXT:    sarq $63, %rdx1585; AVX1-NEXT:    andq %rax, %rdx1586; AVX1-NEXT:    orq %rcx, %rdx1587; AVX1-NEXT:    vmovq %rdx, %xmm31588; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1589; AVX1-NEXT:    vsubss %xmm1, %xmm0, %xmm31590; AVX1-NEXT:    vcvttss2si %xmm3, %rax1591; AVX1-NEXT:    vcvttss2si %xmm0, %rcx1592; AVX1-NEXT:    movq %rcx, %rdx1593; AVX1-NEXT:    sarq $63, %rdx1594; AVX1-NEXT:    andq %rax, %rdx1595; AVX1-NEXT:    orq %rcx, %rdx1596; AVX1-NEXT:    vmovq %rdx, %xmm31597; AVX1-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1598; AVX1-NEXT:    vsubss %xmm1, %xmm0, %xmm11599; AVX1-NEXT:    vcvttss2si %xmm1, %rax1600; AVX1-NEXT:    vcvttss2si %xmm0, %rcx1601; AVX1-NEXT:    movq %rcx, %rdx1602; AVX1-NEXT:    sarq $63, %rdx1603; AVX1-NEXT:    andq %rax, %rdx1604; AVX1-NEXT:    orq %rcx, %rdx1605; AVX1-NEXT:    vmovq %rdx, %xmm01606; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]1607; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01608; AVX1-NEXT:    retq1609;1610; AVX2-LABEL: fptoui_4f32_to_4i64:1611; AVX2:       # %bb.0:1612; AVX2-NEXT:    vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]1613; AVX2-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1614; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm31615; AVX2-NEXT:    vcvttss2si %xmm3, %rax1616; AVX2-NEXT:    vcvttss2si %xmm2, %rcx1617; AVX2-NEXT:    movq %rcx, %rdx1618; AVX2-NEXT:    sarq $63, %rdx1619; AVX2-NEXT:    andq %rax, %rdx1620; AVX2-NEXT:    orq %rcx, %rdx1621; AVX2-NEXT:    vmovq %rdx, %xmm21622; AVX2-NEXT:    vshufpd {{.*#+}} xmm3 = xmm0[1,0]1623; AVX2-NEXT:    vsubss %xmm1, %xmm3, %xmm41624; AVX2-NEXT:    vcvttss2si %xmm4, %rax1625; AVX2-NEXT:    vcvttss2si %xmm3, %rcx1626; AVX2-NEXT:    movq %rcx, %rdx1627; AVX2-NEXT:    sarq $63, %rdx1628; AVX2-NEXT:    andq %rax, %rdx1629; AVX2-NEXT:    orq %rcx, %rdx1630; AVX2-NEXT:    vmovq %rdx, %xmm31631; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1632; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm31633; AVX2-NEXT:    vcvttss2si %xmm3, %rax1634; AVX2-NEXT:    vcvttss2si %xmm0, %rcx1635; AVX2-NEXT:    movq %rcx, %rdx1636; AVX2-NEXT:    sarq $63, %rdx1637; AVX2-NEXT:    andq %rax, %rdx1638; AVX2-NEXT:    orq %rcx, %rdx1639; AVX2-NEXT:    vmovq %rdx, %xmm31640; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1641; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm11642; AVX2-NEXT:    vcvttss2si %xmm1, %rax1643; AVX2-NEXT:    vcvttss2si %xmm0, %rcx1644; AVX2-NEXT:    movq %rcx, %rdx1645; AVX2-NEXT:    sarq $63, %rdx1646; AVX2-NEXT:    andq %rax, %rdx1647; AVX2-NEXT:    orq %rcx, %rdx1648; AVX2-NEXT:    vmovq %rdx, %xmm01649; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]1650; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm01651; AVX2-NEXT:    retq1652;1653; AVX512F-LABEL: fptoui_4f32_to_4i64:1654; AVX512F:       # %bb.0:1655; AVX512F-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]1656; AVX512F-NEXT:    vcvttss2usi %xmm1, %rax1657; AVX512F-NEXT:    vmovq %rax, %xmm11658; AVX512F-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]1659; AVX512F-NEXT:    vcvttss2usi %xmm2, %rax1660; AVX512F-NEXT:    vmovq %rax, %xmm21661; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]1662; AVX512F-NEXT:    vcvttss2usi %xmm0, %rax1663; AVX512F-NEXT:    vmovq %rax, %xmm21664; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1665; AVX512F-NEXT:    vcvttss2usi %xmm0, %rax1666; AVX512F-NEXT:    vmovq %rax, %xmm01667; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]1668; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01669; AVX512F-NEXT:    retq1670;1671; AVX512VL-LABEL: fptoui_4f32_to_4i64:1672; AVX512VL:       # %bb.0:1673; AVX512VL-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]1674; AVX512VL-NEXT:    vcvttss2usi %xmm1, %rax1675; AVX512VL-NEXT:    vmovq %rax, %xmm11676; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]1677; AVX512VL-NEXT:    vcvttss2usi %xmm2, %rax1678; AVX512VL-NEXT:    vmovq %rax, %xmm21679; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]1680; AVX512VL-NEXT:    vcvttss2usi %xmm0, %rax1681; AVX512VL-NEXT:    vmovq %rax, %xmm21682; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1683; AVX512VL-NEXT:    vcvttss2usi %xmm0, %rax1684; AVX512VL-NEXT:    vmovq %rax, %xmm01685; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]1686; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01687; AVX512VL-NEXT:    retq1688;1689; AVX512DQ-LABEL: fptoui_4f32_to_4i64:1690; AVX512DQ:       # %bb.0:1691; AVX512DQ-NEXT:    vcvttps2uqq %ymm0, %zmm01692; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01693; AVX512DQ-NEXT:    retq1694;1695; AVX512VLDQ-LABEL: fptoui_4f32_to_4i64:1696; AVX512VLDQ:       # %bb.0:1697; AVX512VLDQ-NEXT:    vcvttps2uqq %xmm0, %ymm01698; AVX512VLDQ-NEXT:    retq1699  %shuf = shufflevector <8 x float> %a, <8 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1700  %cvt = fptoui <4 x float> %shuf to <4 x i64>1701  ret <4 x i64> %cvt1702}1703 1704define <4 x i64> @fptoui_8f32_to_4i64(<8 x float> %a) {1705; SSE-LABEL: fptoui_8f32_to_4i64:1706; SSE:       # %bb.0:1707; SSE-NEXT:    movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1708; SSE-NEXT:    movaps %xmm0, %xmm21709; SSE-NEXT:    subss %xmm1, %xmm21710; SSE-NEXT:    cvttss2si %xmm2, %rax1711; SSE-NEXT:    cvttss2si %xmm0, %rcx1712; SSE-NEXT:    movq %rcx, %rdx1713; SSE-NEXT:    sarq $63, %rdx1714; SSE-NEXT:    andq %rax, %rdx1715; SSE-NEXT:    orq %rcx, %rdx1716; SSE-NEXT:    movq %rdx, %xmm21717; SSE-NEXT:    movaps %xmm0, %xmm31718; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[1,1],xmm0[1,1]1719; SSE-NEXT:    cvttss2si %xmm3, %rax1720; SSE-NEXT:    subss %xmm1, %xmm31721; SSE-NEXT:    cvttss2si %xmm3, %rcx1722; SSE-NEXT:    movq %rax, %rdx1723; SSE-NEXT:    sarq $63, %rdx1724; SSE-NEXT:    andq %rcx, %rdx1725; SSE-NEXT:    orq %rax, %rdx1726; SSE-NEXT:    movq %rdx, %xmm31727; SSE-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]1728; SSE-NEXT:    movaps %xmm0, %xmm31729; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[3,3],xmm0[3,3]1730; SSE-NEXT:    cvttss2si %xmm3, %rax1731; SSE-NEXT:    subss %xmm1, %xmm31732; SSE-NEXT:    cvttss2si %xmm3, %rcx1733; SSE-NEXT:    movq %rax, %rdx1734; SSE-NEXT:    sarq $63, %rdx1735; SSE-NEXT:    andq %rcx, %rdx1736; SSE-NEXT:    orq %rax, %rdx1737; SSE-NEXT:    movq %rdx, %xmm31738; SSE-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]1739; SSE-NEXT:    cvttss2si %xmm0, %rax1740; SSE-NEXT:    subss %xmm1, %xmm01741; SSE-NEXT:    cvttss2si %xmm0, %rcx1742; SSE-NEXT:    movq %rax, %rdx1743; SSE-NEXT:    sarq $63, %rdx1744; SSE-NEXT:    andq %rcx, %rdx1745; SSE-NEXT:    orq %rax, %rdx1746; SSE-NEXT:    movq %rdx, %xmm11747; SSE-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]1748; SSE-NEXT:    movdqa %xmm2, %xmm01749; SSE-NEXT:    retq1750;1751; AVX1-LABEL: fptoui_8f32_to_4i64:1752; AVX1:       # %bb.0:1753; AVX1-NEXT:    vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]1754; AVX1-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1755; AVX1-NEXT:    vsubss %xmm1, %xmm2, %xmm31756; AVX1-NEXT:    vcvttss2si %xmm3, %rax1757; AVX1-NEXT:    vcvttss2si %xmm2, %rcx1758; AVX1-NEXT:    movq %rcx, %rdx1759; AVX1-NEXT:    sarq $63, %rdx1760; AVX1-NEXT:    andq %rax, %rdx1761; AVX1-NEXT:    orq %rcx, %rdx1762; AVX1-NEXT:    vmovq %rdx, %xmm21763; AVX1-NEXT:    vshufpd {{.*#+}} xmm3 = xmm0[1,0]1764; AVX1-NEXT:    vsubss %xmm1, %xmm3, %xmm41765; AVX1-NEXT:    vcvttss2si %xmm4, %rax1766; AVX1-NEXT:    vcvttss2si %xmm3, %rcx1767; AVX1-NEXT:    movq %rcx, %rdx1768; AVX1-NEXT:    sarq $63, %rdx1769; AVX1-NEXT:    andq %rax, %rdx1770; AVX1-NEXT:    orq %rcx, %rdx1771; AVX1-NEXT:    vmovq %rdx, %xmm31772; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1773; AVX1-NEXT:    vsubss %xmm1, %xmm0, %xmm31774; AVX1-NEXT:    vcvttss2si %xmm3, %rax1775; AVX1-NEXT:    vcvttss2si %xmm0, %rcx1776; AVX1-NEXT:    movq %rcx, %rdx1777; AVX1-NEXT:    sarq $63, %rdx1778; AVX1-NEXT:    andq %rax, %rdx1779; AVX1-NEXT:    orq %rcx, %rdx1780; AVX1-NEXT:    vmovq %rdx, %xmm31781; AVX1-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1782; AVX1-NEXT:    vsubss %xmm1, %xmm0, %xmm11783; AVX1-NEXT:    vcvttss2si %xmm1, %rax1784; AVX1-NEXT:    vcvttss2si %xmm0, %rcx1785; AVX1-NEXT:    movq %rcx, %rdx1786; AVX1-NEXT:    sarq $63, %rdx1787; AVX1-NEXT:    andq %rax, %rdx1788; AVX1-NEXT:    orq %rcx, %rdx1789; AVX1-NEXT:    vmovq %rdx, %xmm01790; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]1791; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01792; AVX1-NEXT:    retq1793;1794; AVX2-LABEL: fptoui_8f32_to_4i64:1795; AVX2:       # %bb.0:1796; AVX2-NEXT:    vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]1797; AVX2-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]1798; AVX2-NEXT:    vsubss %xmm1, %xmm2, %xmm31799; AVX2-NEXT:    vcvttss2si %xmm3, %rax1800; AVX2-NEXT:    vcvttss2si %xmm2, %rcx1801; AVX2-NEXT:    movq %rcx, %rdx1802; AVX2-NEXT:    sarq $63, %rdx1803; AVX2-NEXT:    andq %rax, %rdx1804; AVX2-NEXT:    orq %rcx, %rdx1805; AVX2-NEXT:    vmovq %rdx, %xmm21806; AVX2-NEXT:    vshufpd {{.*#+}} xmm3 = xmm0[1,0]1807; AVX2-NEXT:    vsubss %xmm1, %xmm3, %xmm41808; AVX2-NEXT:    vcvttss2si %xmm4, %rax1809; AVX2-NEXT:    vcvttss2si %xmm3, %rcx1810; AVX2-NEXT:    movq %rcx, %rdx1811; AVX2-NEXT:    sarq $63, %rdx1812; AVX2-NEXT:    andq %rax, %rdx1813; AVX2-NEXT:    orq %rcx, %rdx1814; AVX2-NEXT:    vmovq %rdx, %xmm31815; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1816; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm31817; AVX2-NEXT:    vcvttss2si %xmm3, %rax1818; AVX2-NEXT:    vcvttss2si %xmm0, %rcx1819; AVX2-NEXT:    movq %rcx, %rdx1820; AVX2-NEXT:    sarq $63, %rdx1821; AVX2-NEXT:    andq %rax, %rdx1822; AVX2-NEXT:    orq %rcx, %rdx1823; AVX2-NEXT:    vmovq %rdx, %xmm31824; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]1825; AVX2-NEXT:    vsubss %xmm1, %xmm0, %xmm11826; AVX2-NEXT:    vcvttss2si %xmm1, %rax1827; AVX2-NEXT:    vcvttss2si %xmm0, %rcx1828; AVX2-NEXT:    movq %rcx, %rdx1829; AVX2-NEXT:    sarq $63, %rdx1830; AVX2-NEXT:    andq %rax, %rdx1831; AVX2-NEXT:    orq %rcx, %rdx1832; AVX2-NEXT:    vmovq %rdx, %xmm01833; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]1834; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm01835; AVX2-NEXT:    retq1836;1837; AVX512F-LABEL: fptoui_8f32_to_4i64:1838; AVX512F:       # %bb.0:1839; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]1840; AVX512F-NEXT:    vcvttss2usi %xmm1, %rax1841; AVX512F-NEXT:    vcvttss2usi %xmm0, %rcx1842; AVX512F-NEXT:    vshufpd {{.*#+}} xmm1 = xmm0[1,0]1843; AVX512F-NEXT:    vcvttss2usi %xmm1, %rdx1844; AVX512F-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1845; AVX512F-NEXT:    vcvttss2usi %xmm0, %rsi1846; AVX512F-NEXT:    vmovq %rsi, %xmm01847; AVX512F-NEXT:    vmovq %rdx, %xmm11848; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]1849; AVX512F-NEXT:    vmovq %rcx, %xmm11850; AVX512F-NEXT:    vmovq %rax, %xmm21851; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]1852; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm01853; AVX512F-NEXT:    retq1854;1855; AVX512VL-LABEL: fptoui_8f32_to_4i64:1856; AVX512VL:       # %bb.0:1857; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3]1858; AVX512VL-NEXT:    vcvttss2usi %xmm1, %rax1859; AVX512VL-NEXT:    vcvttss2usi %xmm0, %rcx1860; AVX512VL-NEXT:    vshufpd {{.*#+}} xmm1 = xmm0[1,0]1861; AVX512VL-NEXT:    vcvttss2usi %xmm1, %rdx1862; AVX512VL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1863; AVX512VL-NEXT:    vcvttss2usi %xmm0, %rsi1864; AVX512VL-NEXT:    vmovq %rsi, %xmm01865; AVX512VL-NEXT:    vmovq %rdx, %xmm11866; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]1867; AVX512VL-NEXT:    vmovq %rcx, %xmm11868; AVX512VL-NEXT:    vmovq %rax, %xmm21869; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]1870; AVX512VL-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm01871; AVX512VL-NEXT:    retq1872;1873; AVX512DQ-LABEL: fptoui_8f32_to_4i64:1874; AVX512DQ:       # %bb.0:1875; AVX512DQ-NEXT:    vcvttps2uqq %ymm0, %zmm01876; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01877; AVX512DQ-NEXT:    retq1878;1879; AVX512VLDQ-LABEL: fptoui_8f32_to_4i64:1880; AVX512VLDQ:       # %bb.0:1881; AVX512VLDQ-NEXT:    vcvttps2uqq %ymm0, %zmm01882; AVX512VLDQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01883; AVX512VLDQ-NEXT:    retq1884  %cvt = fptoui <8 x float> %a to <8 x i64>1885  %shuf = shufflevector <8 x i64> %cvt, <8 x i64> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1886  ret <4 x i64> %shuf1887}1888 1889;1890; Constant Folding1891;1892 1893define <2 x i64> @fptosi_2f64_to_2i64_const() {1894; SSE-LABEL: fptosi_2f64_to_2i64_const:1895; SSE:       # %bb.0:1896; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,18446744073709551615]1897; SSE-NEXT:    retq1898;1899; VEX-LABEL: fptosi_2f64_to_2i64_const:1900; VEX:       # %bb.0:1901; VEX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,18446744073709551615]1902; VEX-NEXT:    retq1903;1904; AVX512-LABEL: fptosi_2f64_to_2i64_const:1905; AVX512:       # %bb.0:1906; AVX512-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [1,18446744073709551615]1907; AVX512-NEXT:    retq1908  %cvt = fptosi <2 x double> <double 1.0, double -1.0> to <2 x i64>1909  ret <2 x i64> %cvt1910}1911 1912define <4 x i32> @fptosi_2f64_to_2i32_const() {1913; SSE-LABEL: fptosi_2f64_to_2i32_const:1914; SSE:       # %bb.0:1915; SSE-NEXT:    movsd {{.*#+}} xmm0 = [4294967295,1,0,0]1916; SSE-NEXT:    retq1917;1918; VEX-LABEL: fptosi_2f64_to_2i32_const:1919; VEX:       # %bb.0:1920; VEX-NEXT:    vmovsd {{.*#+}} xmm0 = [4294967295,1,0,0]1921; VEX-NEXT:    retq1922;1923; AVX512-LABEL: fptosi_2f64_to_2i32_const:1924; AVX512:       # %bb.0:1925; AVX512-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [4294967295,1,0,0]1926; AVX512-NEXT:    retq1927  %cvt = fptosi <2 x double> <double -1.0, double 1.0> to <2 x i32>1928  %ext = shufflevector <2 x i32> %cvt, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>1929  ret <4 x i32> %ext1930}1931 1932define <4 x i64> @fptosi_4f64_to_4i64_const() {1933; SSE-LABEL: fptosi_4f64_to_4i64_const:1934; SSE:       # %bb.0:1935; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,18446744073709551615]1936; SSE-NEXT:    movaps {{.*#+}} xmm1 = [2,18446744073709551613]1937; SSE-NEXT:    retq1938;1939; VEX-LABEL: fptosi_4f64_to_4i64_const:1940; VEX:       # %bb.0:1941; VEX-NEXT:    vmovaps {{.*#+}} ymm0 = [1,18446744073709551615,2,18446744073709551613]1942; VEX-NEXT:    retq1943;1944; AVX512-LABEL: fptosi_4f64_to_4i64_const:1945; AVX512:       # %bb.0:1946; AVX512-NEXT:    vpmovsxbq {{.*#+}} ymm0 = [1,18446744073709551615,2,18446744073709551613]1947; AVX512-NEXT:    retq1948  %cvt = fptosi <4 x double> <double 1.0, double -1.0, double 2.0, double -3.0> to <4 x i64>1949  ret <4 x i64> %cvt1950}1951 1952define <4 x i32> @fptosi_4f64_to_4i32_const() {1953; SSE-LABEL: fptosi_4f64_to_4i32_const:1954; SSE:       # %bb.0:1955; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967295,1,4294967294,3]1956; SSE-NEXT:    retq1957;1958; VEX-LABEL: fptosi_4f64_to_4i32_const:1959; VEX:       # %bb.0:1960; VEX-NEXT:    vmovaps {{.*#+}} xmm0 = [4294967295,1,4294967294,3]1961; VEX-NEXT:    retq1962;1963; AVX512-LABEL: fptosi_4f64_to_4i32_const:1964; AVX512:       # %bb.0:1965; AVX512-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [4294967295,1,4294967294,3]1966; AVX512-NEXT:    retq1967  %cvt = fptosi <4 x double> <double -1.0, double 1.0, double -2.0, double 3.0> to <4 x i32>1968  ret <4 x i32> %cvt1969}1970 1971define <2 x i64> @fptoui_2f64_to_2i64_const() {1972; SSE-LABEL: fptoui_2f64_to_2i64_const:1973; SSE:       # %bb.0:1974; SSE-NEXT:    movaps {{.*#+}} xmm0 = [2,4]1975; SSE-NEXT:    retq1976;1977; VEX-LABEL: fptoui_2f64_to_2i64_const:1978; VEX:       # %bb.0:1979; VEX-NEXT:    vmovaps {{.*#+}} xmm0 = [2,4]1980; VEX-NEXT:    retq1981;1982; AVX512-LABEL: fptoui_2f64_to_2i64_const:1983; AVX512:       # %bb.0:1984; AVX512-NEXT:    vpmovsxbq {{.*#+}} xmm0 = [2,4]1985; AVX512-NEXT:    retq1986  %cvt = fptoui <2 x double> <double 2.0, double 4.0> to <2 x i64>1987  ret <2 x i64> %cvt1988}1989 1990define <4 x i32> @fptoui_2f64_to_2i32_const(<2 x double> %a) {1991; SSE-LABEL: fptoui_2f64_to_2i32_const:1992; SSE:       # %bb.0:1993; SSE-NEXT:    movsd {{.*#+}} xmm0 = [2,4,0,0]1994; SSE-NEXT:    retq1995;1996; VEX-LABEL: fptoui_2f64_to_2i32_const:1997; VEX:       # %bb.0:1998; VEX-NEXT:    vmovsd {{.*#+}} xmm0 = [2,4,0,0]1999; VEX-NEXT:    retq2000;2001; AVX512-LABEL: fptoui_2f64_to_2i32_const:2002; AVX512:       # %bb.0:2003; AVX512-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [2,4,0,0]2004; AVX512-NEXT:    retq2005  %cvt = fptoui <2 x double> <double 2.0, double 4.0> to <2 x i32>2006  %ext = shufflevector <2 x i32> %cvt, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>2007  ret <4 x i32> %ext2008}2009 2010define <4 x i64> @fptoui_4f64_to_4i64_const(<4 x double> %a) {2011; SSE-LABEL: fptoui_4f64_to_4i64_const:2012; SSE:       # %bb.0:2013; SSE-NEXT:    movaps {{.*#+}} xmm0 = [2,4]2014; SSE-NEXT:    movaps {{.*#+}} xmm1 = [6,8]2015; SSE-NEXT:    retq2016;2017; VEX-LABEL: fptoui_4f64_to_4i64_const:2018; VEX:       # %bb.0:2019; VEX-NEXT:    vmovaps {{.*#+}} ymm0 = [2,4,6,8]2020; VEX-NEXT:    retq2021;2022; AVX512-LABEL: fptoui_4f64_to_4i64_const:2023; AVX512:       # %bb.0:2024; AVX512-NEXT:    vpmovsxbq {{.*#+}} ymm0 = [2,4,6,8]2025; AVX512-NEXT:    retq2026  %cvt = fptoui <4 x double> <double 2.0, double 4.0, double 6.0, double 8.0> to <4 x i64>2027  ret <4 x i64> %cvt2028}2029 2030define <4 x i32> @fptoui_4f64_to_4i32_const(<4 x double> %a) {2031; SSE-LABEL: fptoui_4f64_to_4i32_const:2032; SSE:       # %bb.0:2033; SSE-NEXT:    movaps {{.*#+}} xmm0 = [2,4,6,8]2034; SSE-NEXT:    retq2035;2036; VEX-LABEL: fptoui_4f64_to_4i32_const:2037; VEX:       # %bb.0:2038; VEX-NEXT:    vmovaps {{.*#+}} xmm0 = [2,4,6,8]2039; VEX-NEXT:    retq2040;2041; AVX512-LABEL: fptoui_4f64_to_4i32_const:2042; AVX512:       # %bb.0:2043; AVX512-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [2,4,6,8]2044; AVX512-NEXT:    retq2045  %cvt = fptoui <4 x double> <double 2.0, double 4.0, double 6.0, double 8.0> to <4 x i32>2046  ret <4 x i32> %cvt2047}2048 2049define <4 x i32> @fptosi_4f32_to_4i32_const() {2050; SSE-LABEL: fptosi_4f32_to_4i32_const:2051; SSE:       # %bb.0:2052; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,4294967295,2,3]2053; SSE-NEXT:    retq2054;2055; VEX-LABEL: fptosi_4f32_to_4i32_const:2056; VEX:       # %bb.0:2057; VEX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,4294967295,2,3]2058; VEX-NEXT:    retq2059;2060; AVX512-LABEL: fptosi_4f32_to_4i32_const:2061; AVX512:       # %bb.0:2062; AVX512-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [1,4294967295,2,3]2063; AVX512-NEXT:    retq2064  %cvt = fptosi <4 x float> <float 1.0, float -1.0, float 2.0, float 3.0> to <4 x i32>2065  ret <4 x i32> %cvt2066}2067 2068define <4 x i64> @fptosi_4f32_to_4i64_const() {2069; SSE-LABEL: fptosi_4f32_to_4i64_const:2070; SSE:       # %bb.0:2071; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,18446744073709551615]2072; SSE-NEXT:    movaps {{.*#+}} xmm1 = [2,3]2073; SSE-NEXT:    retq2074;2075; VEX-LABEL: fptosi_4f32_to_4i64_const:2076; VEX:       # %bb.0:2077; VEX-NEXT:    vmovaps {{.*#+}} ymm0 = [1,18446744073709551615,2,3]2078; VEX-NEXT:    retq2079;2080; AVX512-LABEL: fptosi_4f32_to_4i64_const:2081; AVX512:       # %bb.0:2082; AVX512-NEXT:    vpmovsxbq {{.*#+}} ymm0 = [1,18446744073709551615,2,3]2083; AVX512-NEXT:    retq2084  %cvt = fptosi <4 x float> <float 1.0, float -1.0, float 2.0, float 3.0> to <4 x i64>2085  ret <4 x i64> %cvt2086}2087 2088define <8 x i32> @fptosi_8f32_to_8i32_const(<8 x float> %a) {2089; SSE-LABEL: fptosi_8f32_to_8i32_const:2090; SSE:       # %bb.0:2091; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,4294967295,2,3]2092; SSE-NEXT:    movaps {{.*#+}} xmm1 = [6,4294967288,2,4294967295]2093; SSE-NEXT:    retq2094;2095; VEX-LABEL: fptosi_8f32_to_8i32_const:2096; VEX:       # %bb.0:2097; VEX-NEXT:    vmovaps {{.*#+}} ymm0 = [1,4294967295,2,3,6,4294967288,2,4294967295]2098; VEX-NEXT:    retq2099;2100; AVX512-LABEL: fptosi_8f32_to_8i32_const:2101; AVX512:       # %bb.0:2102; AVX512-NEXT:    vpmovsxbd {{.*#+}} ymm0 = [1,4294967295,2,3,6,4294967288,2,4294967295]2103; AVX512-NEXT:    retq2104  %cvt = fptosi <8 x float> <float 1.0, float -1.0, float 2.0, float 3.0, float 6.0, float -8.0, float 2.0, float -1.0> to <8 x i32>2105  ret <8 x i32> %cvt2106}2107 2108define <4 x i32> @fptoui_4f32_to_4i32_const(<4 x float> %a) {2109; SSE-LABEL: fptoui_4f32_to_4i32_const:2110; SSE:       # %bb.0:2111; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,2,4,6]2112; SSE-NEXT:    retq2113;2114; VEX-LABEL: fptoui_4f32_to_4i32_const:2115; VEX:       # %bb.0:2116; VEX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,2,4,6]2117; VEX-NEXT:    retq2118;2119; AVX512-LABEL: fptoui_4f32_to_4i32_const:2120; AVX512:       # %bb.0:2121; AVX512-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [1,2,4,6]2122; AVX512-NEXT:    retq2123  %cvt = fptoui <4 x float> <float 1.0, float 2.0, float 4.0, float 6.0> to <4 x i32>2124  ret <4 x i32> %cvt2125}2126 2127define <4 x i64> @fptoui_4f32_to_4i64_const() {2128; SSE-LABEL: fptoui_4f32_to_4i64_const:2129; SSE:       # %bb.0:2130; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,2]2131; SSE-NEXT:    movaps {{.*#+}} xmm1 = [4,8]2132; SSE-NEXT:    retq2133;2134; VEX-LABEL: fptoui_4f32_to_4i64_const:2135; VEX:       # %bb.0:2136; VEX-NEXT:    vmovaps {{.*#+}} ymm0 = [1,2,4,8]2137; VEX-NEXT:    retq2138;2139; AVX512-LABEL: fptoui_4f32_to_4i64_const:2140; AVX512:       # %bb.0:2141; AVX512-NEXT:    vpmovsxbq {{.*#+}} ymm0 = [1,2,4,8]2142; AVX512-NEXT:    retq2143  %cvt = fptoui <4 x float> <float 1.0, float 2.0, float 4.0, float 8.0> to <4 x i64>2144  ret <4 x i64> %cvt2145}2146 2147define <8 x i32> @fptoui_8f32_to_8i32_const(<8 x float> %a) {2148; SSE-LABEL: fptoui_8f32_to_8i32_const:2149; SSE:       # %bb.0:2150; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,2,4,6]2151; SSE-NEXT:    movaps {{.*#+}} xmm1 = [8,6,4,1]2152; SSE-NEXT:    retq2153;2154; VEX-LABEL: fptoui_8f32_to_8i32_const:2155; VEX:       # %bb.0:2156; VEX-NEXT:    vmovaps {{.*#+}} ymm0 = [1,2,4,6,8,6,4,1]2157; VEX-NEXT:    retq2158;2159; AVX512-LABEL: fptoui_8f32_to_8i32_const:2160; AVX512:       # %bb.0:2161; AVX512-NEXT:    vpmovsxbd {{.*#+}} ymm0 = [1,2,4,6,8,6,4,1]2162; AVX512-NEXT:    retq2163  %cvt = fptoui <8 x float> <float 1.0, float 2.0, float 4.0, float 6.0, float 8.0, float 6.0, float 4.0, float 1.0> to <8 x i32>2164  ret <8 x i32> %cvt2165}2166 2167define <4 x i32> @fptosi_2f80_to_4i32(<2 x x86_fp80> %a) nounwind {2168; SSE-LABEL: fptosi_2f80_to_4i32:2169; SSE:       # %bb.0:2170; SSE-NEXT:    fldt {{[0-9]+}}(%rsp)2171; SSE-NEXT:    fldt {{[0-9]+}}(%rsp)2172; SSE-NEXT:    fnstcw -{{[0-9]+}}(%rsp)2173; SSE-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax2174; SSE-NEXT:    orl $3072, %eax # imm = 0xC002175; SSE-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)2176; SSE-NEXT:    fldcw -{{[0-9]+}}(%rsp)2177; SSE-NEXT:    fistpl -{{[0-9]+}}(%rsp)2178; SSE-NEXT:    fldcw -{{[0-9]+}}(%rsp)2179; SSE-NEXT:    fnstcw -{{[0-9]+}}(%rsp)2180; SSE-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax2181; SSE-NEXT:    orl $3072, %eax # imm = 0xC002182; SSE-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)2183; SSE-NEXT:    fldcw -{{[0-9]+}}(%rsp)2184; SSE-NEXT:    fistpl -{{[0-9]+}}(%rsp)2185; SSE-NEXT:    fldcw -{{[0-9]+}}(%rsp)2186; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2187; SSE-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero2188; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]2189; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm1[0],zero2190; SSE-NEXT:    retq2191;2192; AVX-LABEL: fptosi_2f80_to_4i32:2193; AVX:       # %bb.0:2194; AVX-NEXT:    fldt {{[0-9]+}}(%rsp)2195; AVX-NEXT:    fldt {{[0-9]+}}(%rsp)2196; AVX-NEXT:    fisttpl -{{[0-9]+}}(%rsp)2197; AVX-NEXT:    fisttpl -{{[0-9]+}}(%rsp)2198; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2199; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero2200; AVX-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]2201; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero2202; AVX-NEXT:    retq2203  %cvt = fptosi <2 x x86_fp80> %a to <2 x i32>2204  %ext = shufflevector <2 x i32> %cvt, <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2205  ret <4 x i32> %ext2206}2207 2208define <4 x i32> @fptosi_2f128_to_4i32(<2 x fp128> %a) nounwind {2209; SSE-LABEL: fptosi_2f128_to_4i32:2210; SSE:       # %bb.0:2211; SSE-NEXT:    pushq %rbx2212; SSE-NEXT:    subq $16, %rsp2213; SSE-NEXT:    movaps %xmm1, (%rsp) # 16-byte Spill2214; SSE-NEXT:    callq __fixtfsi@PLT2215; SSE-NEXT:    movl %eax, %ebx2216; SSE-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload2217; SSE-NEXT:    callq __fixtfsi@PLT2218; SSE-NEXT:    movd %eax, %xmm02219; SSE-NEXT:    movd %ebx, %xmm12220; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]2221; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm1[0],zero2222; SSE-NEXT:    addq $16, %rsp2223; SSE-NEXT:    popq %rbx2224; SSE-NEXT:    retq2225;2226; AVX-LABEL: fptosi_2f128_to_4i32:2227; AVX:       # %bb.0:2228; AVX-NEXT:    pushq %rbx2229; AVX-NEXT:    subq $16, %rsp2230; AVX-NEXT:    vmovaps %xmm1, (%rsp) # 16-byte Spill2231; AVX-NEXT:    callq __fixtfsi@PLT2232; AVX-NEXT:    movl %eax, %ebx2233; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2234; AVX-NEXT:    callq __fixtfsi@PLT2235; AVX-NEXT:    vmovd %eax, %xmm02236; AVX-NEXT:    vmovd %ebx, %xmm12237; AVX-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]2238; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero2239; AVX-NEXT:    addq $16, %rsp2240; AVX-NEXT:    popq %rbx2241; AVX-NEXT:    retq2242  %cvt = fptosi <2 x fp128> %a to <2 x i32>2243  %ext = shufflevector <2 x i32> %cvt, <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2244  ret <4 x i32> %ext2245}2246 2247define <2 x i8> @fptosi_2f32_to_2i8(<2 x float> %a) {2248; SSE-LABEL: fptosi_2f32_to_2i8:2249; SSE:       # %bb.0:2250; SSE-NEXT:    cvttps2dq %xmm0, %xmm02251; SSE-NEXT:    packssdw %xmm0, %xmm02252; SSE-NEXT:    packsswb %xmm0, %xmm02253; SSE-NEXT:    retq2254;2255; VEX-LABEL: fptosi_2f32_to_2i8:2256; VEX:       # %bb.0:2257; VEX-NEXT:    vcvttps2dq %xmm0, %xmm02258; VEX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm02259; VEX-NEXT:    vpacksswb %xmm0, %xmm0, %xmm02260; VEX-NEXT:    retq2261;2262; AVX512F-LABEL: fptosi_2f32_to_2i8:2263; AVX512F:       # %bb.0:2264; AVX512F-NEXT:    vcvttps2dq %xmm0, %xmm02265; AVX512F-NEXT:    vpackssdw %xmm0, %xmm0, %xmm02266; AVX512F-NEXT:    vpacksswb %xmm0, %xmm0, %xmm02267; AVX512F-NEXT:    retq2268;2269; AVX512VL-LABEL: fptosi_2f32_to_2i8:2270; AVX512VL:       # %bb.0:2271; AVX512VL-NEXT:    vcvttps2dq %xmm0, %xmm02272; AVX512VL-NEXT:    vpmovdb %xmm0, %xmm02273; AVX512VL-NEXT:    retq2274;2275; AVX512DQ-LABEL: fptosi_2f32_to_2i8:2276; AVX512DQ:       # %bb.0:2277; AVX512DQ-NEXT:    vcvttps2dq %xmm0, %xmm02278; AVX512DQ-NEXT:    vpackssdw %xmm0, %xmm0, %xmm02279; AVX512DQ-NEXT:    vpacksswb %xmm0, %xmm0, %xmm02280; AVX512DQ-NEXT:    retq2281;2282; AVX512VLDQ-LABEL: fptosi_2f32_to_2i8:2283; AVX512VLDQ:       # %bb.0:2284; AVX512VLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02285; AVX512VLDQ-NEXT:    vpmovdb %xmm0, %xmm02286; AVX512VLDQ-NEXT:    retq2287  %cvt = fptosi <2 x float> %a to <2 x i8>2288  ret <2 x i8> %cvt2289}2290 2291define <2 x i16> @fptosi_2f32_to_2i16(<2 x float> %a) {2292; SSE-LABEL: fptosi_2f32_to_2i16:2293; SSE:       # %bb.0:2294; SSE-NEXT:    cvttps2dq %xmm0, %xmm02295; SSE-NEXT:    packssdw %xmm0, %xmm02296; SSE-NEXT:    retq2297;2298; AVX-LABEL: fptosi_2f32_to_2i16:2299; AVX:       # %bb.0:2300; AVX-NEXT:    vcvttps2dq %xmm0, %xmm02301; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm02302; AVX-NEXT:    retq2303  %cvt = fptosi <2 x float> %a to <2 x i16>2304  ret <2 x i16> %cvt2305}2306 2307define <2 x i8> @fptoui_2f32_to_2i8(<2 x float> %a) {2308; SSE-LABEL: fptoui_2f32_to_2i8:2309; SSE:       # %bb.0:2310; SSE-NEXT:    cvttps2dq %xmm0, %xmm02311; SSE-NEXT:    packuswb %xmm0, %xmm02312; SSE-NEXT:    packuswb %xmm0, %xmm02313; SSE-NEXT:    retq2314;2315; VEX-LABEL: fptoui_2f32_to_2i8:2316; VEX:       # %bb.0:2317; VEX-NEXT:    vcvttps2dq %xmm0, %xmm02318; VEX-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02319; VEX-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02320; VEX-NEXT:    retq2321;2322; AVX512F-LABEL: fptoui_2f32_to_2i8:2323; AVX512F:       # %bb.0:2324; AVX512F-NEXT:    vcvttps2dq %xmm0, %xmm02325; AVX512F-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02326; AVX512F-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02327; AVX512F-NEXT:    retq2328;2329; AVX512VL-LABEL: fptoui_2f32_to_2i8:2330; AVX512VL:       # %bb.0:2331; AVX512VL-NEXT:    vcvttps2dq %xmm0, %xmm02332; AVX512VL-NEXT:    vpmovdb %xmm0, %xmm02333; AVX512VL-NEXT:    retq2334;2335; AVX512DQ-LABEL: fptoui_2f32_to_2i8:2336; AVX512DQ:       # %bb.0:2337; AVX512DQ-NEXT:    vcvttps2dq %xmm0, %xmm02338; AVX512DQ-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02339; AVX512DQ-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02340; AVX512DQ-NEXT:    retq2341;2342; AVX512VLDQ-LABEL: fptoui_2f32_to_2i8:2343; AVX512VLDQ:       # %bb.0:2344; AVX512VLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02345; AVX512VLDQ-NEXT:    vpmovdb %xmm0, %xmm02346; AVX512VLDQ-NEXT:    retq2347  %cvt = fptoui <2 x float> %a to <2 x i8>2348  ret <2 x i8> %cvt2349}2350 2351define <2 x i16> @fptoui_2f32_to_2i16(<2 x float> %a) {2352; SSE-LABEL: fptoui_2f32_to_2i16:2353; SSE:       # %bb.0:2354; SSE-NEXT:    cvttps2dq %xmm0, %xmm02355; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]2356; SSE-NEXT:    retq2357;2358; AVX-LABEL: fptoui_2f32_to_2i16:2359; AVX:       # %bb.0:2360; AVX-NEXT:    vcvttps2dq %xmm0, %xmm02361; AVX-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02362; AVX-NEXT:    retq2363  %cvt = fptoui <2 x float> %a to <2 x i16>2364  ret <2 x i16> %cvt2365}2366 2367define <2 x i8> @fptosi_2f64_to_2i8(<2 x double> %a) {2368; SSE-LABEL: fptosi_2f64_to_2i8:2369; SSE:       # %bb.0:2370; SSE-NEXT:    cvttpd2dq %xmm0, %xmm02371; SSE-NEXT:    packssdw %xmm0, %xmm02372; SSE-NEXT:    packsswb %xmm0, %xmm02373; SSE-NEXT:    retq2374;2375; VEX-LABEL: fptosi_2f64_to_2i8:2376; VEX:       # %bb.0:2377; VEX-NEXT:    vcvttpd2dq %xmm0, %xmm02378; VEX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm02379; VEX-NEXT:    vpacksswb %xmm0, %xmm0, %xmm02380; VEX-NEXT:    retq2381;2382; AVX512F-LABEL: fptosi_2f64_to_2i8:2383; AVX512F:       # %bb.0:2384; AVX512F-NEXT:    vcvttpd2dq %xmm0, %xmm02385; AVX512F-NEXT:    vpackssdw %xmm0, %xmm0, %xmm02386; AVX512F-NEXT:    vpacksswb %xmm0, %xmm0, %xmm02387; AVX512F-NEXT:    retq2388;2389; AVX512VL-LABEL: fptosi_2f64_to_2i8:2390; AVX512VL:       # %bb.0:2391; AVX512VL-NEXT:    vcvttpd2dq %xmm0, %xmm02392; AVX512VL-NEXT:    vpmovdb %xmm0, %xmm02393; AVX512VL-NEXT:    retq2394;2395; AVX512DQ-LABEL: fptosi_2f64_to_2i8:2396; AVX512DQ:       # %bb.0:2397; AVX512DQ-NEXT:    vcvttpd2dq %xmm0, %xmm02398; AVX512DQ-NEXT:    vpackssdw %xmm0, %xmm0, %xmm02399; AVX512DQ-NEXT:    vpacksswb %xmm0, %xmm0, %xmm02400; AVX512DQ-NEXT:    retq2401;2402; AVX512VLDQ-LABEL: fptosi_2f64_to_2i8:2403; AVX512VLDQ:       # %bb.0:2404; AVX512VLDQ-NEXT:    vcvttpd2dq %xmm0, %xmm02405; AVX512VLDQ-NEXT:    vpmovdb %xmm0, %xmm02406; AVX512VLDQ-NEXT:    retq2407  %cvt = fptosi <2 x double> %a to <2 x i8>2408  ret <2 x i8> %cvt2409}2410 2411define <2 x i16> @fptosi_2f64_to_2i16(<2 x double> %a) {2412; SSE-LABEL: fptosi_2f64_to_2i16:2413; SSE:       # %bb.0:2414; SSE-NEXT:    cvttpd2dq %xmm0, %xmm02415; SSE-NEXT:    packssdw %xmm0, %xmm02416; SSE-NEXT:    retq2417;2418; AVX-LABEL: fptosi_2f64_to_2i16:2419; AVX:       # %bb.0:2420; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm02421; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm02422; AVX-NEXT:    retq2423  %cvt = fptosi <2 x double> %a to <2 x i16>2424  ret <2 x i16> %cvt2425}2426 2427define <2 x i8> @fptoui_2f64_to_2i8(<2 x double> %a) {2428; SSE-LABEL: fptoui_2f64_to_2i8:2429; SSE:       # %bb.0:2430; SSE-NEXT:    cvttpd2dq %xmm0, %xmm02431; SSE-NEXT:    packuswb %xmm0, %xmm02432; SSE-NEXT:    packuswb %xmm0, %xmm02433; SSE-NEXT:    retq2434;2435; VEX-LABEL: fptoui_2f64_to_2i8:2436; VEX:       # %bb.0:2437; VEX-NEXT:    vcvttpd2dq %xmm0, %xmm02438; VEX-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02439; VEX-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02440; VEX-NEXT:    retq2441;2442; AVX512F-LABEL: fptoui_2f64_to_2i8:2443; AVX512F:       # %bb.0:2444; AVX512F-NEXT:    vcvttpd2dq %xmm0, %xmm02445; AVX512F-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02446; AVX512F-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02447; AVX512F-NEXT:    retq2448;2449; AVX512VL-LABEL: fptoui_2f64_to_2i8:2450; AVX512VL:       # %bb.0:2451; AVX512VL-NEXT:    vcvttpd2dq %xmm0, %xmm02452; AVX512VL-NEXT:    vpmovdb %xmm0, %xmm02453; AVX512VL-NEXT:    retq2454;2455; AVX512DQ-LABEL: fptoui_2f64_to_2i8:2456; AVX512DQ:       # %bb.0:2457; AVX512DQ-NEXT:    vcvttpd2dq %xmm0, %xmm02458; AVX512DQ-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02459; AVX512DQ-NEXT:    vpackuswb %xmm0, %xmm0, %xmm02460; AVX512DQ-NEXT:    retq2461;2462; AVX512VLDQ-LABEL: fptoui_2f64_to_2i8:2463; AVX512VLDQ:       # %bb.0:2464; AVX512VLDQ-NEXT:    vcvttpd2dq %xmm0, %xmm02465; AVX512VLDQ-NEXT:    vpmovdb %xmm0, %xmm02466; AVX512VLDQ-NEXT:    retq2467  %cvt = fptoui <2 x double> %a to <2 x i8>2468  ret <2 x i8> %cvt2469}2470 2471define <2 x i16> @fptoui_2f64_to_2i16(<2 x double> %a) {2472; SSE-LABEL: fptoui_2f64_to_2i16:2473; SSE:       # %bb.0:2474; SSE-NEXT:    cvttpd2dq %xmm0, %xmm02475; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]2476; SSE-NEXT:    retq2477;2478; AVX-LABEL: fptoui_2f64_to_2i16:2479; AVX:       # %bb.0:2480; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm02481; AVX-NEXT:    vpackusdw %xmm0, %xmm0, %xmm02482; AVX-NEXT:    retq2483  %cvt = fptoui <2 x double> %a to <2 x i16>2484  ret <2 x i16> %cvt2485}2486 2487define <8 x i16> @fptosi_8f64_to_8i16(<8 x double> %a) {2488; SSE-LABEL: fptosi_8f64_to_8i16:2489; SSE:       # %bb.0:2490; SSE-NEXT:    cvttpd2dq %xmm3, %xmm32491; SSE-NEXT:    cvttpd2dq %xmm2, %xmm22492; SSE-NEXT:    unpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]2493; SSE-NEXT:    cvttpd2dq %xmm1, %xmm12494; SSE-NEXT:    cvttpd2dq %xmm0, %xmm02495; SSE-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]2496; SSE-NEXT:    packssdw %xmm2, %xmm02497; SSE-NEXT:    retq2498;2499; VEX-LABEL: fptosi_8f64_to_8i16:2500; VEX:       # %bb.0:2501; VEX-NEXT:    vcvttpd2dq %ymm1, %xmm12502; VEX-NEXT:    vcvttpd2dq %ymm0, %xmm02503; VEX-NEXT:    vpackssdw %xmm1, %xmm0, %xmm02504; VEX-NEXT:    vzeroupper2505; VEX-NEXT:    retq2506;2507; AVX512F-LABEL: fptosi_8f64_to_8i16:2508; AVX512F:       # %bb.0:2509; AVX512F-NEXT:    vcvttpd2dq %zmm0, %ymm02510; AVX512F-NEXT:    vpmovdw %zmm0, %ymm02511; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02512; AVX512F-NEXT:    vzeroupper2513; AVX512F-NEXT:    retq2514;2515; AVX512VL-LABEL: fptosi_8f64_to_8i16:2516; AVX512VL:       # %bb.0:2517; AVX512VL-NEXT:    vcvttpd2dq %zmm0, %ymm02518; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm02519; AVX512VL-NEXT:    vzeroupper2520; AVX512VL-NEXT:    retq2521;2522; AVX512DQ-LABEL: fptosi_8f64_to_8i16:2523; AVX512DQ:       # %bb.0:2524; AVX512DQ-NEXT:    vcvttpd2dq %zmm0, %ymm02525; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm02526; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02527; AVX512DQ-NEXT:    vzeroupper2528; AVX512DQ-NEXT:    retq2529;2530; AVX512VLDQ-LABEL: fptosi_8f64_to_8i16:2531; AVX512VLDQ:       # %bb.0:2532; AVX512VLDQ-NEXT:    vcvttpd2dq %zmm0, %ymm02533; AVX512VLDQ-NEXT:    vpmovdw %ymm0, %xmm02534; AVX512VLDQ-NEXT:    vzeroupper2535; AVX512VLDQ-NEXT:    retq2536  %cvt = fptosi <8 x double> %a to <8 x i16>2537  ret <8 x i16> %cvt2538}2539 2540define <8 x i16> @fptoui_8f64_to_8i16(<8 x double> %a) {2541; SSE-LABEL: fptoui_8f64_to_8i16:2542; SSE:       # %bb.0:2543; SSE-NEXT:    cvttpd2dq %xmm3, %xmm32544; SSE-NEXT:    cvttpd2dq %xmm2, %xmm22545; SSE-NEXT:    unpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]2546; SSE-NEXT:    pslld $16, %xmm22547; SSE-NEXT:    psrad $16, %xmm22548; SSE-NEXT:    cvttpd2dq %xmm1, %xmm12549; SSE-NEXT:    cvttpd2dq %xmm0, %xmm02550; SSE-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]2551; SSE-NEXT:    pslld $16, %xmm02552; SSE-NEXT:    psrad $16, %xmm02553; SSE-NEXT:    packssdw %xmm2, %xmm02554; SSE-NEXT:    retq2555;2556; VEX-LABEL: fptoui_8f64_to_8i16:2557; VEX:       # %bb.0:2558; VEX-NEXT:    vcvttpd2dq %ymm1, %xmm12559; VEX-NEXT:    vcvttpd2dq %ymm0, %xmm02560; VEX-NEXT:    vpackusdw %xmm1, %xmm0, %xmm02561; VEX-NEXT:    vzeroupper2562; VEX-NEXT:    retq2563;2564; AVX512F-LABEL: fptoui_8f64_to_8i16:2565; AVX512F:       # %bb.0:2566; AVX512F-NEXT:    vcvttpd2dq %zmm0, %ymm02567; AVX512F-NEXT:    vpmovdw %zmm0, %ymm02568; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02569; AVX512F-NEXT:    vzeroupper2570; AVX512F-NEXT:    retq2571;2572; AVX512VL-LABEL: fptoui_8f64_to_8i16:2573; AVX512VL:       # %bb.0:2574; AVX512VL-NEXT:    vcvttpd2dq %zmm0, %ymm02575; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm02576; AVX512VL-NEXT:    vzeroupper2577; AVX512VL-NEXT:    retq2578;2579; AVX512DQ-LABEL: fptoui_8f64_to_8i16:2580; AVX512DQ:       # %bb.0:2581; AVX512DQ-NEXT:    vcvttpd2dq %zmm0, %ymm02582; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm02583; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02584; AVX512DQ-NEXT:    vzeroupper2585; AVX512DQ-NEXT:    retq2586;2587; AVX512VLDQ-LABEL: fptoui_8f64_to_8i16:2588; AVX512VLDQ:       # %bb.0:2589; AVX512VLDQ-NEXT:    vcvttpd2dq %zmm0, %ymm02590; AVX512VLDQ-NEXT:    vpmovdw %ymm0, %xmm02591; AVX512VLDQ-NEXT:    vzeroupper2592; AVX512VLDQ-NEXT:    retq2593  %cvt = fptoui <8 x double> %a to <8 x i16>2594  ret <8 x i16> %cvt2595}2596 2597define <16 x i8> @fptosi_16f32_to_16i8(<16 x float> %a) {2598; SSE-LABEL: fptosi_16f32_to_16i8:2599; SSE:       # %bb.0:2600; SSE-NEXT:    cvttps2dq %xmm3, %xmm32601; SSE-NEXT:    cvttps2dq %xmm2, %xmm22602; SSE-NEXT:    packssdw %xmm3, %xmm22603; SSE-NEXT:    cvttps2dq %xmm1, %xmm12604; SSE-NEXT:    cvttps2dq %xmm0, %xmm02605; SSE-NEXT:    packssdw %xmm1, %xmm02606; SSE-NEXT:    packsswb %xmm2, %xmm02607; SSE-NEXT:    retq2608;2609; AVX1-LABEL: fptosi_16f32_to_16i8:2610; AVX1:       # %bb.0:2611; AVX1-NEXT:    vcvttps2dq %ymm1, %ymm12612; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22613; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm12614; AVX1-NEXT:    vcvttps2dq %ymm0, %ymm02615; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22616; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm02617; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm02618; AVX1-NEXT:    vzeroupper2619; AVX1-NEXT:    retq2620;2621; AVX2-LABEL: fptosi_16f32_to_16i8:2622; AVX2:       # %bb.0:2623; AVX2-NEXT:    vcvttps2dq %ymm1, %ymm12624; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm22625; AVX2-NEXT:    vpackssdw %xmm2, %xmm1, %xmm12626; AVX2-NEXT:    vcvttps2dq %ymm0, %ymm02627; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm22628; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm02629; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm02630; AVX2-NEXT:    vzeroupper2631; AVX2-NEXT:    retq2632;2633; AVX512-LABEL: fptosi_16f32_to_16i8:2634; AVX512:       # %bb.0:2635; AVX512-NEXT:    vcvttps2dq %zmm0, %zmm02636; AVX512-NEXT:    vpmovdb %zmm0, %xmm02637; AVX512-NEXT:    vzeroupper2638; AVX512-NEXT:    retq2639  %cvt = fptosi <16 x float> %a to <16 x i8>2640  ret <16 x i8> %cvt2641}2642 2643define <16 x i8> @fptoui_16f32_to_16i8(<16 x float> %a) {2644; SSE-LABEL: fptoui_16f32_to_16i8:2645; SSE:       # %bb.0:2646; SSE-NEXT:    cvttps2dq %xmm3, %xmm32647; SSE-NEXT:    cvttps2dq %xmm2, %xmm22648; SSE-NEXT:    packssdw %xmm3, %xmm22649; SSE-NEXT:    cvttps2dq %xmm1, %xmm12650; SSE-NEXT:    cvttps2dq %xmm0, %xmm02651; SSE-NEXT:    packssdw %xmm1, %xmm02652; SSE-NEXT:    packuswb %xmm2, %xmm02653; SSE-NEXT:    retq2654;2655; AVX1-LABEL: fptoui_16f32_to_16i8:2656; AVX1:       # %bb.0:2657; AVX1-NEXT:    vcvttps2dq %ymm1, %ymm12658; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22659; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm12660; AVX1-NEXT:    vcvttps2dq %ymm0, %ymm02661; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22662; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm02663; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm02664; AVX1-NEXT:    vzeroupper2665; AVX1-NEXT:    retq2666;2667; AVX2-LABEL: fptoui_16f32_to_16i8:2668; AVX2:       # %bb.0:2669; AVX2-NEXT:    vcvttps2dq %ymm1, %ymm12670; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm22671; AVX2-NEXT:    vpackssdw %xmm2, %xmm1, %xmm12672; AVX2-NEXT:    vcvttps2dq %ymm0, %ymm02673; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm22674; AVX2-NEXT:    vpackssdw %xmm2, %xmm0, %xmm02675; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm02676; AVX2-NEXT:    vzeroupper2677; AVX2-NEXT:    retq2678;2679; AVX512-LABEL: fptoui_16f32_to_16i8:2680; AVX512:       # %bb.0:2681; AVX512-NEXT:    vcvttps2dq %zmm0, %zmm02682; AVX512-NEXT:    vpmovdb %zmm0, %xmm02683; AVX512-NEXT:    vzeroupper2684; AVX512-NEXT:    retq2685  %cvt = fptoui <16 x float> %a to <16 x i8>2686  ret <16 x i8> %cvt2687}2688 2689define <2 x i64> @fptosi_2f32_to_2i64_load(ptr %x) {2690; SSE-LABEL: fptosi_2f32_to_2i64_load:2691; SSE:       # %bb.0:2692; SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero2693; SSE-NEXT:    cvttss2si %xmm1, %rax2694; SSE-NEXT:    movq %rax, %xmm02695; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]2696; SSE-NEXT:    cvttss2si %xmm1, %rax2697; SSE-NEXT:    movq %rax, %xmm12698; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2699; SSE-NEXT:    retq2700;2701; VEX-LABEL: fptosi_2f32_to_2i64_load:2702; VEX:       # %bb.0:2703; VEX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2704; VEX-NEXT:    vcvttss2si %xmm0, %rax2705; VEX-NEXT:    vmovq %rax, %xmm12706; VEX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2707; VEX-NEXT:    vcvttss2si %xmm0, %rax2708; VEX-NEXT:    vmovq %rax, %xmm02709; VEX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]2710; VEX-NEXT:    retq2711;2712; AVX512F-LABEL: fptosi_2f32_to_2i64_load:2713; AVX512F:       # %bb.0:2714; AVX512F-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2715; AVX512F-NEXT:    vcvttss2si %xmm0, %rax2716; AVX512F-NEXT:    vmovq %rax, %xmm12717; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2718; AVX512F-NEXT:    vcvttss2si %xmm0, %rax2719; AVX512F-NEXT:    vmovq %rax, %xmm02720; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]2721; AVX512F-NEXT:    retq2722;2723; AVX512VL-LABEL: fptosi_2f32_to_2i64_load:2724; AVX512VL:       # %bb.0:2725; AVX512VL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2726; AVX512VL-NEXT:    vcvttss2si %xmm0, %rax2727; AVX512VL-NEXT:    vmovq %rax, %xmm12728; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2729; AVX512VL-NEXT:    vcvttss2si %xmm0, %rax2730; AVX512VL-NEXT:    vmovq %rax, %xmm02731; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]2732; AVX512VL-NEXT:    retq2733;2734; AVX512DQ-LABEL: fptosi_2f32_to_2i64_load:2735; AVX512DQ:       # %bb.0:2736; AVX512DQ-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2737; AVX512DQ-NEXT:    vcvttps2qq %ymm0, %zmm02738; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02739; AVX512DQ-NEXT:    vzeroupper2740; AVX512DQ-NEXT:    retq2741;2742; AVX512VLDQ-LABEL: fptosi_2f32_to_2i64_load:2743; AVX512VLDQ:       # %bb.0:2744; AVX512VLDQ-NEXT:    vcvttps2qq (%rdi), %xmm02745; AVX512VLDQ-NEXT:    retq2746  %a = load <2 x float>, ptr %x2747  %b = fptosi <2 x float> %a to <2 x i64>2748  ret <2 x i64> %b2749}2750 2751define <2 x i64> @fptoui_2f32_to_2i64_load(ptr %x) {2752; SSE-LABEL: fptoui_2f32_to_2i64_load:2753; SSE:       # %bb.0:2754; SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero2755; SSE-NEXT:    movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]2756; SSE-NEXT:    movaps %xmm1, %xmm02757; SSE-NEXT:    subss %xmm2, %xmm02758; SSE-NEXT:    cvttss2si %xmm0, %rax2759; SSE-NEXT:    cvttss2si %xmm1, %rcx2760; SSE-NEXT:    movq %rcx, %rdx2761; SSE-NEXT:    sarq $63, %rdx2762; SSE-NEXT:    andq %rax, %rdx2763; SSE-NEXT:    orq %rcx, %rdx2764; SSE-NEXT:    movq %rdx, %xmm02765; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]2766; SSE-NEXT:    cvttss2si %xmm1, %rax2767; SSE-NEXT:    subss %xmm2, %xmm12768; SSE-NEXT:    cvttss2si %xmm1, %rcx2769; SSE-NEXT:    movq %rax, %rdx2770; SSE-NEXT:    sarq $63, %rdx2771; SSE-NEXT:    andq %rcx, %rdx2772; SSE-NEXT:    orq %rax, %rdx2773; SSE-NEXT:    movq %rdx, %xmm12774; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]2775; SSE-NEXT:    retq2776;2777; VEX-LABEL: fptoui_2f32_to_2i64_load:2778; VEX:       # %bb.0:2779; VEX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2780; VEX-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]2781; VEX-NEXT:    vsubss %xmm1, %xmm0, %xmm22782; VEX-NEXT:    vcvttss2si %xmm2, %rax2783; VEX-NEXT:    vcvttss2si %xmm0, %rcx2784; VEX-NEXT:    movq %rcx, %rdx2785; VEX-NEXT:    sarq $63, %rdx2786; VEX-NEXT:    andq %rax, %rdx2787; VEX-NEXT:    orq %rcx, %rdx2788; VEX-NEXT:    vmovq %rdx, %xmm22789; VEX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2790; VEX-NEXT:    vsubss %xmm1, %xmm0, %xmm12791; VEX-NEXT:    vcvttss2si %xmm1, %rax2792; VEX-NEXT:    vcvttss2si %xmm0, %rcx2793; VEX-NEXT:    movq %rcx, %rdx2794; VEX-NEXT:    sarq $63, %rdx2795; VEX-NEXT:    andq %rax, %rdx2796; VEX-NEXT:    orq %rcx, %rdx2797; VEX-NEXT:    vmovq %rdx, %xmm02798; VEX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]2799; VEX-NEXT:    retq2800;2801; AVX512F-LABEL: fptoui_2f32_to_2i64_load:2802; AVX512F:       # %bb.0:2803; AVX512F-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2804; AVX512F-NEXT:    vcvttss2usi %xmm0, %rax2805; AVX512F-NEXT:    vmovq %rax, %xmm12806; AVX512F-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2807; AVX512F-NEXT:    vcvttss2usi %xmm0, %rax2808; AVX512F-NEXT:    vmovq %rax, %xmm02809; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]2810; AVX512F-NEXT:    retq2811;2812; AVX512VL-LABEL: fptoui_2f32_to_2i64_load:2813; AVX512VL:       # %bb.0:2814; AVX512VL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2815; AVX512VL-NEXT:    vcvttss2usi %xmm0, %rax2816; AVX512VL-NEXT:    vmovq %rax, %xmm12817; AVX512VL-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2818; AVX512VL-NEXT:    vcvttss2usi %xmm0, %rax2819; AVX512VL-NEXT:    vmovq %rax, %xmm02820; AVX512VL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]2821; AVX512VL-NEXT:    retq2822;2823; AVX512DQ-LABEL: fptoui_2f32_to_2i64_load:2824; AVX512DQ:       # %bb.0:2825; AVX512DQ-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2826; AVX512DQ-NEXT:    vcvttps2uqq %ymm0, %zmm02827; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02828; AVX512DQ-NEXT:    vzeroupper2829; AVX512DQ-NEXT:    retq2830;2831; AVX512VLDQ-LABEL: fptoui_2f32_to_2i64_load:2832; AVX512VLDQ:       # %bb.0:2833; AVX512VLDQ-NEXT:    vcvttps2uqq (%rdi), %xmm02834; AVX512VLDQ-NEXT:    retq2835  %a = load <2 x float>, ptr %x2836  %b = fptoui <2 x float> %a to <2 x i64>2837  ret <2 x i64> %b2838}2839