brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.2 KiB · 131e279 Raw
533 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-- -mattr=+sse2    | FileCheck %s --check-prefixes=SSE3; RUN: llc < %s -mtriple=i686-- -mattr=+avx     | FileCheck %s --check-prefixes=AVX4; RUN: llc < %s -mtriple=i686-- -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=AVX5125 6define zeroext i8 @oeq_f64_i32(double %x) nounwind readnone {7; SSE-LABEL: oeq_f64_i32:8; SSE:       # %bb.0: # %entry9; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero10; SSE-NEXT:    cvttpd2dq %xmm0, %xmm111; SSE-NEXT:    cvtdq2pd %xmm1, %xmm112; SSE-NEXT:    cmpeqsd %xmm0, %xmm113; SSE-NEXT:    movd %xmm1, %eax14; SSE-NEXT:    andl $1, %eax15; SSE-NEXT:    # kill: def $al killed $al killed $eax16; SSE-NEXT:    retl17;18; AVX-LABEL: oeq_f64_i32:19; AVX:       # %bb.0: # %entry20; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero21; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm122; AVX-NEXT:    vcvtdq2pd %xmm1, %xmm123; AVX-NEXT:    vcmpeqsd %xmm0, %xmm1, %xmm024; AVX-NEXT:    vmovd %xmm0, %eax25; AVX-NEXT:    andl $1, %eax26; AVX-NEXT:    # kill: def $al killed $al killed $eax27; AVX-NEXT:    retl28;29; AVX512-LABEL: oeq_f64_i32:30; AVX512:       # %bb.0: # %entry31; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero32; AVX512-NEXT:    vcvttpd2dq %xmm0, %xmm133; AVX512-NEXT:    vcvtdq2pd %xmm1, %xmm134; AVX512-NEXT:    vcmpeqsd %xmm0, %xmm1, %k035; AVX512-NEXT:    kmovd %k0, %eax36; AVX512-NEXT:    # kill: def $al killed $al killed $eax37; AVX512-NEXT:    retl38entry:39	%0 = fptosi double %x to i3240	%1 = sitofp i32 %0 to double41	%2 = fcmp oeq double %1, %x42	%retval12 = zext i1 %2 to i843	ret i8 %retval1244}45 46define zeroext i8 @oeq_f64_u32(double %x) nounwind readnone {47; SSE-LABEL: oeq_f64_u32:48; SSE:       # %bb.0: # %entry49; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero50; SSE-NEXT:    cvttsd2si %xmm0, %eax51; SSE-NEXT:    movl %eax, %ecx52; SSE-NEXT:    sarl $31, %ecx53; SSE-NEXT:    movapd %xmm0, %xmm154; SSE-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm155; SSE-NEXT:    cvttsd2si %xmm1, %edx56; SSE-NEXT:    andl %ecx, %edx57; SSE-NEXT:    orl %eax, %edx58; SSE-NEXT:    movd %edx, %xmm159; SSE-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}, %xmm160; SSE-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm161; SSE-NEXT:    cmpeqsd %xmm0, %xmm162; SSE-NEXT:    movd %xmm1, %eax63; SSE-NEXT:    andl $1, %eax64; SSE-NEXT:    # kill: def $al killed $al killed $eax65; SSE-NEXT:    retl66;67; AVX-LABEL: oeq_f64_u32:68; AVX:       # %bb.0: # %entry69; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero70; AVX-NEXT:    vcvttsd2si %xmm0, %eax71; AVX-NEXT:    movl %eax, %ecx72; AVX-NEXT:    sarl $31, %ecx73; AVX-NEXT:    vsubsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm174; AVX-NEXT:    vcvttsd2si %xmm1, %edx75; AVX-NEXT:    andl %ecx, %edx76; AVX-NEXT:    orl %eax, %edx77; AVX-NEXT:    vmovd %edx, %xmm178; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm179; AVX-NEXT:    vsubsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm180; AVX-NEXT:    vcmpeqsd %xmm0, %xmm1, %xmm081; AVX-NEXT:    vmovd %xmm0, %eax82; AVX-NEXT:    andl $1, %eax83; AVX-NEXT:    # kill: def $al killed $al killed $eax84; AVX-NEXT:    retl85;86; AVX512-LABEL: oeq_f64_u32:87; AVX512:       # %bb.0: # %entry88; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero89; AVX512-NEXT:    vcvttsd2usi %xmm0, %eax90; AVX512-NEXT:    vcvtusi2sd %eax, %xmm7, %xmm191; AVX512-NEXT:    vcmpeqsd %xmm0, %xmm1, %k092; AVX512-NEXT:    kmovd %k0, %eax93; AVX512-NEXT:    # kill: def $al killed $al killed $eax94; AVX512-NEXT:    retl95entry:96	%0 = fptoui double %x to i3297	%1 = uitofp i32 %0 to double98	%2 = fcmp oeq double %1, %x99	%retval12 = zext i1 %2 to i8100	ret i8 %retval12101}102 103define zeroext i8 @oeq_f64_i64(double %x) nounwind readnone {104; SSE-LABEL: oeq_f64_i64:105; SSE:       # %bb.0: # %entry106; SSE-NEXT:    pushl %ebp107; SSE-NEXT:    movl %esp, %ebp108; SSE-NEXT:    andl $-8, %esp109; SSE-NEXT:    subl $32, %esp110; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero111; SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)112; SSE-NEXT:    fldl {{[0-9]+}}(%esp)113; SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)114; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax115; SSE-NEXT:    orl $3072, %eax # imm = 0xC00116; SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)117; SSE-NEXT:    fldcw {{[0-9]+}}(%esp)118; SSE-NEXT:    fistpll {{[0-9]+}}(%esp)119; SSE-NEXT:    fldcw {{[0-9]+}}(%esp)120; SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero121; SSE-NEXT:    movlps %xmm1, {{[0-9]+}}(%esp)122; SSE-NEXT:    fildll {{[0-9]+}}(%esp)123; SSE-NEXT:    fstpl {{[0-9]+}}(%esp)124; SSE-NEXT:    cmpeqsd {{[0-9]+}}(%esp), %xmm0125; SSE-NEXT:    movd %xmm0, %eax126; SSE-NEXT:    andl $1, %eax127; SSE-NEXT:    # kill: def $al killed $al killed $eax128; SSE-NEXT:    movl %ebp, %esp129; SSE-NEXT:    popl %ebp130; SSE-NEXT:    retl131;132; AVX-LABEL: oeq_f64_i64:133; AVX:       # %bb.0: # %entry134; AVX-NEXT:    pushl %ebp135; AVX-NEXT:    movl %esp, %ebp136; AVX-NEXT:    andl $-8, %esp137; AVX-NEXT:    subl $24, %esp138; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero139; AVX-NEXT:    vmovsd %xmm0, (%esp)140; AVX-NEXT:    fldl (%esp)141; AVX-NEXT:    fisttpll (%esp)142; AVX-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero143; AVX-NEXT:    vmovlps %xmm1, {{[0-9]+}}(%esp)144; AVX-NEXT:    fildll {{[0-9]+}}(%esp)145; AVX-NEXT:    fstpl {{[0-9]+}}(%esp)146; AVX-NEXT:    vcmpeqsd {{[0-9]+}}(%esp), %xmm0, %xmm0147; AVX-NEXT:    vmovd %xmm0, %eax148; AVX-NEXT:    andl $1, %eax149; AVX-NEXT:    # kill: def $al killed $al killed $eax150; AVX-NEXT:    movl %ebp, %esp151; AVX-NEXT:    popl %ebp152; AVX-NEXT:    retl153;154; AVX512-LABEL: oeq_f64_i64:155; AVX512:       # %bb.0: # %entry156; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero157; AVX512-NEXT:    vcvttpd2qq %xmm0, %xmm1158; AVX512-NEXT:    vcvtqq2pd %ymm1, %ymm1159; AVX512-NEXT:    vcmpeqsd %xmm0, %xmm1, %k0160; AVX512-NEXT:    kmovd %k0, %eax161; AVX512-NEXT:    # kill: def $al killed $al killed $eax162; AVX512-NEXT:    vzeroupper163; AVX512-NEXT:    retl164entry:165	%0 = fptosi double %x to i64166	%1 = sitofp i64 %0 to double167	%2 = fcmp oeq double %1, %x168	%retval12 = zext i1 %2 to i8169	ret i8 %retval12170}171 172define zeroext i8 @oeq_f64_u64(double %x) nounwind readnone {173; SSE-LABEL: oeq_f64_u64:174; SSE:       # %bb.0: # %entry175; SSE-NEXT:    pushl %ebp176; SSE-NEXT:    movl %esp, %ebp177; SSE-NEXT:    andl $-8, %esp178; SSE-NEXT:    subl $16, %esp179; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero180; SSE-NEXT:    movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]181; SSE-NEXT:    ucomisd %xmm0, %xmm1182; SSE-NEXT:    jbe .LBB3_2183; SSE-NEXT:  # %bb.1: # %entry184; SSE-NEXT:    xorpd %xmm1, %xmm1185; SSE-NEXT:  .LBB3_2: # %entry186; SSE-NEXT:    movapd %xmm0, %xmm2187; SSE-NEXT:    subsd %xmm1, %xmm2188; SSE-NEXT:    movsd %xmm2, {{[0-9]+}}(%esp)189; SSE-NEXT:    setbe %al190; SSE-NEXT:    fldl {{[0-9]+}}(%esp)191; SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)192; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx193; SSE-NEXT:    orl $3072, %ecx # imm = 0xC00194; SSE-NEXT:    movw %cx, {{[0-9]+}}(%esp)195; SSE-NEXT:    fldcw {{[0-9]+}}(%esp)196; SSE-NEXT:    fistpll {{[0-9]+}}(%esp)197; SSE-NEXT:    fldcw {{[0-9]+}}(%esp)198; SSE-NEXT:    movzbl %al, %eax199; SSE-NEXT:    shll $31, %eax200; SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax201; SSE-NEXT:    movd %eax, %xmm1202; SSE-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero203; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]204; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[1],mem[1]205; SSE-NEXT:    subpd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm2206; SSE-NEXT:    movapd %xmm2, %xmm1207; SSE-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm2[1]208; SSE-NEXT:    addsd %xmm2, %xmm1209; SSE-NEXT:    cmpeqsd %xmm0, %xmm1210; SSE-NEXT:    movd %xmm1, %eax211; SSE-NEXT:    andl $1, %eax212; SSE-NEXT:    # kill: def $al killed $al killed $eax213; SSE-NEXT:    movl %ebp, %esp214; SSE-NEXT:    popl %ebp215; SSE-NEXT:    retl216;217; AVX-LABEL: oeq_f64_u64:218; AVX:       # %bb.0: # %entry219; AVX-NEXT:    pushl %ebp220; AVX-NEXT:    movl %esp, %ebp221; AVX-NEXT:    andl $-8, %esp222; AVX-NEXT:    subl $8, %esp223; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero224; AVX-NEXT:    vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]225; AVX-NEXT:    vucomisd %xmm0, %xmm1226; AVX-NEXT:    jbe .LBB3_2227; AVX-NEXT:  # %bb.1: # %entry228; AVX-NEXT:    vxorpd %xmm1, %xmm1, %xmm1229; AVX-NEXT:  .LBB3_2: # %entry230; AVX-NEXT:    vsubsd %xmm1, %xmm0, %xmm1231; AVX-NEXT:    vmovsd %xmm1, (%esp)232; AVX-NEXT:    fldl (%esp)233; AVX-NEXT:    fisttpll (%esp)234; AVX-NEXT:    setbe %al235; AVX-NEXT:    movzbl %al, %eax236; AVX-NEXT:    shll $31, %eax237; AVX-NEXT:    xorl {{[0-9]+}}(%esp), %eax238; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero239; AVX-NEXT:    vpinsrd $1, %eax, %xmm1, %xmm1240; AVX-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]241; AVX-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1242; AVX-NEXT:    vshufpd {{.*#+}} xmm2 = xmm1[1,0]243; AVX-NEXT:    vaddsd %xmm1, %xmm2, %xmm1244; AVX-NEXT:    vcmpeqsd %xmm0, %xmm1, %xmm0245; AVX-NEXT:    vmovd %xmm0, %eax246; AVX-NEXT:    andl $1, %eax247; AVX-NEXT:    # kill: def $al killed $al killed $eax248; AVX-NEXT:    movl %ebp, %esp249; AVX-NEXT:    popl %ebp250; AVX-NEXT:    retl251;252; AVX512-LABEL: oeq_f64_u64:253; AVX512:       # %bb.0: # %entry254; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero255; AVX512-NEXT:    vcvttpd2uqq %xmm0, %xmm1256; AVX512-NEXT:    vcvtuqq2pd %ymm1, %ymm1257; AVX512-NEXT:    vcmpeqsd %xmm0, %xmm1, %k0258; AVX512-NEXT:    kmovd %k0, %eax259; AVX512-NEXT:    # kill: def $al killed $al killed $eax260; AVX512-NEXT:    vzeroupper261; AVX512-NEXT:    retl262entry:263	%0 = fptoui double %x to i64264	%1 = uitofp i64 %0 to double265	%2 = fcmp oeq double %1, %x266	%retval12 = zext i1 %2 to i8267	ret i8 %retval12268}269 270define zeroext i8 @une_f64_i32(double %x) nounwind readnone {271; SSE-LABEL: une_f64_i32:272; SSE:       # %bb.0: # %entry273; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero274; SSE-NEXT:    cvttpd2dq %xmm0, %xmm1275; SSE-NEXT:    cvtdq2pd %xmm1, %xmm1276; SSE-NEXT:    cmpneqsd %xmm0, %xmm1277; SSE-NEXT:    movd %xmm1, %eax278; SSE-NEXT:    andl $1, %eax279; SSE-NEXT:    # kill: def $al killed $al killed $eax280; SSE-NEXT:    retl281;282; AVX-LABEL: une_f64_i32:283; AVX:       # %bb.0: # %entry284; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero285; AVX-NEXT:    vcvttpd2dq %xmm0, %xmm1286; AVX-NEXT:    vcvtdq2pd %xmm1, %xmm1287; AVX-NEXT:    vcmpneqsd %xmm0, %xmm1, %xmm0288; AVX-NEXT:    vmovd %xmm0, %eax289; AVX-NEXT:    andl $1, %eax290; AVX-NEXT:    # kill: def $al killed $al killed $eax291; AVX-NEXT:    retl292;293; AVX512-LABEL: une_f64_i32:294; AVX512:       # %bb.0: # %entry295; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero296; AVX512-NEXT:    vcvttpd2dq %xmm0, %xmm1297; AVX512-NEXT:    vcvtdq2pd %xmm1, %xmm1298; AVX512-NEXT:    vcmpneqsd %xmm0, %xmm1, %k0299; AVX512-NEXT:    kmovd %k0, %eax300; AVX512-NEXT:    # kill: def $al killed $al killed $eax301; AVX512-NEXT:    retl302entry:303	%0 = fptosi double %x to i32304	%1 = sitofp i32 %0 to double305	%2 = fcmp une double %1, %x306	%retval12 = zext i1 %2 to i8307	ret i8 %retval12308}309 310define zeroext i8 @une_f64_u32(double %x) nounwind readnone {311; SSE-LABEL: une_f64_u32:312; SSE:       # %bb.0: # %entry313; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero314; SSE-NEXT:    cvttsd2si %xmm0, %eax315; SSE-NEXT:    movl %eax, %ecx316; SSE-NEXT:    sarl $31, %ecx317; SSE-NEXT:    movapd %xmm0, %xmm1318; SSE-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1319; SSE-NEXT:    cvttsd2si %xmm1, %edx320; SSE-NEXT:    andl %ecx, %edx321; SSE-NEXT:    orl %eax, %edx322; SSE-NEXT:    movd %edx, %xmm1323; SSE-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1324; SSE-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1325; SSE-NEXT:    cmpneqsd %xmm0, %xmm1326; SSE-NEXT:    movd %xmm1, %eax327; SSE-NEXT:    andl $1, %eax328; SSE-NEXT:    # kill: def $al killed $al killed $eax329; SSE-NEXT:    retl330;331; AVX-LABEL: une_f64_u32:332; AVX:       # %bb.0: # %entry333; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero334; AVX-NEXT:    vcvttsd2si %xmm0, %eax335; AVX-NEXT:    movl %eax, %ecx336; AVX-NEXT:    sarl $31, %ecx337; AVX-NEXT:    vsubsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm1338; AVX-NEXT:    vcvttsd2si %xmm1, %edx339; AVX-NEXT:    andl %ecx, %edx340; AVX-NEXT:    orl %eax, %edx341; AVX-NEXT:    vmovd %edx, %xmm1342; AVX-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1343; AVX-NEXT:    vsubsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1344; AVX-NEXT:    vcmpneqsd %xmm0, %xmm1, %xmm0345; AVX-NEXT:    vmovd %xmm0, %eax346; AVX-NEXT:    andl $1, %eax347; AVX-NEXT:    # kill: def $al killed $al killed $eax348; AVX-NEXT:    retl349;350; AVX512-LABEL: une_f64_u32:351; AVX512:       # %bb.0: # %entry352; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero353; AVX512-NEXT:    vcvttsd2usi %xmm0, %eax354; AVX512-NEXT:    vcvtusi2sd %eax, %xmm7, %xmm1355; AVX512-NEXT:    vcmpneqsd %xmm0, %xmm1, %k0356; AVX512-NEXT:    kmovd %k0, %eax357; AVX512-NEXT:    # kill: def $al killed $al killed $eax358; AVX512-NEXT:    retl359entry:360	%0 = fptoui double %x to i32361	%1 = uitofp i32 %0 to double362	%2 = fcmp une double %1, %x363	%retval12 = zext i1 %2 to i8364	ret i8 %retval12365}366 367define zeroext i8 @une_f64_i64(double %x) nounwind readnone {368; SSE-LABEL: une_f64_i64:369; SSE:       # %bb.0: # %entry370; SSE-NEXT:    pushl %ebp371; SSE-NEXT:    movl %esp, %ebp372; SSE-NEXT:    andl $-8, %esp373; SSE-NEXT:    subl $32, %esp374; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero375; SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)376; SSE-NEXT:    fldl {{[0-9]+}}(%esp)377; SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)378; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax379; SSE-NEXT:    orl $3072, %eax # imm = 0xC00380; SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)381; SSE-NEXT:    fldcw {{[0-9]+}}(%esp)382; SSE-NEXT:    fistpll {{[0-9]+}}(%esp)383; SSE-NEXT:    fldcw {{[0-9]+}}(%esp)384; SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero385; SSE-NEXT:    movlps %xmm1, {{[0-9]+}}(%esp)386; SSE-NEXT:    fildll {{[0-9]+}}(%esp)387; SSE-NEXT:    fstpl {{[0-9]+}}(%esp)388; SSE-NEXT:    cmpneqsd {{[0-9]+}}(%esp), %xmm0389; SSE-NEXT:    movd %xmm0, %eax390; SSE-NEXT:    andl $1, %eax391; SSE-NEXT:    # kill: def $al killed $al killed $eax392; SSE-NEXT:    movl %ebp, %esp393; SSE-NEXT:    popl %ebp394; SSE-NEXT:    retl395;396; AVX-LABEL: une_f64_i64:397; AVX:       # %bb.0: # %entry398; AVX-NEXT:    pushl %ebp399; AVX-NEXT:    movl %esp, %ebp400; AVX-NEXT:    andl $-8, %esp401; AVX-NEXT:    subl $24, %esp402; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero403; AVX-NEXT:    vmovsd %xmm0, (%esp)404; AVX-NEXT:    fldl (%esp)405; AVX-NEXT:    fisttpll (%esp)406; AVX-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero407; AVX-NEXT:    vmovlps %xmm1, {{[0-9]+}}(%esp)408; AVX-NEXT:    fildll {{[0-9]+}}(%esp)409; AVX-NEXT:    fstpl {{[0-9]+}}(%esp)410; AVX-NEXT:    vcmpneqsd {{[0-9]+}}(%esp), %xmm0, %xmm0411; AVX-NEXT:    vmovd %xmm0, %eax412; AVX-NEXT:    andl $1, %eax413; AVX-NEXT:    # kill: def $al killed $al killed $eax414; AVX-NEXT:    movl %ebp, %esp415; AVX-NEXT:    popl %ebp416; AVX-NEXT:    retl417;418; AVX512-LABEL: une_f64_i64:419; AVX512:       # %bb.0: # %entry420; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero421; AVX512-NEXT:    vcvttpd2qq %xmm0, %xmm1422; AVX512-NEXT:    vcvtqq2pd %ymm1, %ymm1423; AVX512-NEXT:    vcmpneqsd %xmm0, %xmm1, %k0424; AVX512-NEXT:    kmovd %k0, %eax425; AVX512-NEXT:    # kill: def $al killed $al killed $eax426; AVX512-NEXT:    vzeroupper427; AVX512-NEXT:    retl428entry:429	%0 = fptosi double %x to i64430	%1 = sitofp i64 %0 to double431	%2 = fcmp une double %1, %x432	%retval12 = zext i1 %2 to i8433	ret i8 %retval12434}435 436define zeroext i8 @une_f64_u64(double %x) nounwind readnone {437; SSE-LABEL: une_f64_u64:438; SSE:       # %bb.0: # %entry439; SSE-NEXT:    pushl %ebp440; SSE-NEXT:    movl %esp, %ebp441; SSE-NEXT:    andl $-8, %esp442; SSE-NEXT:    subl $16, %esp443; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero444; SSE-NEXT:    movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]445; SSE-NEXT:    ucomisd %xmm0, %xmm1446; SSE-NEXT:    jbe .LBB7_2447; SSE-NEXT:  # %bb.1: # %entry448; SSE-NEXT:    xorpd %xmm1, %xmm1449; SSE-NEXT:  .LBB7_2: # %entry450; SSE-NEXT:    movapd %xmm0, %xmm2451; SSE-NEXT:    subsd %xmm1, %xmm2452; SSE-NEXT:    movsd %xmm2, {{[0-9]+}}(%esp)453; SSE-NEXT:    setbe %al454; SSE-NEXT:    fldl {{[0-9]+}}(%esp)455; SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)456; SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx457; SSE-NEXT:    orl $3072, %ecx # imm = 0xC00458; SSE-NEXT:    movw %cx, {{[0-9]+}}(%esp)459; SSE-NEXT:    fldcw {{[0-9]+}}(%esp)460; SSE-NEXT:    fistpll {{[0-9]+}}(%esp)461; SSE-NEXT:    fldcw {{[0-9]+}}(%esp)462; SSE-NEXT:    movzbl %al, %eax463; SSE-NEXT:    shll $31, %eax464; SSE-NEXT:    xorl {{[0-9]+}}(%esp), %eax465; SSE-NEXT:    movd %eax, %xmm1466; SSE-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero467; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]468; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[1],mem[1]469; SSE-NEXT:    subpd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm2470; SSE-NEXT:    movapd %xmm2, %xmm1471; SSE-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm2[1]472; SSE-NEXT:    addsd %xmm2, %xmm1473; SSE-NEXT:    cmpneqsd %xmm0, %xmm1474; SSE-NEXT:    movd %xmm1, %eax475; SSE-NEXT:    andl $1, %eax476; SSE-NEXT:    # kill: def $al killed $al killed $eax477; SSE-NEXT:    movl %ebp, %esp478; SSE-NEXT:    popl %ebp479; SSE-NEXT:    retl480;481; AVX-LABEL: une_f64_u64:482; AVX:       # %bb.0: # %entry483; AVX-NEXT:    pushl %ebp484; AVX-NEXT:    movl %esp, %ebp485; AVX-NEXT:    andl $-8, %esp486; AVX-NEXT:    subl $8, %esp487; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero488; AVX-NEXT:    vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]489; AVX-NEXT:    vucomisd %xmm0, %xmm1490; AVX-NEXT:    jbe .LBB7_2491; AVX-NEXT:  # %bb.1: # %entry492; AVX-NEXT:    vxorpd %xmm1, %xmm1, %xmm1493; AVX-NEXT:  .LBB7_2: # %entry494; AVX-NEXT:    vsubsd %xmm1, %xmm0, %xmm1495; AVX-NEXT:    vmovsd %xmm1, (%esp)496; AVX-NEXT:    fldl (%esp)497; AVX-NEXT:    fisttpll (%esp)498; AVX-NEXT:    setbe %al499; AVX-NEXT:    movzbl %al, %eax500; AVX-NEXT:    shll $31, %eax501; AVX-NEXT:    xorl {{[0-9]+}}(%esp), %eax502; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero503; AVX-NEXT:    vpinsrd $1, %eax, %xmm1, %xmm1504; AVX-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]505; AVX-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm1506; AVX-NEXT:    vshufpd {{.*#+}} xmm2 = xmm1[1,0]507; AVX-NEXT:    vaddsd %xmm1, %xmm2, %xmm1508; AVX-NEXT:    vcmpneqsd %xmm0, %xmm1, %xmm0509; AVX-NEXT:    vmovd %xmm0, %eax510; AVX-NEXT:    andl $1, %eax511; AVX-NEXT:    # kill: def $al killed $al killed $eax512; AVX-NEXT:    movl %ebp, %esp513; AVX-NEXT:    popl %ebp514; AVX-NEXT:    retl515;516; AVX512-LABEL: une_f64_u64:517; AVX512:       # %bb.0: # %entry518; AVX512-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero519; AVX512-NEXT:    vcvttpd2uqq %xmm0, %xmm1520; AVX512-NEXT:    vcvtuqq2pd %ymm1, %ymm1521; AVX512-NEXT:    vcmpneqsd %xmm0, %xmm1, %k0522; AVX512-NEXT:    kmovd %k0, %eax523; AVX512-NEXT:    # kill: def $al killed $al killed $eax524; AVX512-NEXT:    vzeroupper525; AVX512-NEXT:    retl526entry:527	%0 = fptoui double %x to i64528	%1 = uitofp i64 %0 to double529	%2 = fcmp une double %1, %x530	%retval12 = zext i1 %2 to i8531	ret i8 %retval12532}533