1360 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefixes=SSE-X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 -O3 | FileCheck %s --check-prefixes=SSE-X644; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=AVX-X86,AVX1-X865; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=AVX-X64,AVX1-X646; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=AVX-X86,AVX512-X867; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefixes=AVX-X64,AVX512-X648; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=-sse -O3 | FileCheck %s --check-prefixes=X879 10declare i1 @llvm.experimental.constrained.fptosi.i1.f32(float, metadata)11declare i8 @llvm.experimental.constrained.fptosi.i8.f32(float, metadata)12declare i16 @llvm.experimental.constrained.fptosi.i16.f32(float, metadata)13declare i32 @llvm.experimental.constrained.fptosi.i32.f32(float, metadata)14declare i64 @llvm.experimental.constrained.fptosi.i64.f32(float, metadata)15declare i1 @llvm.experimental.constrained.fptoui.i1.f32(float, metadata)16declare i8 @llvm.experimental.constrained.fptoui.i8.f32(float, metadata)17declare i16 @llvm.experimental.constrained.fptoui.i16.f32(float, metadata)18declare i32 @llvm.experimental.constrained.fptoui.i32.f32(float, metadata)19declare i64 @llvm.experimental.constrained.fptoui.i64.f32(float, metadata)20 21declare i1 @llvm.experimental.constrained.fptosi.i1.f64(double, metadata)22declare i8 @llvm.experimental.constrained.fptosi.i8.f64(double, metadata)23declare i16 @llvm.experimental.constrained.fptosi.i16.f64(double, metadata)24declare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)25declare i64 @llvm.experimental.constrained.fptosi.i64.f64(double, metadata)26declare i1 @llvm.experimental.constrained.fptoui.i1.f64(double, metadata)27declare i8 @llvm.experimental.constrained.fptoui.i8.f64(double, metadata)28declare i16 @llvm.experimental.constrained.fptoui.i16.f64(double, metadata)29declare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)30declare i64 @llvm.experimental.constrained.fptoui.i64.f64(double, metadata)31 32define i1 @fptosi_f32toi1(float %x) #0 {33; SSE-X86-LABEL: fptosi_f32toi1:34; SSE-X86: # %bb.0:35; SSE-X86-NEXT: cvttss2si {{[0-9]+}}(%esp), %eax36; SSE-X86-NEXT: # kill: def $al killed $al killed $eax37; SSE-X86-NEXT: retl38;39; SSE-X64-LABEL: fptosi_f32toi1:40; SSE-X64: # %bb.0:41; SSE-X64-NEXT: cvttss2si %xmm0, %eax42; SSE-X64-NEXT: # kill: def $al killed $al killed $eax43; SSE-X64-NEXT: retq44;45; AVX-X86-LABEL: fptosi_f32toi1:46; AVX-X86: # %bb.0:47; AVX-X86-NEXT: vcvttss2si {{[0-9]+}}(%esp), %eax48; AVX-X86-NEXT: # kill: def $al killed $al killed $eax49; AVX-X86-NEXT: retl50;51; AVX-X64-LABEL: fptosi_f32toi1:52; AVX-X64: # %bb.0:53; AVX-X64-NEXT: vcvttss2si %xmm0, %eax54; AVX-X64-NEXT: # kill: def $al killed $al killed $eax55; AVX-X64-NEXT: retq56;57; X87-LABEL: fptosi_f32toi1:58; X87: # %bb.0:59; X87-NEXT: subl $8, %esp60; X87-NEXT: .cfi_def_cfa_offset 1261; X87-NEXT: flds {{[0-9]+}}(%esp)62; X87-NEXT: wait63; X87-NEXT: fnstcw {{[0-9]+}}(%esp)64; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax65; X87-NEXT: orl $3072, %eax # imm = 0xC0066; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)67; X87-NEXT: fldcw {{[0-9]+}}(%esp)68; X87-NEXT: fistps {{[0-9]+}}(%esp)69; X87-NEXT: fldcw {{[0-9]+}}(%esp)70; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax71; X87-NEXT: addl $8, %esp72; X87-NEXT: .cfi_def_cfa_offset 473; X87-NEXT: retl74 %result = call i1 @llvm.experimental.constrained.fptosi.i1.f32(float %x,75 metadata !"fpexcept.strict") #076 ret i1 %result77}78 79define i8 @fptosi_f32toi8(float %x) #0 {80; SSE-X86-LABEL: fptosi_f32toi8:81; SSE-X86: # %bb.0:82; SSE-X86-NEXT: cvttss2si {{[0-9]+}}(%esp), %eax83; SSE-X86-NEXT: # kill: def $al killed $al killed $eax84; SSE-X86-NEXT: retl85;86; SSE-X64-LABEL: fptosi_f32toi8:87; SSE-X64: # %bb.0:88; SSE-X64-NEXT: cvttss2si %xmm0, %eax89; SSE-X64-NEXT: # kill: def $al killed $al killed $eax90; SSE-X64-NEXT: retq91;92; AVX-X86-LABEL: fptosi_f32toi8:93; AVX-X86: # %bb.0:94; AVX-X86-NEXT: vcvttss2si {{[0-9]+}}(%esp), %eax95; AVX-X86-NEXT: # kill: def $al killed $al killed $eax96; AVX-X86-NEXT: retl97;98; AVX-X64-LABEL: fptosi_f32toi8:99; AVX-X64: # %bb.0:100; AVX-X64-NEXT: vcvttss2si %xmm0, %eax101; AVX-X64-NEXT: # kill: def $al killed $al killed $eax102; AVX-X64-NEXT: retq103;104; X87-LABEL: fptosi_f32toi8:105; X87: # %bb.0:106; X87-NEXT: subl $8, %esp107; X87-NEXT: .cfi_def_cfa_offset 12108; X87-NEXT: flds {{[0-9]+}}(%esp)109; X87-NEXT: wait110; X87-NEXT: fnstcw {{[0-9]+}}(%esp)111; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax112; X87-NEXT: orl $3072, %eax # imm = 0xC00113; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)114; X87-NEXT: fldcw {{[0-9]+}}(%esp)115; X87-NEXT: fistps {{[0-9]+}}(%esp)116; X87-NEXT: fldcw {{[0-9]+}}(%esp)117; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax118; X87-NEXT: addl $8, %esp119; X87-NEXT: .cfi_def_cfa_offset 4120; X87-NEXT: retl121 %result = call i8 @llvm.experimental.constrained.fptosi.i8.f32(float %x,122 metadata !"fpexcept.strict") #0123 ret i8 %result124}125 126define i16 @fptosi_f32toi16(float %x) #0 {127; SSE-X86-LABEL: fptosi_f32toi16:128; SSE-X86: # %bb.0:129; SSE-X86-NEXT: cvttss2si {{[0-9]+}}(%esp), %eax130; SSE-X86-NEXT: # kill: def $ax killed $ax killed $eax131; SSE-X86-NEXT: retl132;133; SSE-X64-LABEL: fptosi_f32toi16:134; SSE-X64: # %bb.0:135; SSE-X64-NEXT: cvttss2si %xmm0, %eax136; SSE-X64-NEXT: # kill: def $ax killed $ax killed $eax137; SSE-X64-NEXT: retq138;139; AVX-X86-LABEL: fptosi_f32toi16:140; AVX-X86: # %bb.0:141; AVX-X86-NEXT: vcvttss2si {{[0-9]+}}(%esp), %eax142; AVX-X86-NEXT: # kill: def $ax killed $ax killed $eax143; AVX-X86-NEXT: retl144;145; AVX-X64-LABEL: fptosi_f32toi16:146; AVX-X64: # %bb.0:147; AVX-X64-NEXT: vcvttss2si %xmm0, %eax148; AVX-X64-NEXT: # kill: def $ax killed $ax killed $eax149; AVX-X64-NEXT: retq150;151; X87-LABEL: fptosi_f32toi16:152; X87: # %bb.0:153; X87-NEXT: subl $8, %esp154; X87-NEXT: .cfi_def_cfa_offset 12155; X87-NEXT: flds {{[0-9]+}}(%esp)156; X87-NEXT: wait157; X87-NEXT: fnstcw {{[0-9]+}}(%esp)158; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax159; X87-NEXT: orl $3072, %eax # imm = 0xC00160; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)161; X87-NEXT: fldcw {{[0-9]+}}(%esp)162; X87-NEXT: fistps {{[0-9]+}}(%esp)163; X87-NEXT: fldcw {{[0-9]+}}(%esp)164; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax165; X87-NEXT: addl $8, %esp166; X87-NEXT: .cfi_def_cfa_offset 4167; X87-NEXT: retl168 %result = call i16 @llvm.experimental.constrained.fptosi.i16.f32(float %x,169 metadata !"fpexcept.strict") #0170 ret i16 %result171}172 173define i32 @fptosi_f32toi32(float %x) #0 {174; SSE-X86-LABEL: fptosi_f32toi32:175; SSE-X86: # %bb.0:176; SSE-X86-NEXT: cvttss2si {{[0-9]+}}(%esp), %eax177; SSE-X86-NEXT: retl178;179; SSE-X64-LABEL: fptosi_f32toi32:180; SSE-X64: # %bb.0:181; SSE-X64-NEXT: cvttss2si %xmm0, %eax182; SSE-X64-NEXT: retq183;184; AVX-X86-LABEL: fptosi_f32toi32:185; AVX-X86: # %bb.0:186; AVX-X86-NEXT: vcvttss2si {{[0-9]+}}(%esp), %eax187; AVX-X86-NEXT: retl188;189; AVX-X64-LABEL: fptosi_f32toi32:190; AVX-X64: # %bb.0:191; AVX-X64-NEXT: vcvttss2si %xmm0, %eax192; AVX-X64-NEXT: retq193;194; X87-LABEL: fptosi_f32toi32:195; X87: # %bb.0:196; X87-NEXT: subl $8, %esp197; X87-NEXT: .cfi_def_cfa_offset 12198; X87-NEXT: flds {{[0-9]+}}(%esp)199; X87-NEXT: wait200; X87-NEXT: fnstcw (%esp)201; X87-NEXT: movzwl (%esp), %eax202; X87-NEXT: orl $3072, %eax # imm = 0xC00203; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)204; X87-NEXT: fldcw {{[0-9]+}}(%esp)205; X87-NEXT: fistpl {{[0-9]+}}(%esp)206; X87-NEXT: fldcw (%esp)207; X87-NEXT: movl {{[0-9]+}}(%esp), %eax208; X87-NEXT: addl $8, %esp209; X87-NEXT: .cfi_def_cfa_offset 4210; X87-NEXT: retl211 %result = call i32 @llvm.experimental.constrained.fptosi.i32.f32(float %x,212 metadata !"fpexcept.strict") #0213 ret i32 %result214}215 216define i64 @fptosi_f32toi64(float %x) #0 {217; SSE-X86-LABEL: fptosi_f32toi64:218; SSE-X86: # %bb.0:219; SSE-X86-NEXT: pushl %ebp220; SSE-X86-NEXT: .cfi_def_cfa_offset 8221; SSE-X86-NEXT: .cfi_offset %ebp, -8222; SSE-X86-NEXT: movl %esp, %ebp223; SSE-X86-NEXT: .cfi_def_cfa_register %ebp224; SSE-X86-NEXT: andl $-8, %esp225; SSE-X86-NEXT: subl $16, %esp226; SSE-X86-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero227; SSE-X86-NEXT: movss %xmm0, {{[0-9]+}}(%esp)228; SSE-X86-NEXT: flds {{[0-9]+}}(%esp)229; SSE-X86-NEXT: wait230; SSE-X86-NEXT: fnstcw {{[0-9]+}}(%esp)231; SSE-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax232; SSE-X86-NEXT: orl $3072, %eax # imm = 0xC00233; SSE-X86-NEXT: movw %ax, {{[0-9]+}}(%esp)234; SSE-X86-NEXT: fldcw {{[0-9]+}}(%esp)235; SSE-X86-NEXT: fistpll {{[0-9]+}}(%esp)236; SSE-X86-NEXT: fldcw {{[0-9]+}}(%esp)237; SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %eax238; SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %edx239; SSE-X86-NEXT: movl %ebp, %esp240; SSE-X86-NEXT: popl %ebp241; SSE-X86-NEXT: .cfi_def_cfa %esp, 4242; SSE-X86-NEXT: retl243;244; SSE-X64-LABEL: fptosi_f32toi64:245; SSE-X64: # %bb.0:246; SSE-X64-NEXT: cvttss2si %xmm0, %rax247; SSE-X64-NEXT: retq248;249; AVX-X86-LABEL: fptosi_f32toi64:250; AVX-X86: # %bb.0:251; AVX-X86-NEXT: pushl %ebp252; AVX-X86-NEXT: .cfi_def_cfa_offset 8253; AVX-X86-NEXT: .cfi_offset %ebp, -8254; AVX-X86-NEXT: movl %esp, %ebp255; AVX-X86-NEXT: .cfi_def_cfa_register %ebp256; AVX-X86-NEXT: andl $-8, %esp257; AVX-X86-NEXT: subl $8, %esp258; AVX-X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero259; AVX-X86-NEXT: vmovss %xmm0, (%esp)260; AVX-X86-NEXT: flds (%esp)261; AVX-X86-NEXT: fisttpll (%esp)262; AVX-X86-NEXT: wait263; AVX-X86-NEXT: movl (%esp), %eax264; AVX-X86-NEXT: movl {{[0-9]+}}(%esp), %edx265; AVX-X86-NEXT: movl %ebp, %esp266; AVX-X86-NEXT: popl %ebp267; AVX-X86-NEXT: .cfi_def_cfa %esp, 4268; AVX-X86-NEXT: retl269;270; AVX-X64-LABEL: fptosi_f32toi64:271; AVX-X64: # %bb.0:272; AVX-X64-NEXT: vcvttss2si %xmm0, %rax273; AVX-X64-NEXT: retq274;275; X87-LABEL: fptosi_f32toi64:276; X87: # %bb.0:277; X87-NEXT: pushl %ebp278; X87-NEXT: .cfi_def_cfa_offset 8279; X87-NEXT: .cfi_offset %ebp, -8280; X87-NEXT: movl %esp, %ebp281; X87-NEXT: .cfi_def_cfa_register %ebp282; X87-NEXT: andl $-8, %esp283; X87-NEXT: subl $16, %esp284; X87-NEXT: flds 8(%ebp)285; X87-NEXT: wait286; X87-NEXT: fnstcw {{[0-9]+}}(%esp)287; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax288; X87-NEXT: orl $3072, %eax # imm = 0xC00289; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)290; X87-NEXT: fldcw {{[0-9]+}}(%esp)291; X87-NEXT: fistpll {{[0-9]+}}(%esp)292; X87-NEXT: fldcw {{[0-9]+}}(%esp)293; X87-NEXT: movl {{[0-9]+}}(%esp), %eax294; X87-NEXT: movl {{[0-9]+}}(%esp), %edx295; X87-NEXT: movl %ebp, %esp296; X87-NEXT: popl %ebp297; X87-NEXT: .cfi_def_cfa %esp, 4298; X87-NEXT: retl299 %result = call i64 @llvm.experimental.constrained.fptosi.i64.f32(float %x,300 metadata !"fpexcept.strict") #0301 ret i64 %result302}303 304define i1 @fptoui_f32toi1(float %x) #0 {305; SSE-X86-LABEL: fptoui_f32toi1:306; SSE-X86: # %bb.0:307; SSE-X86-NEXT: cvttss2si {{[0-9]+}}(%esp), %eax308; SSE-X86-NEXT: # kill: def $al killed $al killed $eax309; SSE-X86-NEXT: retl310;311; SSE-X64-LABEL: fptoui_f32toi1:312; SSE-X64: # %bb.0:313; SSE-X64-NEXT: cvttss2si %xmm0, %eax314; SSE-X64-NEXT: # kill: def $al killed $al killed $eax315; SSE-X64-NEXT: retq316;317; AVX-X86-LABEL: fptoui_f32toi1:318; AVX-X86: # %bb.0:319; AVX-X86-NEXT: vcvttss2si {{[0-9]+}}(%esp), %eax320; AVX-X86-NEXT: # kill: def $al killed $al killed $eax321; AVX-X86-NEXT: retl322;323; AVX-X64-LABEL: fptoui_f32toi1:324; AVX-X64: # %bb.0:325; AVX-X64-NEXT: vcvttss2si %xmm0, %eax326; AVX-X64-NEXT: # kill: def $al killed $al killed $eax327; AVX-X64-NEXT: retq328;329; X87-LABEL: fptoui_f32toi1:330; X87: # %bb.0:331; X87-NEXT: subl $8, %esp332; X87-NEXT: .cfi_def_cfa_offset 12333; X87-NEXT: flds {{[0-9]+}}(%esp)334; X87-NEXT: wait335; X87-NEXT: fnstcw {{[0-9]+}}(%esp)336; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax337; X87-NEXT: orl $3072, %eax # imm = 0xC00338; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)339; X87-NEXT: fldcw {{[0-9]+}}(%esp)340; X87-NEXT: fistps {{[0-9]+}}(%esp)341; X87-NEXT: fldcw {{[0-9]+}}(%esp)342; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax343; X87-NEXT: addl $8, %esp344; X87-NEXT: .cfi_def_cfa_offset 4345; X87-NEXT: retl346 %result = call i1 @llvm.experimental.constrained.fptoui.i1.f32(float %x,347 metadata !"fpexcept.strict") #0348 ret i1 %result349}350 351define i8 @fptoui_f32toi8(float %x) #0 {352; SSE-X86-LABEL: fptoui_f32toi8:353; SSE-X86: # %bb.0:354; SSE-X86-NEXT: cvttss2si {{[0-9]+}}(%esp), %eax355; SSE-X86-NEXT: # kill: def $al killed $al killed $eax356; SSE-X86-NEXT: retl357;358; SSE-X64-LABEL: fptoui_f32toi8:359; SSE-X64: # %bb.0:360; SSE-X64-NEXT: cvttss2si %xmm0, %eax361; SSE-X64-NEXT: # kill: def $al killed $al killed $eax362; SSE-X64-NEXT: retq363;364; AVX-X86-LABEL: fptoui_f32toi8:365; AVX-X86: # %bb.0:366; AVX-X86-NEXT: vcvttss2si {{[0-9]+}}(%esp), %eax367; AVX-X86-NEXT: # kill: def $al killed $al killed $eax368; AVX-X86-NEXT: retl369;370; AVX-X64-LABEL: fptoui_f32toi8:371; AVX-X64: # %bb.0:372; AVX-X64-NEXT: vcvttss2si %xmm0, %eax373; AVX-X64-NEXT: # kill: def $al killed $al killed $eax374; AVX-X64-NEXT: retq375;376; X87-LABEL: fptoui_f32toi8:377; X87: # %bb.0:378; X87-NEXT: subl $8, %esp379; X87-NEXT: .cfi_def_cfa_offset 12380; X87-NEXT: flds {{[0-9]+}}(%esp)381; X87-NEXT: wait382; X87-NEXT: fnstcw {{[0-9]+}}(%esp)383; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax384; X87-NEXT: orl $3072, %eax # imm = 0xC00385; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)386; X87-NEXT: fldcw {{[0-9]+}}(%esp)387; X87-NEXT: fistps {{[0-9]+}}(%esp)388; X87-NEXT: fldcw {{[0-9]+}}(%esp)389; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax390; X87-NEXT: addl $8, %esp391; X87-NEXT: .cfi_def_cfa_offset 4392; X87-NEXT: retl393 %result = call i8 @llvm.experimental.constrained.fptoui.i8.f32(float %x,394 metadata !"fpexcept.strict") #0395 ret i8 %result396}397 398define i16 @fptoui_f32toi16(float %x) #0 {399; SSE-X86-LABEL: fptoui_f32toi16:400; SSE-X86: # %bb.0:401; SSE-X86-NEXT: cvttss2si {{[0-9]+}}(%esp), %eax402; SSE-X86-NEXT: # kill: def $ax killed $ax killed $eax403; SSE-X86-NEXT: retl404;405; SSE-X64-LABEL: fptoui_f32toi16:406; SSE-X64: # %bb.0:407; SSE-X64-NEXT: cvttss2si %xmm0, %eax408; SSE-X64-NEXT: # kill: def $ax killed $ax killed $eax409; SSE-X64-NEXT: retq410;411; AVX-X86-LABEL: fptoui_f32toi16:412; AVX-X86: # %bb.0:413; AVX-X86-NEXT: vcvttss2si {{[0-9]+}}(%esp), %eax414; AVX-X86-NEXT: # kill: def $ax killed $ax killed $eax415; AVX-X86-NEXT: retl416;417; AVX-X64-LABEL: fptoui_f32toi16:418; AVX-X64: # %bb.0:419; AVX-X64-NEXT: vcvttss2si %xmm0, %eax420; AVX-X64-NEXT: # kill: def $ax killed $ax killed $eax421; AVX-X64-NEXT: retq422;423; X87-LABEL: fptoui_f32toi16:424; X87: # %bb.0:425; X87-NEXT: subl $8, %esp426; X87-NEXT: .cfi_def_cfa_offset 12427; X87-NEXT: flds {{[0-9]+}}(%esp)428; X87-NEXT: wait429; X87-NEXT: fnstcw (%esp)430; X87-NEXT: movzwl (%esp), %eax431; X87-NEXT: orl $3072, %eax # imm = 0xC00432; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)433; X87-NEXT: fldcw {{[0-9]+}}(%esp)434; X87-NEXT: fistpl {{[0-9]+}}(%esp)435; X87-NEXT: fldcw (%esp)436; X87-NEXT: movl {{[0-9]+}}(%esp), %eax437; X87-NEXT: # kill: def $ax killed $ax killed $eax438; X87-NEXT: addl $8, %esp439; X87-NEXT: .cfi_def_cfa_offset 4440; X87-NEXT: retl441 %result = call i16 @llvm.experimental.constrained.fptoui.i16.f32(float %x,442 metadata !"fpexcept.strict") #0443 ret i16 %result444}445 446define i32 @fptoui_f32toi32(float %x) #0 {447; SSE-X86-LABEL: fptoui_f32toi32:448; SSE-X86: # %bb.0:449; SSE-X86-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero450; SSE-X86-NEXT: movss {{.*#+}} xmm2 = [2.14748365E+9,0.0E+0,0.0E+0,0.0E+0]451; SSE-X86-NEXT: comiss %xmm0, %xmm2452; SSE-X86-NEXT: xorps %xmm1, %xmm1453; SSE-X86-NEXT: ja .LBB8_2454; SSE-X86-NEXT: # %bb.1:455; SSE-X86-NEXT: movaps %xmm2, %xmm1456; SSE-X86-NEXT: .LBB8_2:457; SSE-X86-NEXT: setbe %al458; SSE-X86-NEXT: movzbl %al, %ecx459; SSE-X86-NEXT: shll $31, %ecx460; SSE-X86-NEXT: subss %xmm1, %xmm0461; SSE-X86-NEXT: cvttss2si %xmm0, %eax462; SSE-X86-NEXT: xorl %ecx, %eax463; SSE-X86-NEXT: retl464;465; SSE-X64-LABEL: fptoui_f32toi32:466; SSE-X64: # %bb.0:467; SSE-X64-NEXT: cvttss2si %xmm0, %rax468; SSE-X64-NEXT: # kill: def $eax killed $eax killed $rax469; SSE-X64-NEXT: retq470;471; AVX1-X86-LABEL: fptoui_f32toi32:472; AVX1-X86: # %bb.0:473; AVX1-X86-NEXT: pushl %ebp474; AVX1-X86-NEXT: .cfi_def_cfa_offset 8475; AVX1-X86-NEXT: .cfi_offset %ebp, -8476; AVX1-X86-NEXT: movl %esp, %ebp477; AVX1-X86-NEXT: .cfi_def_cfa_register %ebp478; AVX1-X86-NEXT: andl $-8, %esp479; AVX1-X86-NEXT: subl $8, %esp480; AVX1-X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero481; AVX1-X86-NEXT: vmovss %xmm0, (%esp)482; AVX1-X86-NEXT: flds (%esp)483; AVX1-X86-NEXT: fisttpll (%esp)484; AVX1-X86-NEXT: wait485; AVX1-X86-NEXT: movl (%esp), %eax486; AVX1-X86-NEXT: movl %ebp, %esp487; AVX1-X86-NEXT: popl %ebp488; AVX1-X86-NEXT: .cfi_def_cfa %esp, 4489; AVX1-X86-NEXT: retl490;491; AVX1-X64-LABEL: fptoui_f32toi32:492; AVX1-X64: # %bb.0:493; AVX1-X64-NEXT: vcvttss2si %xmm0, %rax494; AVX1-X64-NEXT: # kill: def $eax killed $eax killed $rax495; AVX1-X64-NEXT: retq496;497; AVX512-X86-LABEL: fptoui_f32toi32:498; AVX512-X86: # %bb.0:499; AVX512-X86-NEXT: vcvttss2usi {{[0-9]+}}(%esp), %eax500; AVX512-X86-NEXT: retl501;502; AVX512-X64-LABEL: fptoui_f32toi32:503; AVX512-X64: # %bb.0:504; AVX512-X64-NEXT: vcvttss2usi %xmm0, %eax505; AVX512-X64-NEXT: retq506;507; X87-LABEL: fptoui_f32toi32:508; X87: # %bb.0:509; X87-NEXT: pushl %ebp510; X87-NEXT: .cfi_def_cfa_offset 8511; X87-NEXT: .cfi_offset %ebp, -8512; X87-NEXT: movl %esp, %ebp513; X87-NEXT: .cfi_def_cfa_register %ebp514; X87-NEXT: andl $-8, %esp515; X87-NEXT: subl $16, %esp516; X87-NEXT: flds 8(%ebp)517; X87-NEXT: wait518; X87-NEXT: fnstcw {{[0-9]+}}(%esp)519; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax520; X87-NEXT: orl $3072, %eax # imm = 0xC00521; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)522; X87-NEXT: fldcw {{[0-9]+}}(%esp)523; X87-NEXT: fistpll {{[0-9]+}}(%esp)524; X87-NEXT: fldcw {{[0-9]+}}(%esp)525; X87-NEXT: movl {{[0-9]+}}(%esp), %eax526; X87-NEXT: movl %ebp, %esp527; X87-NEXT: popl %ebp528; X87-NEXT: .cfi_def_cfa %esp, 4529; X87-NEXT: retl530 %result = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %x,531 metadata !"fpexcept.strict") #0532 ret i32 %result533}534 535define i64 @fptoui_f32toi64(float %x) #0 {536; SSE-X86-LABEL: fptoui_f32toi64:537; SSE-X86: # %bb.0:538; SSE-X86-NEXT: pushl %ebp539; SSE-X86-NEXT: .cfi_def_cfa_offset 8540; SSE-X86-NEXT: .cfi_offset %ebp, -8541; SSE-X86-NEXT: movl %esp, %ebp542; SSE-X86-NEXT: .cfi_def_cfa_register %ebp543; SSE-X86-NEXT: andl $-8, %esp544; SSE-X86-NEXT: subl $16, %esp545; SSE-X86-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero546; SSE-X86-NEXT: movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]547; SSE-X86-NEXT: comiss %xmm0, %xmm1548; SSE-X86-NEXT: jbe .LBB9_2549; SSE-X86-NEXT: # %bb.1:550; SSE-X86-NEXT: xorps %xmm1, %xmm1551; SSE-X86-NEXT: .LBB9_2:552; SSE-X86-NEXT: subss %xmm1, %xmm0553; SSE-X86-NEXT: movss %xmm0, {{[0-9]+}}(%esp)554; SSE-X86-NEXT: setbe %al555; SSE-X86-NEXT: flds {{[0-9]+}}(%esp)556; SSE-X86-NEXT: wait557; SSE-X86-NEXT: fnstcw {{[0-9]+}}(%esp)558; SSE-X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx559; SSE-X86-NEXT: orl $3072, %ecx # imm = 0xC00560; SSE-X86-NEXT: movw %cx, {{[0-9]+}}(%esp)561; SSE-X86-NEXT: fldcw {{[0-9]+}}(%esp)562; SSE-X86-NEXT: fistpll {{[0-9]+}}(%esp)563; SSE-X86-NEXT: fldcw {{[0-9]+}}(%esp)564; SSE-X86-NEXT: movzbl %al, %edx565; SSE-X86-NEXT: shll $31, %edx566; SSE-X86-NEXT: xorl {{[0-9]+}}(%esp), %edx567; SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %eax568; SSE-X86-NEXT: movl %ebp, %esp569; SSE-X86-NEXT: popl %ebp570; SSE-X86-NEXT: .cfi_def_cfa %esp, 4571; SSE-X86-NEXT: retl572;573; SSE-X64-LABEL: fptoui_f32toi64:574; SSE-X64: # %bb.0:575; SSE-X64-NEXT: movss {{.*#+}} xmm2 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]576; SSE-X64-NEXT: comiss %xmm2, %xmm0577; SSE-X64-NEXT: xorps %xmm1, %xmm1578; SSE-X64-NEXT: jb .LBB9_2579; SSE-X64-NEXT: # %bb.1:580; SSE-X64-NEXT: movaps %xmm2, %xmm1581; SSE-X64-NEXT: .LBB9_2:582; SSE-X64-NEXT: subss %xmm1, %xmm0583; SSE-X64-NEXT: cvttss2si %xmm0, %rcx584; SSE-X64-NEXT: setae %al585; SSE-X64-NEXT: movzbl %al, %eax586; SSE-X64-NEXT: shlq $63, %rax587; SSE-X64-NEXT: xorq %rcx, %rax588; SSE-X64-NEXT: retq589;590; AVX1-X86-LABEL: fptoui_f32toi64:591; AVX1-X86: # %bb.0:592; AVX1-X86-NEXT: pushl %ebp593; AVX1-X86-NEXT: .cfi_def_cfa_offset 8594; AVX1-X86-NEXT: .cfi_offset %ebp, -8595; AVX1-X86-NEXT: movl %esp, %ebp596; AVX1-X86-NEXT: .cfi_def_cfa_register %ebp597; AVX1-X86-NEXT: andl $-8, %esp598; AVX1-X86-NEXT: subl $8, %esp599; AVX1-X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero600; AVX1-X86-NEXT: vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]601; AVX1-X86-NEXT: vcomiss %xmm0, %xmm1602; AVX1-X86-NEXT: jbe .LBB9_2603; AVX1-X86-NEXT: # %bb.1:604; AVX1-X86-NEXT: vxorps %xmm1, %xmm1, %xmm1605; AVX1-X86-NEXT: .LBB9_2:606; AVX1-X86-NEXT: vsubss %xmm1, %xmm0, %xmm0607; AVX1-X86-NEXT: vmovss %xmm0, (%esp)608; AVX1-X86-NEXT: flds (%esp)609; AVX1-X86-NEXT: fisttpll (%esp)610; AVX1-X86-NEXT: wait611; AVX1-X86-NEXT: setbe %al612; AVX1-X86-NEXT: movzbl %al, %edx613; AVX1-X86-NEXT: shll $31, %edx614; AVX1-X86-NEXT: xorl {{[0-9]+}}(%esp), %edx615; AVX1-X86-NEXT: movl (%esp), %eax616; AVX1-X86-NEXT: movl %ebp, %esp617; AVX1-X86-NEXT: popl %ebp618; AVX1-X86-NEXT: .cfi_def_cfa %esp, 4619; AVX1-X86-NEXT: retl620;621; AVX1-X64-LABEL: fptoui_f32toi64:622; AVX1-X64: # %bb.0:623; AVX1-X64-NEXT: vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]624; AVX1-X64-NEXT: vcomiss %xmm1, %xmm0625; AVX1-X64-NEXT: vxorps %xmm2, %xmm2, %xmm2626; AVX1-X64-NEXT: jb .LBB9_2627; AVX1-X64-NEXT: # %bb.1:628; AVX1-X64-NEXT: vmovaps %xmm1, %xmm2629; AVX1-X64-NEXT: .LBB9_2:630; AVX1-X64-NEXT: vsubss %xmm2, %xmm0, %xmm0631; AVX1-X64-NEXT: vcvttss2si %xmm0, %rcx632; AVX1-X64-NEXT: setae %al633; AVX1-X64-NEXT: movzbl %al, %eax634; AVX1-X64-NEXT: shlq $63, %rax635; AVX1-X64-NEXT: xorq %rcx, %rax636; AVX1-X64-NEXT: retq637;638; AVX512-X86-LABEL: fptoui_f32toi64:639; AVX512-X86: # %bb.0:640; AVX512-X86-NEXT: pushl %ebp641; AVX512-X86-NEXT: .cfi_def_cfa_offset 8642; AVX512-X86-NEXT: .cfi_offset %ebp, -8643; AVX512-X86-NEXT: movl %esp, %ebp644; AVX512-X86-NEXT: .cfi_def_cfa_register %ebp645; AVX512-X86-NEXT: andl $-8, %esp646; AVX512-X86-NEXT: subl $8, %esp647; AVX512-X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero648; AVX512-X86-NEXT: vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]649; AVX512-X86-NEXT: xorl %edx, %edx650; AVX512-X86-NEXT: vcomiss %xmm0, %xmm1651; AVX512-X86-NEXT: setbe %dl652; AVX512-X86-NEXT: kmovw %edx, %k1653; AVX512-X86-NEXT: vmovss %xmm1, %xmm1, %xmm1 {%k1} {z}654; AVX512-X86-NEXT: vsubss %xmm1, %xmm0, %xmm0655; AVX512-X86-NEXT: vmovss %xmm0, (%esp)656; AVX512-X86-NEXT: flds (%esp)657; AVX512-X86-NEXT: fisttpll (%esp)658; AVX512-X86-NEXT: wait659; AVX512-X86-NEXT: shll $31, %edx660; AVX512-X86-NEXT: xorl {{[0-9]+}}(%esp), %edx661; AVX512-X86-NEXT: movl (%esp), %eax662; AVX512-X86-NEXT: movl %ebp, %esp663; AVX512-X86-NEXT: popl %ebp664; AVX512-X86-NEXT: .cfi_def_cfa %esp, 4665; AVX512-X86-NEXT: retl666;667; AVX512-X64-LABEL: fptoui_f32toi64:668; AVX512-X64: # %bb.0:669; AVX512-X64-NEXT: vcvttss2usi %xmm0, %rax670; AVX512-X64-NEXT: retq671;672; X87-LABEL: fptoui_f32toi64:673; X87: # %bb.0:674; X87-NEXT: pushl %ebp675; X87-NEXT: .cfi_def_cfa_offset 8676; X87-NEXT: .cfi_offset %ebp, -8677; X87-NEXT: movl %esp, %ebp678; X87-NEXT: .cfi_def_cfa_register %ebp679; X87-NEXT: andl $-8, %esp680; X87-NEXT: subl $16, %esp681; X87-NEXT: flds 8(%ebp)682; X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}683; X87-NEXT: fcom %st(1)684; X87-NEXT: wait685; X87-NEXT: fnstsw %ax686; X87-NEXT: xorl %edx, %edx687; X87-NEXT: # kill: def $ah killed $ah killed $ax688; X87-NEXT: sahf689; X87-NEXT: setbe %al690; X87-NEXT: fldz691; X87-NEXT: jbe .LBB9_2692; X87-NEXT: # %bb.1:693; X87-NEXT: fstp %st(1)694; X87-NEXT: fldz695; X87-NEXT: .LBB9_2:696; X87-NEXT: fstp %st(0)697; X87-NEXT: fsubrp %st, %st(1)698; X87-NEXT: wait699; X87-NEXT: fnstcw {{[0-9]+}}(%esp)700; X87-NEXT: movzwl {{[0-9]+}}(%esp), %ecx701; X87-NEXT: orl $3072, %ecx # imm = 0xC00702; X87-NEXT: movw %cx, {{[0-9]+}}(%esp)703; X87-NEXT: fldcw {{[0-9]+}}(%esp)704; X87-NEXT: fistpll {{[0-9]+}}(%esp)705; X87-NEXT: fldcw {{[0-9]+}}(%esp)706; X87-NEXT: movb %al, %dl707; X87-NEXT: shll $31, %edx708; X87-NEXT: xorl {{[0-9]+}}(%esp), %edx709; X87-NEXT: movl {{[0-9]+}}(%esp), %eax710; X87-NEXT: movl %ebp, %esp711; X87-NEXT: popl %ebp712; X87-NEXT: .cfi_def_cfa %esp, 4713; X87-NEXT: retl714 %result = call i64 @llvm.experimental.constrained.fptoui.i64.f32(float %x,715 metadata !"fpexcept.strict") #0716 ret i64 %result717}718 719define i8 @fptosi_f64toi8(double %x) #0 {720; SSE-X86-LABEL: fptosi_f64toi8:721; SSE-X86: # %bb.0:722; SSE-X86-NEXT: cvttsd2si {{[0-9]+}}(%esp), %eax723; SSE-X86-NEXT: # kill: def $al killed $al killed $eax724; SSE-X86-NEXT: retl725;726; SSE-X64-LABEL: fptosi_f64toi8:727; SSE-X64: # %bb.0:728; SSE-X64-NEXT: cvttsd2si %xmm0, %eax729; SSE-X64-NEXT: # kill: def $al killed $al killed $eax730; SSE-X64-NEXT: retq731;732; AVX-X86-LABEL: fptosi_f64toi8:733; AVX-X86: # %bb.0:734; AVX-X86-NEXT: vcvttsd2si {{[0-9]+}}(%esp), %eax735; AVX-X86-NEXT: # kill: def $al killed $al killed $eax736; AVX-X86-NEXT: retl737;738; AVX-X64-LABEL: fptosi_f64toi8:739; AVX-X64: # %bb.0:740; AVX-X64-NEXT: vcvttsd2si %xmm0, %eax741; AVX-X64-NEXT: # kill: def $al killed $al killed $eax742; AVX-X64-NEXT: retq743;744; X87-LABEL: fptosi_f64toi8:745; X87: # %bb.0:746; X87-NEXT: subl $8, %esp747; X87-NEXT: .cfi_def_cfa_offset 12748; X87-NEXT: fldl {{[0-9]+}}(%esp)749; X87-NEXT: wait750; X87-NEXT: fnstcw {{[0-9]+}}(%esp)751; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax752; X87-NEXT: orl $3072, %eax # imm = 0xC00753; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)754; X87-NEXT: fldcw {{[0-9]+}}(%esp)755; X87-NEXT: fistps {{[0-9]+}}(%esp)756; X87-NEXT: fldcw {{[0-9]+}}(%esp)757; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax758; X87-NEXT: addl $8, %esp759; X87-NEXT: .cfi_def_cfa_offset 4760; X87-NEXT: retl761 %result = call i8 @llvm.experimental.constrained.fptosi.i8.f64(double %x,762 metadata !"fpexcept.strict") #0763 ret i8 %result764}765 766define i16 @fptosi_f64toi16(double %x) #0 {767; SSE-X86-LABEL: fptosi_f64toi16:768; SSE-X86: # %bb.0:769; SSE-X86-NEXT: cvttsd2si {{[0-9]+}}(%esp), %eax770; SSE-X86-NEXT: # kill: def $ax killed $ax killed $eax771; SSE-X86-NEXT: retl772;773; SSE-X64-LABEL: fptosi_f64toi16:774; SSE-X64: # %bb.0:775; SSE-X64-NEXT: cvttsd2si %xmm0, %eax776; SSE-X64-NEXT: # kill: def $ax killed $ax killed $eax777; SSE-X64-NEXT: retq778;779; AVX-X86-LABEL: fptosi_f64toi16:780; AVX-X86: # %bb.0:781; AVX-X86-NEXT: vcvttsd2si {{[0-9]+}}(%esp), %eax782; AVX-X86-NEXT: # kill: def $ax killed $ax killed $eax783; AVX-X86-NEXT: retl784;785; AVX-X64-LABEL: fptosi_f64toi16:786; AVX-X64: # %bb.0:787; AVX-X64-NEXT: vcvttsd2si %xmm0, %eax788; AVX-X64-NEXT: # kill: def $ax killed $ax killed $eax789; AVX-X64-NEXT: retq790;791; X87-LABEL: fptosi_f64toi16:792; X87: # %bb.0:793; X87-NEXT: subl $8, %esp794; X87-NEXT: .cfi_def_cfa_offset 12795; X87-NEXT: fldl {{[0-9]+}}(%esp)796; X87-NEXT: wait797; X87-NEXT: fnstcw {{[0-9]+}}(%esp)798; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax799; X87-NEXT: orl $3072, %eax # imm = 0xC00800; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)801; X87-NEXT: fldcw {{[0-9]+}}(%esp)802; X87-NEXT: fistps {{[0-9]+}}(%esp)803; X87-NEXT: fldcw {{[0-9]+}}(%esp)804; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax805; X87-NEXT: addl $8, %esp806; X87-NEXT: .cfi_def_cfa_offset 4807; X87-NEXT: retl808 %result = call i16 @llvm.experimental.constrained.fptosi.i16.f64(double %x,809 metadata !"fpexcept.strict") #0810 ret i16 %result811}812 813define i32 @fptosi_f64toi32(double %x) #0 {814; SSE-X86-LABEL: fptosi_f64toi32:815; SSE-X86: # %bb.0:816; SSE-X86-NEXT: cvttsd2si {{[0-9]+}}(%esp), %eax817; SSE-X86-NEXT: retl818;819; SSE-X64-LABEL: fptosi_f64toi32:820; SSE-X64: # %bb.0:821; SSE-X64-NEXT: cvttsd2si %xmm0, %eax822; SSE-X64-NEXT: retq823;824; AVX-X86-LABEL: fptosi_f64toi32:825; AVX-X86: # %bb.0:826; AVX-X86-NEXT: vcvttsd2si {{[0-9]+}}(%esp), %eax827; AVX-X86-NEXT: retl828;829; AVX-X64-LABEL: fptosi_f64toi32:830; AVX-X64: # %bb.0:831; AVX-X64-NEXT: vcvttsd2si %xmm0, %eax832; AVX-X64-NEXT: retq833;834; X87-LABEL: fptosi_f64toi32:835; X87: # %bb.0:836; X87-NEXT: subl $8, %esp837; X87-NEXT: .cfi_def_cfa_offset 12838; X87-NEXT: fldl {{[0-9]+}}(%esp)839; X87-NEXT: wait840; X87-NEXT: fnstcw (%esp)841; X87-NEXT: movzwl (%esp), %eax842; X87-NEXT: orl $3072, %eax # imm = 0xC00843; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)844; X87-NEXT: fldcw {{[0-9]+}}(%esp)845; X87-NEXT: fistpl {{[0-9]+}}(%esp)846; X87-NEXT: fldcw (%esp)847; X87-NEXT: movl {{[0-9]+}}(%esp), %eax848; X87-NEXT: addl $8, %esp849; X87-NEXT: .cfi_def_cfa_offset 4850; X87-NEXT: retl851 %result = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %x,852 metadata !"fpexcept.strict") #0853 ret i32 %result854}855 856define i64 @fptosi_f64toi64(double %x) #0 {857; SSE-X86-LABEL: fptosi_f64toi64:858; SSE-X86: # %bb.0:859; SSE-X86-NEXT: pushl %ebp860; SSE-X86-NEXT: .cfi_def_cfa_offset 8861; SSE-X86-NEXT: .cfi_offset %ebp, -8862; SSE-X86-NEXT: movl %esp, %ebp863; SSE-X86-NEXT: .cfi_def_cfa_register %ebp864; SSE-X86-NEXT: andl $-8, %esp865; SSE-X86-NEXT: subl $16, %esp866; SSE-X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero867; SSE-X86-NEXT: movsd %xmm0, {{[0-9]+}}(%esp)868; SSE-X86-NEXT: fldl {{[0-9]+}}(%esp)869; SSE-X86-NEXT: wait870; SSE-X86-NEXT: fnstcw {{[0-9]+}}(%esp)871; SSE-X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax872; SSE-X86-NEXT: orl $3072, %eax # imm = 0xC00873; SSE-X86-NEXT: movw %ax, {{[0-9]+}}(%esp)874; SSE-X86-NEXT: fldcw {{[0-9]+}}(%esp)875; SSE-X86-NEXT: fistpll {{[0-9]+}}(%esp)876; SSE-X86-NEXT: fldcw {{[0-9]+}}(%esp)877; SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %eax878; SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %edx879; SSE-X86-NEXT: movl %ebp, %esp880; SSE-X86-NEXT: popl %ebp881; SSE-X86-NEXT: .cfi_def_cfa %esp, 4882; SSE-X86-NEXT: retl883;884; SSE-X64-LABEL: fptosi_f64toi64:885; SSE-X64: # %bb.0:886; SSE-X64-NEXT: cvttsd2si %xmm0, %rax887; SSE-X64-NEXT: retq888;889; AVX-X86-LABEL: fptosi_f64toi64:890; AVX-X86: # %bb.0:891; AVX-X86-NEXT: pushl %ebp892; AVX-X86-NEXT: .cfi_def_cfa_offset 8893; AVX-X86-NEXT: .cfi_offset %ebp, -8894; AVX-X86-NEXT: movl %esp, %ebp895; AVX-X86-NEXT: .cfi_def_cfa_register %ebp896; AVX-X86-NEXT: andl $-8, %esp897; AVX-X86-NEXT: subl $8, %esp898; AVX-X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero899; AVX-X86-NEXT: vmovsd %xmm0, (%esp)900; AVX-X86-NEXT: fldl (%esp)901; AVX-X86-NEXT: fisttpll (%esp)902; AVX-X86-NEXT: wait903; AVX-X86-NEXT: movl (%esp), %eax904; AVX-X86-NEXT: movl {{[0-9]+}}(%esp), %edx905; AVX-X86-NEXT: movl %ebp, %esp906; AVX-X86-NEXT: popl %ebp907; AVX-X86-NEXT: .cfi_def_cfa %esp, 4908; AVX-X86-NEXT: retl909;910; AVX-X64-LABEL: fptosi_f64toi64:911; AVX-X64: # %bb.0:912; AVX-X64-NEXT: vcvttsd2si %xmm0, %rax913; AVX-X64-NEXT: retq914;915; X87-LABEL: fptosi_f64toi64:916; X87: # %bb.0:917; X87-NEXT: pushl %ebp918; X87-NEXT: .cfi_def_cfa_offset 8919; X87-NEXT: .cfi_offset %ebp, -8920; X87-NEXT: movl %esp, %ebp921; X87-NEXT: .cfi_def_cfa_register %ebp922; X87-NEXT: andl $-8, %esp923; X87-NEXT: subl $16, %esp924; X87-NEXT: fldl 8(%ebp)925; X87-NEXT: wait926; X87-NEXT: fnstcw {{[0-9]+}}(%esp)927; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax928; X87-NEXT: orl $3072, %eax # imm = 0xC00929; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)930; X87-NEXT: fldcw {{[0-9]+}}(%esp)931; X87-NEXT: fistpll {{[0-9]+}}(%esp)932; X87-NEXT: fldcw {{[0-9]+}}(%esp)933; X87-NEXT: movl {{[0-9]+}}(%esp), %eax934; X87-NEXT: movl {{[0-9]+}}(%esp), %edx935; X87-NEXT: movl %ebp, %esp936; X87-NEXT: popl %ebp937; X87-NEXT: .cfi_def_cfa %esp, 4938; X87-NEXT: retl939 %result = call i64 @llvm.experimental.constrained.fptosi.i64.f64(double %x,940 metadata !"fpexcept.strict") #0941 ret i64 %result942}943 944define i1 @fptoui_f64toi1(double %x) #0 {945; SSE-X86-LABEL: fptoui_f64toi1:946; SSE-X86: # %bb.0:947; SSE-X86-NEXT: cvttsd2si {{[0-9]+}}(%esp), %eax948; SSE-X86-NEXT: # kill: def $al killed $al killed $eax949; SSE-X86-NEXT: retl950;951; SSE-X64-LABEL: fptoui_f64toi1:952; SSE-X64: # %bb.0:953; SSE-X64-NEXT: cvttsd2si %xmm0, %eax954; SSE-X64-NEXT: # kill: def $al killed $al killed $eax955; SSE-X64-NEXT: retq956;957; AVX-X86-LABEL: fptoui_f64toi1:958; AVX-X86: # %bb.0:959; AVX-X86-NEXT: vcvttsd2si {{[0-9]+}}(%esp), %eax960; AVX-X86-NEXT: # kill: def $al killed $al killed $eax961; AVX-X86-NEXT: retl962;963; AVX-X64-LABEL: fptoui_f64toi1:964; AVX-X64: # %bb.0:965; AVX-X64-NEXT: vcvttsd2si %xmm0, %eax966; AVX-X64-NEXT: # kill: def $al killed $al killed $eax967; AVX-X64-NEXT: retq968;969; X87-LABEL: fptoui_f64toi1:970; X87: # %bb.0:971; X87-NEXT: subl $8, %esp972; X87-NEXT: .cfi_def_cfa_offset 12973; X87-NEXT: fldl {{[0-9]+}}(%esp)974; X87-NEXT: wait975; X87-NEXT: fnstcw {{[0-9]+}}(%esp)976; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax977; X87-NEXT: orl $3072, %eax # imm = 0xC00978; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)979; X87-NEXT: fldcw {{[0-9]+}}(%esp)980; X87-NEXT: fistps {{[0-9]+}}(%esp)981; X87-NEXT: fldcw {{[0-9]+}}(%esp)982; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax983; X87-NEXT: addl $8, %esp984; X87-NEXT: .cfi_def_cfa_offset 4985; X87-NEXT: retl986 %result = call i1 @llvm.experimental.constrained.fptoui.i1.f64(double %x,987 metadata !"fpexcept.strict") #0988 ret i1 %result989}990 991define i8 @fptoui_f64toi8(double %x) #0 {992; SSE-X86-LABEL: fptoui_f64toi8:993; SSE-X86: # %bb.0:994; SSE-X86-NEXT: cvttsd2si {{[0-9]+}}(%esp), %eax995; SSE-X86-NEXT: # kill: def $al killed $al killed $eax996; SSE-X86-NEXT: retl997;998; SSE-X64-LABEL: fptoui_f64toi8:999; SSE-X64: # %bb.0:1000; SSE-X64-NEXT: cvttsd2si %xmm0, %eax1001; SSE-X64-NEXT: # kill: def $al killed $al killed $eax1002; SSE-X64-NEXT: retq1003;1004; AVX-X86-LABEL: fptoui_f64toi8:1005; AVX-X86: # %bb.0:1006; AVX-X86-NEXT: vcvttsd2si {{[0-9]+}}(%esp), %eax1007; AVX-X86-NEXT: # kill: def $al killed $al killed $eax1008; AVX-X86-NEXT: retl1009;1010; AVX-X64-LABEL: fptoui_f64toi8:1011; AVX-X64: # %bb.0:1012; AVX-X64-NEXT: vcvttsd2si %xmm0, %eax1013; AVX-X64-NEXT: # kill: def $al killed $al killed $eax1014; AVX-X64-NEXT: retq1015;1016; X87-LABEL: fptoui_f64toi8:1017; X87: # %bb.0:1018; X87-NEXT: subl $8, %esp1019; X87-NEXT: .cfi_def_cfa_offset 121020; X87-NEXT: fldl {{[0-9]+}}(%esp)1021; X87-NEXT: wait1022; X87-NEXT: fnstcw {{[0-9]+}}(%esp)1023; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1024; X87-NEXT: orl $3072, %eax # imm = 0xC001025; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1026; X87-NEXT: fldcw {{[0-9]+}}(%esp)1027; X87-NEXT: fistps {{[0-9]+}}(%esp)1028; X87-NEXT: fldcw {{[0-9]+}}(%esp)1029; X87-NEXT: movzbl {{[0-9]+}}(%esp), %eax1030; X87-NEXT: addl $8, %esp1031; X87-NEXT: .cfi_def_cfa_offset 41032; X87-NEXT: retl1033 %result = call i8 @llvm.experimental.constrained.fptoui.i8.f64(double %x,1034 metadata !"fpexcept.strict") #01035 ret i8 %result1036}1037 1038define i16 @fptoui_f64toi16(double %x) #0 {1039; SSE-X86-LABEL: fptoui_f64toi16:1040; SSE-X86: # %bb.0:1041; SSE-X86-NEXT: cvttsd2si {{[0-9]+}}(%esp), %eax1042; SSE-X86-NEXT: # kill: def $ax killed $ax killed $eax1043; SSE-X86-NEXT: retl1044;1045; SSE-X64-LABEL: fptoui_f64toi16:1046; SSE-X64: # %bb.0:1047; SSE-X64-NEXT: cvttsd2si %xmm0, %eax1048; SSE-X64-NEXT: # kill: def $ax killed $ax killed $eax1049; SSE-X64-NEXT: retq1050;1051; AVX-X86-LABEL: fptoui_f64toi16:1052; AVX-X86: # %bb.0:1053; AVX-X86-NEXT: vcvttsd2si {{[0-9]+}}(%esp), %eax1054; AVX-X86-NEXT: # kill: def $ax killed $ax killed $eax1055; AVX-X86-NEXT: retl1056;1057; AVX-X64-LABEL: fptoui_f64toi16:1058; AVX-X64: # %bb.0:1059; AVX-X64-NEXT: vcvttsd2si %xmm0, %eax1060; AVX-X64-NEXT: # kill: def $ax killed $ax killed $eax1061; AVX-X64-NEXT: retq1062;1063; X87-LABEL: fptoui_f64toi16:1064; X87: # %bb.0:1065; X87-NEXT: subl $8, %esp1066; X87-NEXT: .cfi_def_cfa_offset 121067; X87-NEXT: fldl {{[0-9]+}}(%esp)1068; X87-NEXT: wait1069; X87-NEXT: fnstcw (%esp)1070; X87-NEXT: movzwl (%esp), %eax1071; X87-NEXT: orl $3072, %eax # imm = 0xC001072; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1073; X87-NEXT: fldcw {{[0-9]+}}(%esp)1074; X87-NEXT: fistpl {{[0-9]+}}(%esp)1075; X87-NEXT: fldcw (%esp)1076; X87-NEXT: movl {{[0-9]+}}(%esp), %eax1077; X87-NEXT: # kill: def $ax killed $ax killed $eax1078; X87-NEXT: addl $8, %esp1079; X87-NEXT: .cfi_def_cfa_offset 41080; X87-NEXT: retl1081 %result = call i16 @llvm.experimental.constrained.fptoui.i16.f64(double %x,1082 metadata !"fpexcept.strict") #01083 ret i16 %result1084}1085 1086define i32 @fptoui_f64toi32(double %x) #0 {1087; SSE-X86-LABEL: fptoui_f64toi32:1088; SSE-X86: # %bb.0:1089; SSE-X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1090; SSE-X86-NEXT: movsd {{.*#+}} xmm2 = [2.147483648E+9,0.0E+0]1091; SSE-X86-NEXT: comisd %xmm0, %xmm21092; SSE-X86-NEXT: xorpd %xmm1, %xmm11093; SSE-X86-NEXT: ja .LBB17_21094; SSE-X86-NEXT: # %bb.1:1095; SSE-X86-NEXT: movapd %xmm2, %xmm11096; SSE-X86-NEXT: .LBB17_2:1097; SSE-X86-NEXT: setbe %al1098; SSE-X86-NEXT: movzbl %al, %ecx1099; SSE-X86-NEXT: shll $31, %ecx1100; SSE-X86-NEXT: subsd %xmm1, %xmm01101; SSE-X86-NEXT: cvttsd2si %xmm0, %eax1102; SSE-X86-NEXT: xorl %ecx, %eax1103; SSE-X86-NEXT: retl1104;1105; SSE-X64-LABEL: fptoui_f64toi32:1106; SSE-X64: # %bb.0:1107; SSE-X64-NEXT: cvttsd2si %xmm0, %rax1108; SSE-X64-NEXT: # kill: def $eax killed $eax killed $rax1109; SSE-X64-NEXT: retq1110;1111; AVX1-X86-LABEL: fptoui_f64toi32:1112; AVX1-X86: # %bb.0:1113; AVX1-X86-NEXT: pushl %ebp1114; AVX1-X86-NEXT: .cfi_def_cfa_offset 81115; AVX1-X86-NEXT: .cfi_offset %ebp, -81116; AVX1-X86-NEXT: movl %esp, %ebp1117; AVX1-X86-NEXT: .cfi_def_cfa_register %ebp1118; AVX1-X86-NEXT: andl $-8, %esp1119; AVX1-X86-NEXT: subl $8, %esp1120; AVX1-X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero1121; AVX1-X86-NEXT: vmovsd %xmm0, (%esp)1122; AVX1-X86-NEXT: fldl (%esp)1123; AVX1-X86-NEXT: fisttpll (%esp)1124; AVX1-X86-NEXT: wait1125; AVX1-X86-NEXT: movl (%esp), %eax1126; AVX1-X86-NEXT: movl %ebp, %esp1127; AVX1-X86-NEXT: popl %ebp1128; AVX1-X86-NEXT: .cfi_def_cfa %esp, 41129; AVX1-X86-NEXT: retl1130;1131; AVX1-X64-LABEL: fptoui_f64toi32:1132; AVX1-X64: # %bb.0:1133; AVX1-X64-NEXT: vcvttsd2si %xmm0, %rax1134; AVX1-X64-NEXT: # kill: def $eax killed $eax killed $rax1135; AVX1-X64-NEXT: retq1136;1137; AVX512-X86-LABEL: fptoui_f64toi32:1138; AVX512-X86: # %bb.0:1139; AVX512-X86-NEXT: vcvttsd2usi {{[0-9]+}}(%esp), %eax1140; AVX512-X86-NEXT: retl1141;1142; AVX512-X64-LABEL: fptoui_f64toi32:1143; AVX512-X64: # %bb.0:1144; AVX512-X64-NEXT: vcvttsd2usi %xmm0, %eax1145; AVX512-X64-NEXT: retq1146;1147; X87-LABEL: fptoui_f64toi32:1148; X87: # %bb.0:1149; X87-NEXT: pushl %ebp1150; X87-NEXT: .cfi_def_cfa_offset 81151; X87-NEXT: .cfi_offset %ebp, -81152; X87-NEXT: movl %esp, %ebp1153; X87-NEXT: .cfi_def_cfa_register %ebp1154; X87-NEXT: andl $-8, %esp1155; X87-NEXT: subl $16, %esp1156; X87-NEXT: fldl 8(%ebp)1157; X87-NEXT: wait1158; X87-NEXT: fnstcw {{[0-9]+}}(%esp)1159; X87-NEXT: movzwl {{[0-9]+}}(%esp), %eax1160; X87-NEXT: orl $3072, %eax # imm = 0xC001161; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)1162; X87-NEXT: fldcw {{[0-9]+}}(%esp)1163; X87-NEXT: fistpll {{[0-9]+}}(%esp)1164; X87-NEXT: fldcw {{[0-9]+}}(%esp)1165; X87-NEXT: movl {{[0-9]+}}(%esp), %eax1166; X87-NEXT: movl %ebp, %esp1167; X87-NEXT: popl %ebp1168; X87-NEXT: .cfi_def_cfa %esp, 41169; X87-NEXT: retl1170 %result = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %x,1171 metadata !"fpexcept.strict") #01172 ret i32 %result1173}1174 1175define i64 @fptoui_f64toi64(double %x) #0 {1176; SSE-X86-LABEL: fptoui_f64toi64:1177; SSE-X86: # %bb.0:1178; SSE-X86-NEXT: pushl %ebp1179; SSE-X86-NEXT: .cfi_def_cfa_offset 81180; SSE-X86-NEXT: .cfi_offset %ebp, -81181; SSE-X86-NEXT: movl %esp, %ebp1182; SSE-X86-NEXT: .cfi_def_cfa_register %ebp1183; SSE-X86-NEXT: andl $-8, %esp1184; SSE-X86-NEXT: subl $16, %esp1185; SSE-X86-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1186; SSE-X86-NEXT: movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]1187; SSE-X86-NEXT: comisd %xmm0, %xmm11188; SSE-X86-NEXT: jbe .LBB18_21189; SSE-X86-NEXT: # %bb.1:1190; SSE-X86-NEXT: xorpd %xmm1, %xmm11191; SSE-X86-NEXT: .LBB18_2:1192; SSE-X86-NEXT: subsd %xmm1, %xmm01193; SSE-X86-NEXT: movsd %xmm0, {{[0-9]+}}(%esp)1194; SSE-X86-NEXT: setbe %al1195; SSE-X86-NEXT: fldl {{[0-9]+}}(%esp)1196; SSE-X86-NEXT: wait1197; SSE-X86-NEXT: fnstcw {{[0-9]+}}(%esp)1198; SSE-X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx1199; SSE-X86-NEXT: orl $3072, %ecx # imm = 0xC001200; SSE-X86-NEXT: movw %cx, {{[0-9]+}}(%esp)1201; SSE-X86-NEXT: fldcw {{[0-9]+}}(%esp)1202; SSE-X86-NEXT: fistpll {{[0-9]+}}(%esp)1203; SSE-X86-NEXT: fldcw {{[0-9]+}}(%esp)1204; SSE-X86-NEXT: movzbl %al, %edx1205; SSE-X86-NEXT: shll $31, %edx1206; SSE-X86-NEXT: xorl {{[0-9]+}}(%esp), %edx1207; SSE-X86-NEXT: movl {{[0-9]+}}(%esp), %eax1208; SSE-X86-NEXT: movl %ebp, %esp1209; SSE-X86-NEXT: popl %ebp1210; SSE-X86-NEXT: .cfi_def_cfa %esp, 41211; SSE-X86-NEXT: retl1212;1213; SSE-X64-LABEL: fptoui_f64toi64:1214; SSE-X64: # %bb.0:1215; SSE-X64-NEXT: movsd {{.*#+}} xmm2 = [9.2233720368547758E+18,0.0E+0]1216; SSE-X64-NEXT: comisd %xmm2, %xmm01217; SSE-X64-NEXT: xorpd %xmm1, %xmm11218; SSE-X64-NEXT: jb .LBB18_21219; SSE-X64-NEXT: # %bb.1:1220; SSE-X64-NEXT: movapd %xmm2, %xmm11221; SSE-X64-NEXT: .LBB18_2:1222; SSE-X64-NEXT: subsd %xmm1, %xmm01223; SSE-X64-NEXT: cvttsd2si %xmm0, %rcx1224; SSE-X64-NEXT: setae %al1225; SSE-X64-NEXT: movzbl %al, %eax1226; SSE-X64-NEXT: shlq $63, %rax1227; SSE-X64-NEXT: xorq %rcx, %rax1228; SSE-X64-NEXT: retq1229;1230; AVX1-X86-LABEL: fptoui_f64toi64:1231; AVX1-X86: # %bb.0:1232; AVX1-X86-NEXT: pushl %ebp1233; AVX1-X86-NEXT: .cfi_def_cfa_offset 81234; AVX1-X86-NEXT: .cfi_offset %ebp, -81235; AVX1-X86-NEXT: movl %esp, %ebp1236; AVX1-X86-NEXT: .cfi_def_cfa_register %ebp1237; AVX1-X86-NEXT: andl $-8, %esp1238; AVX1-X86-NEXT: subl $8, %esp1239; AVX1-X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero1240; AVX1-X86-NEXT: vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]1241; AVX1-X86-NEXT: vcomisd %xmm0, %xmm11242; AVX1-X86-NEXT: jbe .LBB18_21243; AVX1-X86-NEXT: # %bb.1:1244; AVX1-X86-NEXT: vxorpd %xmm1, %xmm1, %xmm11245; AVX1-X86-NEXT: .LBB18_2:1246; AVX1-X86-NEXT: vsubsd %xmm1, %xmm0, %xmm01247; AVX1-X86-NEXT: vmovsd %xmm0, (%esp)1248; AVX1-X86-NEXT: fldl (%esp)1249; AVX1-X86-NEXT: fisttpll (%esp)1250; AVX1-X86-NEXT: wait1251; AVX1-X86-NEXT: setbe %al1252; AVX1-X86-NEXT: movzbl %al, %edx1253; AVX1-X86-NEXT: shll $31, %edx1254; AVX1-X86-NEXT: xorl {{[0-9]+}}(%esp), %edx1255; AVX1-X86-NEXT: movl (%esp), %eax1256; AVX1-X86-NEXT: movl %ebp, %esp1257; AVX1-X86-NEXT: popl %ebp1258; AVX1-X86-NEXT: .cfi_def_cfa %esp, 41259; AVX1-X86-NEXT: retl1260;1261; AVX1-X64-LABEL: fptoui_f64toi64:1262; AVX1-X64: # %bb.0:1263; AVX1-X64-NEXT: vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]1264; AVX1-X64-NEXT: vcomisd %xmm1, %xmm01265; AVX1-X64-NEXT: vxorpd %xmm2, %xmm2, %xmm21266; AVX1-X64-NEXT: jb .LBB18_21267; AVX1-X64-NEXT: # %bb.1:1268; AVX1-X64-NEXT: vmovapd %xmm1, %xmm21269; AVX1-X64-NEXT: .LBB18_2:1270; AVX1-X64-NEXT: vsubsd %xmm2, %xmm0, %xmm01271; AVX1-X64-NEXT: vcvttsd2si %xmm0, %rcx1272; AVX1-X64-NEXT: setae %al1273; AVX1-X64-NEXT: movzbl %al, %eax1274; AVX1-X64-NEXT: shlq $63, %rax1275; AVX1-X64-NEXT: xorq %rcx, %rax1276; AVX1-X64-NEXT: retq1277;1278; AVX512-X86-LABEL: fptoui_f64toi64:1279; AVX512-X86: # %bb.0:1280; AVX512-X86-NEXT: pushl %ebp1281; AVX512-X86-NEXT: .cfi_def_cfa_offset 81282; AVX512-X86-NEXT: .cfi_offset %ebp, -81283; AVX512-X86-NEXT: movl %esp, %ebp1284; AVX512-X86-NEXT: .cfi_def_cfa_register %ebp1285; AVX512-X86-NEXT: andl $-8, %esp1286; AVX512-X86-NEXT: subl $8, %esp1287; AVX512-X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero1288; AVX512-X86-NEXT: vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]1289; AVX512-X86-NEXT: xorl %edx, %edx1290; AVX512-X86-NEXT: vcomisd %xmm0, %xmm11291; AVX512-X86-NEXT: setbe %dl1292; AVX512-X86-NEXT: kmovw %edx, %k11293; AVX512-X86-NEXT: vmovsd %xmm1, %xmm1, %xmm1 {%k1} {z}1294; AVX512-X86-NEXT: vsubsd %xmm1, %xmm0, %xmm01295; AVX512-X86-NEXT: vmovsd %xmm0, (%esp)1296; AVX512-X86-NEXT: fldl (%esp)1297; AVX512-X86-NEXT: fisttpll (%esp)1298; AVX512-X86-NEXT: wait1299; AVX512-X86-NEXT: shll $31, %edx1300; AVX512-X86-NEXT: xorl {{[0-9]+}}(%esp), %edx1301; AVX512-X86-NEXT: movl (%esp), %eax1302; AVX512-X86-NEXT: movl %ebp, %esp1303; AVX512-X86-NEXT: popl %ebp1304; AVX512-X86-NEXT: .cfi_def_cfa %esp, 41305; AVX512-X86-NEXT: retl1306;1307; AVX512-X64-LABEL: fptoui_f64toi64:1308; AVX512-X64: # %bb.0:1309; AVX512-X64-NEXT: vcvttsd2usi %xmm0, %rax1310; AVX512-X64-NEXT: retq1311;1312; X87-LABEL: fptoui_f64toi64:1313; X87: # %bb.0:1314; X87-NEXT: pushl %ebp1315; X87-NEXT: .cfi_def_cfa_offset 81316; X87-NEXT: .cfi_offset %ebp, -81317; X87-NEXT: movl %esp, %ebp1318; X87-NEXT: .cfi_def_cfa_register %ebp1319; X87-NEXT: andl $-8, %esp1320; X87-NEXT: subl $16, %esp1321; X87-NEXT: fldl 8(%ebp)1322; X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}1323; X87-NEXT: fcom %st(1)1324; X87-NEXT: wait1325; X87-NEXT: fnstsw %ax1326; X87-NEXT: xorl %edx, %edx1327; X87-NEXT: # kill: def $ah killed $ah killed $ax1328; X87-NEXT: sahf1329; X87-NEXT: setbe %al1330; X87-NEXT: fldz1331; X87-NEXT: jbe .LBB18_21332; X87-NEXT: # %bb.1:1333; X87-NEXT: fstp %st(1)1334; X87-NEXT: fldz1335; X87-NEXT: .LBB18_2:1336; X87-NEXT: fstp %st(0)1337; X87-NEXT: fsubrp %st, %st(1)1338; X87-NEXT: wait1339; X87-NEXT: fnstcw {{[0-9]+}}(%esp)1340; X87-NEXT: movzwl {{[0-9]+}}(%esp), %ecx1341; X87-NEXT: orl $3072, %ecx # imm = 0xC001342; X87-NEXT: movw %cx, {{[0-9]+}}(%esp)1343; X87-NEXT: fldcw {{[0-9]+}}(%esp)1344; X87-NEXT: fistpll {{[0-9]+}}(%esp)1345; X87-NEXT: fldcw {{[0-9]+}}(%esp)1346; X87-NEXT: movb %al, %dl1347; X87-NEXT: shll $31, %edx1348; X87-NEXT: xorl {{[0-9]+}}(%esp), %edx1349; X87-NEXT: movl {{[0-9]+}}(%esp), %eax1350; X87-NEXT: movl %ebp, %esp1351; X87-NEXT: popl %ebp1352; X87-NEXT: .cfi_def_cfa %esp, 41353; X87-NEXT: retl1354 %result = call i64 @llvm.experimental.constrained.fptoui.i64.f64(double %x,1355 metadata !"fpexcept.strict") #01356 ret i64 %result1357}1358 1359attributes #0 = { strictfp }1360