2915 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-linux | FileCheck %s -check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s -check-prefixes=X64,X64-GENERIC4; RUN: llc < %s -mtriple=x86_64-linux -mattr=+ndd | FileCheck %s -check-prefixes=X64,X64-NDD5 6define i1 @isnan_f(float %x) {7; X86-LABEL: isnan_f:8; X86: # %bb.0: # %entry9; X86-NEXT: flds {{[0-9]+}}(%esp)10; X86-NEXT: fucomp %st(0)11; X86-NEXT: fnstsw %ax12; X86-NEXT: # kill: def $ah killed $ah killed $ax13; X86-NEXT: sahf14; X86-NEXT: setp %al15; X86-NEXT: retl16;17; X64-LABEL: isnan_f:18; X64: # %bb.0: # %entry19; X64-NEXT: ucomiss %xmm0, %xmm020; X64-NEXT: setp %al21; X64-NEXT: retq22entry:23 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 3) ; "nan"24 ret i1 %025}26 27define i1 @isnot_nan_f(float %x) {28; X86-LABEL: isnot_nan_f:29; X86: # %bb.0: # %entry30; X86-NEXT: flds {{[0-9]+}}(%esp)31; X86-NEXT: fucomp %st(0)32; X86-NEXT: fnstsw %ax33; X86-NEXT: # kill: def $ah killed $ah killed $ax34; X86-NEXT: sahf35; X86-NEXT: setnp %al36; X86-NEXT: retl37;38; X64-LABEL: isnot_nan_f:39; X64: # %bb.0: # %entry40; X64-NEXT: ucomiss %xmm0, %xmm041; X64-NEXT: setnp %al42; X64-NEXT: retq43entry:44 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1020) ; 0x3fc = "zero|subnormal|normal|inf"45 ret i1 %046}47 48define i1 @issignaling_f(float %x) {49; X86-LABEL: issignaling_f:50; X86: # %bb.0: # %entry51; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF52; X86-NEXT: andl {{[0-9]+}}(%esp), %eax53; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC0000054; X86-NEXT: setl %cl55; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F80000156; X86-NEXT: setge %al57; X86-NEXT: andb %cl, %al58; X86-NEXT: retl59;60; X64-LABEL: issignaling_f:61; X64: # %bb.0: # %entry62; X64-NEXT: movd %xmm0, %eax63; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF64; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC0000065; X64-NEXT: setl %cl66; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F80000167; X64-NEXT: setge %al68; X64-NEXT: andb %cl, %al69; X64-NEXT: retq70entry:71 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1) ; "snan"72 ret i1 %073}74 75define i1 @not_issignaling_f(float %x) {76; X86-LABEL: not_issignaling_f:77; X86: # %bb.0: # %entry78; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF79; X86-NEXT: andl {{[0-9]+}}(%esp), %eax80; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC0000081; X86-NEXT: setge %cl82; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F80000183; X86-NEXT: setl %al84; X86-NEXT: orb %cl, %al85; X86-NEXT: retl86;87; X64-LABEL: not_issignaling_f:88; X64: # %bb.0: # %entry89; X64-NEXT: movd %xmm0, %eax90; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF91; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC0000092; X64-NEXT: setge %cl93; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F80000194; X64-NEXT: setl %al95; X64-NEXT: orb %cl, %al96; X64-NEXT: retq97entry:98 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1022) ; ~"snan"99 ret i1 %0100}101 102define i1 @isquiet_f(float %x) {103; X86-LABEL: isquiet_f:104; X86: # %bb.0: # %entry105; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF106; X86-NEXT: andl {{[0-9]+}}(%esp), %eax107; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000108; X86-NEXT: setge %al109; X86-NEXT: retl110;111; X64-LABEL: isquiet_f:112; X64: # %bb.0: # %entry113; X64-NEXT: movd %xmm0, %eax114; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF115; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000116; X64-NEXT: setge %al117; X64-NEXT: retq118entry:119 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 2) ; "qnan"120 ret i1 %0121}122 123define i1 @not_isquiet_f(float %x) {124; X86-LABEL: not_isquiet_f:125; X86: # %bb.0: # %entry126; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF127; X86-NEXT: andl {{[0-9]+}}(%esp), %eax128; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000129; X86-NEXT: setl %al130; X86-NEXT: retl131;132; X64-LABEL: not_isquiet_f:133; X64: # %bb.0: # %entry134; X64-NEXT: movd %xmm0, %eax135; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF136; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000137; X64-NEXT: setl %al138; X64-NEXT: retq139entry:140 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1021) ; ~"qnan"141 ret i1 %0142}143 144define i1 @isinf_f(float %x) {145; X86-LABEL: isinf_f:146; X86: # %bb.0: # %entry147; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF148; X86-NEXT: andl {{[0-9]+}}(%esp), %eax149; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000150; X86-NEXT: sete %al151; X86-NEXT: retl152;153; X64-LABEL: isinf_f:154; X64: # %bb.0: # %entry155; X64-NEXT: movd %xmm0, %eax156; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF157; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000158; X64-NEXT: sete %al159; X64-NEXT: retq160entry:161 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 516) ; 0x204 = "inf"162 ret i1 %0163}164 165define i1 @not_isinf_f(float %x) {166; X86-LABEL: not_isinf_f:167; X86: # %bb.0: # %entry168; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF169; X86-NEXT: andl {{[0-9]+}}(%esp), %eax170; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000171; X86-NEXT: setne %al172; X86-NEXT: retl173;174; X64-LABEL: not_isinf_f:175; X64: # %bb.0: # %entry176; X64-NEXT: movd %xmm0, %eax177; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF178; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000179; X64-NEXT: setne %al180; X64-NEXT: retq181entry:182 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 507) ; ~0x204 = "~inf"183 ret i1 %0184}185 186define i1 @is_plus_inf_f(float %x) {187; X86-LABEL: is_plus_inf_f:188; X86: # %bb.0: # %entry189; X86-NEXT: cmpl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000190; X86-NEXT: sete %al191; X86-NEXT: retl192;193; X64-LABEL: is_plus_inf_f:194; X64: # %bb.0: # %entry195; X64-NEXT: movd %xmm0, %eax196; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000197; X64-NEXT: sete %al198; X64-NEXT: retq199entry:200 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 512) ; 0x200 = "+inf"201 ret i1 %0202}203 204define i1 @is_minus_inf_f(float %x) {205; X86-LABEL: is_minus_inf_f:206; X86: # %bb.0: # %entry207; X86-NEXT: cmpl $-8388608, {{[0-9]+}}(%esp) # imm = 0xFF800000208; X86-NEXT: sete %al209; X86-NEXT: retl210;211; X64-LABEL: is_minus_inf_f:212; X64: # %bb.0: # %entry213; X64-NEXT: movd %xmm0, %eax214; X64-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000215; X64-NEXT: sete %al216; X64-NEXT: retq217entry:218 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 4) ; "-inf"219 ret i1 %0220}221 222define i1 @not_is_minus_inf_f(float %x) {223; X86-LABEL: not_is_minus_inf_f:224; X86: # %bb.0: # %entry225; X86-NEXT: cmpl $-8388608, {{[0-9]+}}(%esp) # imm = 0xFF800000226; X86-NEXT: setne %al227; X86-NEXT: retl228;229; X64-LABEL: not_is_minus_inf_f:230; X64: # %bb.0: # %entry231; X64-NEXT: movd %xmm0, %eax232; X64-NEXT: cmpl $-8388608, %eax # imm = 0xFF800000233; X64-NEXT: setne %al234; X64-NEXT: retq235entry:236 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1019) ; ~"-inf"237 ret i1 %0238}239 240define i1 @isfinite_f(float %x) {241; X86-LABEL: isfinite_f:242; X86: # %bb.0: # %entry243; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF244; X86-NEXT: andl {{[0-9]+}}(%esp), %eax245; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000246; X86-NEXT: setl %al247; X86-NEXT: retl248;249; X64-LABEL: isfinite_f:250; X64: # %bb.0: # %entry251; X64-NEXT: movd %xmm0, %eax252; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF253; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000254; X64-NEXT: setl %al255; X64-NEXT: retq256entry:257 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 504) ; 0x1f8 = "finite"258 ret i1 %0259}260 261define i1 @not_isfinite_f(float %x) {262; X86-LABEL: not_isfinite_f:263; X86: # %bb.0: # %entry264; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF265; X86-NEXT: andl {{[0-9]+}}(%esp), %eax266; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000267; X86-NEXT: setge %al268; X86-NEXT: retl269;270; X64-LABEL: not_isfinite_f:271; X64: # %bb.0: # %entry272; X64-NEXT: movd %xmm0, %eax273; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF274; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000275; X64-NEXT: setge %al276; X64-NEXT: retq277entry:278 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 519) ; ~0x1f8 = "~finite"279 ret i1 %0280}281 282define i1 @is_plus_finite_f(float %x) {283; X86-LABEL: is_plus_finite_f:284; X86: # %bb.0: # %entry285; X86-NEXT: cmpl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000286; X86-NEXT: setb %al287; X86-NEXT: retl288;289; X64-LABEL: is_plus_finite_f:290; X64: # %bb.0: # %entry291; X64-NEXT: movd %xmm0, %eax292; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000293; X64-NEXT: setb %al294; X64-NEXT: retq295entry:296 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 448) ; 0x1c0 = "+finite"297 ret i1 %0298}299 300define i1 @not_is_plus_finite_f(float %x) {301; X86-LABEL: not_is_plus_finite_f:302; X86: # %bb.0: # %entry303; X86-NEXT: cmpl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000304; X86-NEXT: setae %al305; X86-NEXT: retl306;307; X64-LABEL: not_is_plus_finite_f:308; X64: # %bb.0: # %entry309; X64-NEXT: movd %xmm0, %eax310; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000311; X64-NEXT: setae %al312; X64-NEXT: retq313entry:314 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 575) ; ~0x1c0 = ~"+finite"315 ret i1 %0316}317 318define i1 @is_minus_finite_f(float %x) {319; X86-LABEL: is_minus_finite_f:320; X86: # %bb.0: # %entry321; X86-NEXT: movl {{[0-9]+}}(%esp), %eax322; X86-NEXT: testl %eax, %eax323; X86-NEXT: sets %cl324; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF325; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000326; X86-NEXT: setl %al327; X86-NEXT: andb %cl, %al328; X86-NEXT: retl329;330; X64-LABEL: is_minus_finite_f:331; X64: # %bb.0: # %entry332; X64-NEXT: movd %xmm0, %eax333; X64-NEXT: testl %eax, %eax334; X64-NEXT: sets %cl335; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF336; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000337; X64-NEXT: setl %al338; X64-NEXT: andb %cl, %al339; X64-NEXT: retq340entry:341 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 56) ; 0x38 = "-finite"342 ret i1 %0343}344 345define i1 @not_is_minus_finite_f(float %x) {346; X86-LABEL: not_is_minus_finite_f:347; X86: # %bb.0: # %entry348; X86-NEXT: movl {{[0-9]+}}(%esp), %eax349; X86-NEXT: testl %eax, %eax350; X86-NEXT: setns %cl351; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF352; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000353; X86-NEXT: setge %al354; X86-NEXT: orb %cl, %al355; X86-NEXT: retl356;357; X64-LABEL: not_is_minus_finite_f:358; X64: # %bb.0: # %entry359; X64-NEXT: movd %xmm0, %eax360; X64-NEXT: testl %eax, %eax361; X64-NEXT: setns %cl362; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF363; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000364; X64-NEXT: setge %al365; X64-NEXT: orb %cl, %al366; X64-NEXT: retq367entry:368 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 967) ; ~0x38 = ~"-finite"369 ret i1 %0370}371 372define i1 @isnormal_f(float %x) #1 {373; X86-LABEL: isnormal_f:374; X86: # %bb.0: # %entry375; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF376; X86-NEXT: andl {{[0-9]+}}(%esp), %eax377; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000378; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000379; X86-NEXT: setb %al380; X86-NEXT: retl381;382; X64-LABEL: isnormal_f:383; X64: # %bb.0: # %entry384; X64-NEXT: movd %xmm0, %eax385; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF386; X64-NEXT: addl $-8388608, %eax # imm = 0xFF800000387; X64-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000388; X64-NEXT: setb %al389; X64-NEXT: retq390entry:391 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 264) ; 0x108 = "normal"392 ret i1 %0393}394 395define i1 @not_isnormal_f(float %x) #1 {396; X86-LABEL: not_isnormal_f:397; X86: # %bb.0: # %entry398; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF399; X86-NEXT: andl {{[0-9]+}}(%esp), %eax400; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000401; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000402; X86-NEXT: setae %al403; X86-NEXT: retl404;405; X64-LABEL: not_isnormal_f:406; X64: # %bb.0: # %entry407; X64-NEXT: movd %xmm0, %eax408; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF409; X64-NEXT: addl $-8388608, %eax # imm = 0xFF800000410; X64-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000411; X64-NEXT: setae %al412; X64-NEXT: retq413entry:414 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 759) ; ~0x108 = "~normal"415 ret i1 %0416}417 418define i1 @is_plus_normal_f(float %x) {419; X86-LABEL: is_plus_normal_f:420; X86: # %bb.0: # %entry421; X86-NEXT: movl {{[0-9]+}}(%esp), %eax422; X86-NEXT: testl %eax, %eax423; X86-NEXT: setns %cl424; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF425; X86-NEXT: addl $-8388608, %eax # imm = 0xFF800000426; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000427; X86-NEXT: setb %al428; X86-NEXT: andb %cl, %al429; X86-NEXT: retl430;431; X64-LABEL: is_plus_normal_f:432; X64: # %bb.0: # %entry433; X64-NEXT: movd %xmm0, %eax434; X64-NEXT: testl %eax, %eax435; X64-NEXT: setns %cl436; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF437; X64-NEXT: addl $-8388608, %eax # imm = 0xFF800000438; X64-NEXT: cmpl $2130706432, %eax # imm = 0x7F000000439; X64-NEXT: setb %al440; X64-NEXT: andb %cl, %al441; X64-NEXT: retq442entry:443 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 256) ; 0x100 = "+normal"444 ret i1 %0445}446 447define i1 @issubnormal_f(float %x) {448; X86-LABEL: issubnormal_f:449; X86: # %bb.0: # %entry450; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF451; X86-NEXT: andl {{[0-9]+}}(%esp), %eax452; X86-NEXT: decl %eax453; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF454; X86-NEXT: setb %al455; X86-NEXT: retl456;457; X64-LABEL: issubnormal_f:458; X64: # %bb.0: # %entry459; X64-NEXT: movd %xmm0, %eax460; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF461; X64-NEXT: decl %eax462; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF463; X64-NEXT: setb %al464; X64-NEXT: retq465entry:466 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 144) ; 0x90 = "subnormal"467 ret i1 %0468}469 470define i1 @issubnormal_f_daz(float %x) #0 {471; X86-LABEL: issubnormal_f_daz:472; X86: # %bb.0: # %entry473; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF474; X86-NEXT: andl {{[0-9]+}}(%esp), %eax475; X86-NEXT: decl %eax476; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF477; X86-NEXT: setb %al478; X86-NEXT: retl479;480; X64-LABEL: issubnormal_f_daz:481; X64: # %bb.0: # %entry482; X64-NEXT: movd %xmm0, %eax483; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF484; X64-NEXT: decl %eax485; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF486; X64-NEXT: setb %al487; X64-NEXT: retq488entry:489 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 144) ; 0x90 = "subnormal"490 ret i1 %0491}492 493define i1 @issubnormal_f_maybe_daz(float %x) #1 {494; X86-LABEL: issubnormal_f_maybe_daz:495; X86: # %bb.0: # %entry496; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF497; X86-NEXT: andl {{[0-9]+}}(%esp), %eax498; X86-NEXT: decl %eax499; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF500; X86-NEXT: setb %al501; X86-NEXT: retl502;503; X64-LABEL: issubnormal_f_maybe_daz:504; X64: # %bb.0: # %entry505; X64-NEXT: movd %xmm0, %eax506; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF507; X64-NEXT: decl %eax508; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF509; X64-NEXT: setb %al510; X64-NEXT: retq511entry:512 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 144) ; 0x90 = "subnormal"513 ret i1 %0514}515 516define i1 @not_issubnormal_f(float %x) {517; X86-LABEL: not_issubnormal_f:518; X86: # %bb.0: # %entry519; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF520; X86-NEXT: andl {{[0-9]+}}(%esp), %eax521; X86-NEXT: decl %eax522; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF523; X86-NEXT: setae %al524; X86-NEXT: retl525;526; X64-LABEL: not_issubnormal_f:527; X64: # %bb.0: # %entry528; X64-NEXT: movd %xmm0, %eax529; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF530; X64-NEXT: decl %eax531; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF532; X64-NEXT: setae %al533; X64-NEXT: retq534entry:535 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 879) ; ~0x90 = "~subnormal"536 ret i1 %0537}538 539define i1 @not_issubnormal_f_daz(float %x) #0 {540; X86-LABEL: not_issubnormal_f_daz:541; X86: # %bb.0: # %entry542; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF543; X86-NEXT: andl {{[0-9]+}}(%esp), %eax544; X86-NEXT: decl %eax545; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF546; X86-NEXT: setae %al547; X86-NEXT: retl548;549; X64-LABEL: not_issubnormal_f_daz:550; X64: # %bb.0: # %entry551; X64-NEXT: movd %xmm0, %eax552; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF553; X64-NEXT: decl %eax554; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF555; X64-NEXT: setae %al556; X64-NEXT: retq557entry:558 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 879) ; ~0x90 = "~subnormal"559 ret i1 %0560}561 562define i1 @not_issubnormal_f_maybe_daz(float %x) #1 {563; X86-LABEL: not_issubnormal_f_maybe_daz:564; X86: # %bb.0: # %entry565; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF566; X86-NEXT: andl {{[0-9]+}}(%esp), %eax567; X86-NEXT: decl %eax568; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF569; X86-NEXT: setae %al570; X86-NEXT: retl571;572; X64-LABEL: not_issubnormal_f_maybe_daz:573; X64: # %bb.0: # %entry574; X64-NEXT: movd %xmm0, %eax575; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF576; X64-NEXT: decl %eax577; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF578; X64-NEXT: setae %al579; X64-NEXT: retq580entry:581 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 879) ; ~0x90 = "~subnormal"582 ret i1 %0583}584 585define i1 @is_plus_subnormal_f(float %x) {586; X86-LABEL: is_plus_subnormal_f:587; X86: # %bb.0: # %entry588; X86-NEXT: movl {{[0-9]+}}(%esp), %eax589; X86-NEXT: decl %eax590; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF591; X86-NEXT: setb %al592; X86-NEXT: retl593;594; X64-LABEL: is_plus_subnormal_f:595; X64: # %bb.0: # %entry596; X64-NEXT: movd %xmm0, %eax597; X64-NEXT: decl %eax598; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF599; X64-NEXT: setb %al600; X64-NEXT: retq601entry:602 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 128) ; 0x80 = "+subnormal"603 ret i1 %0604}605 606define i1 @not_is_plus_subnormal_f(float %x) {607; X86-LABEL: not_is_plus_subnormal_f:608; X86: # %bb.0: # %entry609; X86-NEXT: movl {{[0-9]+}}(%esp), %eax610; X86-NEXT: decl %eax611; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF612; X86-NEXT: setae %al613; X86-NEXT: retl614;615; X64-LABEL: not_is_plus_subnormal_f:616; X64: # %bb.0: # %entry617; X64-NEXT: movd %xmm0, %eax618; X64-NEXT: decl %eax619; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF620; X64-NEXT: setae %al621; X64-NEXT: retq622entry:623 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 895) ; ~0x80 = ~"+subnormal"624 ret i1 %0625}626 627define i1 @is_minus_subnormal_f(float %x) {628; X86-LABEL: is_minus_subnormal_f:629; X86: # %bb.0: # %entry630; X86-NEXT: movl {{[0-9]+}}(%esp), %eax631; X86-NEXT: testl %eax, %eax632; X86-NEXT: sets %cl633; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF634; X86-NEXT: decl %eax635; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF636; X86-NEXT: setb %al637; X86-NEXT: andb %cl, %al638; X86-NEXT: retl639;640; X64-LABEL: is_minus_subnormal_f:641; X64: # %bb.0: # %entry642; X64-NEXT: movd %xmm0, %eax643; X64-NEXT: testl %eax, %eax644; X64-NEXT: sets %cl645; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF646; X64-NEXT: decl %eax647; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF648; X64-NEXT: setb %al649; X64-NEXT: andb %cl, %al650; X64-NEXT: retq651entry:652 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 16) ; 0x10 = "-subnormal"653 ret i1 %0654}655 656define i1 @not_is_minus_subnormal_f(float %x) {657; X86-LABEL: not_is_minus_subnormal_f:658; X86: # %bb.0: # %entry659; X86-NEXT: movl {{[0-9]+}}(%esp), %eax660; X86-NEXT: testl %eax, %eax661; X86-NEXT: setns %cl662; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF663; X86-NEXT: decl %eax664; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF665; X86-NEXT: setae %al666; X86-NEXT: orb %cl, %al667; X86-NEXT: retl668;669; X64-LABEL: not_is_minus_subnormal_f:670; X64: # %bb.0: # %entry671; X64-NEXT: movd %xmm0, %eax672; X64-NEXT: testl %eax, %eax673; X64-NEXT: setns %cl674; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF675; X64-NEXT: decl %eax676; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF677; X64-NEXT: setae %al678; X64-NEXT: orb %cl, %al679; X64-NEXT: retq680entry:681 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1007) ; ~0x10 = ~"-subnormal"682 ret i1 %0683}684 685define i1 @iszero_f(float %x) {686; X86-LABEL: iszero_f:687; X86: # %bb.0: # %entry688; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF689; X86-NEXT: sete %al690; X86-NEXT: retl691;692; X64-LABEL: iszero_f:693; X64: # %bb.0: # %entry694; X64-NEXT: movd %xmm0, %eax695; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF696; X64-NEXT: sete %al697; X64-NEXT: retq698entry:699 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 96) ; 0x60 = "zero"700 ret i1 %0701}702 703define i1 @iszero_f_daz(float %x) #0 {704; X86-LABEL: iszero_f_daz:705; X86: # %bb.0: # %entry706; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF707; X86-NEXT: sete %al708; X86-NEXT: retl709;710; X64-LABEL: iszero_f_daz:711; X64: # %bb.0: # %entry712; X64-NEXT: movd %xmm0, %eax713; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF714; X64-NEXT: sete %al715; X64-NEXT: retq716entry:717 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 96) ; 0x60 = "zero"718 ret i1 %0719}720 721define i1 @iszero_f_maybe_daz(float %x) #1 {722; X86-LABEL: iszero_f_maybe_daz:723; X86: # %bb.0: # %entry724; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF725; X86-NEXT: sete %al726; X86-NEXT: retl727;728; X64-LABEL: iszero_f_maybe_daz:729; X64: # %bb.0: # %entry730; X64-NEXT: movd %xmm0, %eax731; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF732; X64-NEXT: sete %al733; X64-NEXT: retq734entry:735 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 96) ; 0x60 = "zero"736 ret i1 %0737}738 739define i1 @not_iszero_f(float %x) {740; X86-LABEL: not_iszero_f:741; X86: # %bb.0: # %entry742; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF743; X86-NEXT: setne %al744; X86-NEXT: retl745;746; X64-LABEL: not_iszero_f:747; X64: # %bb.0: # %entry748; X64-NEXT: movd %xmm0, %eax749; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF750; X64-NEXT: setne %al751; X64-NEXT: retq752entry:753 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 927) ; ~0x60 = "~zero"754 ret i1 %0755}756 757define i1 @not_iszero_f_daz(float %x) #0 {758; X86-LABEL: not_iszero_f_daz:759; X86: # %bb.0: # %entry760; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF761; X86-NEXT: setne %al762; X86-NEXT: retl763;764; X64-LABEL: not_iszero_f_daz:765; X64: # %bb.0: # %entry766; X64-NEXT: movd %xmm0, %eax767; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF768; X64-NEXT: setne %al769; X64-NEXT: retq770entry:771 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 927) ; ~0x60 = "~zero"772 ret i1 %0773}774 775define i1 @not_iszero_f_maybe_daz(float %x) #1 {776; X86-LABEL: not_iszero_f_maybe_daz:777; X86: # %bb.0: # %entry778; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF779; X86-NEXT: setne %al780; X86-NEXT: retl781;782; X64-LABEL: not_iszero_f_maybe_daz:783; X64: # %bb.0: # %entry784; X64-NEXT: movd %xmm0, %eax785; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF786; X64-NEXT: setne %al787; X64-NEXT: retq788entry:789 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 927) ; ~0x60 = "~zero"790 ret i1 %0791}792 793define i1 @issubnormal_or_zero_f(float %x) {794; X86-LABEL: issubnormal_or_zero_f:795; X86: # %bb.0: # %entry796; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000797; X86-NEXT: sete %al798; X86-NEXT: retl799;800; X64-LABEL: issubnormal_or_zero_f:801; X64: # %bb.0: # %entry802; X64-NEXT: movd %xmm0, %eax803; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000804; X64-NEXT: sete %al805; X64-NEXT: retq806entry:807 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 240) ; 0xf0 = "subnormal|zero"808 ret i1 %0809}810 811define i1 @issubnormal_or_zero_f_daz(float %x) #0 {812; X86-LABEL: issubnormal_or_zero_f_daz:813; X86: # %bb.0: # %entry814; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000815; X86-NEXT: sete %al816; X86-NEXT: retl817;818; X64-LABEL: issubnormal_or_zero_f_daz:819; X64: # %bb.0: # %entry820; X64-NEXT: movd %xmm0, %eax821; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000822; X64-NEXT: sete %al823; X64-NEXT: retq824entry:825 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 240) ; 0xf0 = "subnormal|zero"826 ret i1 %0827}828 829define i1 @issubnormal_or_zero_f_maybe_daz(float %x) #1 {830; X86-LABEL: issubnormal_or_zero_f_maybe_daz:831; X86: # %bb.0: # %entry832; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000833; X86-NEXT: sete %al834; X86-NEXT: retl835;836; X64-LABEL: issubnormal_or_zero_f_maybe_daz:837; X64: # %bb.0: # %entry838; X64-NEXT: movd %xmm0, %eax839; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000840; X64-NEXT: sete %al841; X64-NEXT: retq842entry:843 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 240) ; 0xf0 = "subnormal|zero"844 ret i1 %0845}846 847define i1 @not_issubnormal_or_zero_f(float %x) {848; X86-LABEL: not_issubnormal_or_zero_f:849; X86: # %bb.0: # %entry850; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000851; X86-NEXT: setne %al852; X86-NEXT: retl853;854; X64-LABEL: not_issubnormal_or_zero_f:855; X64: # %bb.0: # %entry856; X64-NEXT: movd %xmm0, %eax857; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000858; X64-NEXT: setne %al859; X64-NEXT: retq860entry:861 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 783) ; ~0xf0 = "~(subnormal|zero)"862 ret i1 %0863}864 865define i1 @not_issubnormal_or_zero_f_daz(float %x) #0 {866; X86-LABEL: not_issubnormal_or_zero_f_daz:867; X86: # %bb.0: # %entry868; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000869; X86-NEXT: setne %al870; X86-NEXT: retl871;872; X64-LABEL: not_issubnormal_or_zero_f_daz:873; X64: # %bb.0: # %entry874; X64-NEXT: movd %xmm0, %eax875; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000876; X64-NEXT: setne %al877; X64-NEXT: retq878entry:879 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 783) ; ~0xf0 = "~(subnormal|zero)"880 ret i1 %0881}882 883define i1 @not_issubnormal_or_zero_f_maybe_daz(float %x) #1 {884; X86-LABEL: not_issubnormal_or_zero_f_maybe_daz:885; X86: # %bb.0: # %entry886; X86-NEXT: testl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000887; X86-NEXT: setne %al888; X86-NEXT: retl889;890; X64-LABEL: not_issubnormal_or_zero_f_maybe_daz:891; X64: # %bb.0: # %entry892; X64-NEXT: movd %xmm0, %eax893; X64-NEXT: testl $2139095040, %eax # imm = 0x7F800000894; X64-NEXT: setne %al895; X64-NEXT: retq896entry:897 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 783) ; ~0xf0 = "~(subnormal|zero)"898 ret i1 %0899}900 901define i1 @is_plus_zero_f(float %x) {902; X86-LABEL: is_plus_zero_f:903; X86: # %bb.0: # %entry904; X86-NEXT: cmpl $0, {{[0-9]+}}(%esp)905; X86-NEXT: sete %al906; X86-NEXT: retl907;908; X64-LABEL: is_plus_zero_f:909; X64: # %bb.0: # %entry910; X64-NEXT: movd %xmm0, %eax911; X64-NEXT: testl %eax, %eax912; X64-NEXT: sete %al913; X64-NEXT: retq914entry:915 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 64) ; 0x40 = "+zero"916 ret i1 %0917}918 919define i1 @not_is_plus_zero_f(float %x) {920; X86-LABEL: not_is_plus_zero_f:921; X86: # %bb.0: # %entry922; X86-NEXT: cmpl $0, {{[0-9]+}}(%esp)923; X86-NEXT: setne %al924; X86-NEXT: retl925;926; X64-LABEL: not_is_plus_zero_f:927; X64: # %bb.0: # %entry928; X64-NEXT: movd %xmm0, %eax929; X64-NEXT: testl %eax, %eax930; X64-NEXT: setne %al931; X64-NEXT: retq932entry:933 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 959) ; ~0x40 = ~"+zero"934 ret i1 %0935}936 937define i1 @is_minus_zero_f(float %x) {938; X86-LABEL: is_minus_zero_f:939; X86: # %bb.0: # %entry940; X86-NEXT: xorl %eax, %eax941; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax942; X86-NEXT: seto %al943; X86-NEXT: retl944;945; X64-LABEL: is_minus_zero_f:946; X64: # %bb.0: # %entry947; X64-NEXT: movd %xmm0, %eax948; X64-NEXT: negl %eax949; X64-NEXT: seto %al950; X64-NEXT: retq951entry:952 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 32) ; 0x20 = "-zero"953 ret i1 %0954}955 956define i1 @not_is_minus_zero_f(float %x) {957; X86-LABEL: not_is_minus_zero_f:958; X86: # %bb.0: # %entry959; X86-NEXT: xorl %eax, %eax960; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax961; X86-NEXT: setno %al962; X86-NEXT: retl963;964; X64-LABEL: not_is_minus_zero_f:965; X64: # %bb.0: # %entry966; X64-NEXT: movd %xmm0, %eax967; X64-NEXT: negl %eax968; X64-NEXT: setno %al969; X64-NEXT: retq970entry:971 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 991) ; ~0x20 = ~"-zero"972 ret i1 %0973}974 975define i1 @isnan_f_strictfp(float %x) strictfp {976; X86-LABEL: isnan_f_strictfp:977; X86: # %bb.0: # %entry978; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF979; X86-NEXT: andl {{[0-9]+}}(%esp), %eax980; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001981; X86-NEXT: setge %al982; X86-NEXT: retl983;984; X64-LABEL: isnan_f_strictfp:985; X64: # %bb.0: # %entry986; X64-NEXT: movd %xmm0, %eax987; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF988; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001989; X64-NEXT: setge %al990; X64-NEXT: retq991entry:992 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 3) strictfp ; "nan"993 ret i1 %0994}995 996define i1 @not_isnan_f_strictfp(float %x) strictfp {997; X86-LABEL: not_isnan_f_strictfp:998; X86: # %bb.0: # %entry999; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1000; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1001; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011002; X86-NEXT: setl %al1003; X86-NEXT: retl1004;1005; X64-LABEL: not_isnan_f_strictfp:1006; X64: # %bb.0: # %entry1007; X64-NEXT: movd %xmm0, %eax1008; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1009; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011010; X64-NEXT: setl %al1011; X64-NEXT: retq1012entry:1013 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1020) strictfp ; ~"nan"1014 ret i1 %01015}1016 1017define i1 @isfinite_f_strictfp(float %x) strictfp {1018; X86-LABEL: isfinite_f_strictfp:1019; X86: # %bb.0: # %entry1020; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1021; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1022; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000001023; X86-NEXT: setl %al1024; X86-NEXT: retl1025;1026; X64-LABEL: isfinite_f_strictfp:1027; X64: # %bb.0: # %entry1028; X64-NEXT: movd %xmm0, %eax1029; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1030; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000001031; X64-NEXT: setl %al1032; X64-NEXT: retq1033entry:1034 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 504) strictfp ; 0x1f8 = "finite"1035 ret i1 %01036}1037 1038define i1 @not_isfinite_f_strictfp(float %x) strictfp {1039; X86-LABEL: not_isfinite_f_strictfp:1040; X86: # %bb.0: # %entry1041; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1042; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1043; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000001044; X86-NEXT: setge %al1045; X86-NEXT: retl1046;1047; X64-LABEL: not_isfinite_f_strictfp:1048; X64: # %bb.0: # %entry1049; X64-NEXT: movd %xmm0, %eax1050; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1051; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000001052; X64-NEXT: setge %al1053; X64-NEXT: retq1054entry:1055 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 519) strictfp ; ~0x1f8 = ~"finite"1056 ret i1 %01057}1058 1059define i1 @iszero_f_strictfp(float %x) strictfp {1060; X86-LABEL: iszero_f_strictfp:1061; X86: # %bb.0: # %entry1062; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF1063; X86-NEXT: sete %al1064; X86-NEXT: retl1065;1066; X64-LABEL: iszero_f_strictfp:1067; X64: # %bb.0: # %entry1068; X64-NEXT: movd %xmm0, %eax1069; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF1070; X64-NEXT: sete %al1071; X64-NEXT: retq1072entry:1073 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 96) strictfp ; 0x60 = "zero"1074 ret i1 %01075}1076 1077define i1 @not_iszero_f_strictfp(float %x) strictfp {1078; X86-LABEL: not_iszero_f_strictfp:1079; X86: # %bb.0: # %entry1080; X86-NEXT: testl $2147483647, {{[0-9]+}}(%esp) # imm = 0x7FFFFFFF1081; X86-NEXT: setne %al1082; X86-NEXT: retl1083;1084; X64-LABEL: not_iszero_f_strictfp:1085; X64: # %bb.0: # %entry1086; X64-NEXT: movd %xmm0, %eax1087; X64-NEXT: testl $2147483647, %eax # imm = 0x7FFFFFFF1088; X64-NEXT: setne %al1089; X64-NEXT: retq1090entry:1091 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 927) strictfp ; ~0x60 = ~"zero"1092 ret i1 %01093}1094 1095define i1 @isnan_d(double %x) {1096; X86-LABEL: isnan_d:1097; X86: # %bb.0: # %entry1098; X86-NEXT: fldl {{[0-9]+}}(%esp)1099; X86-NEXT: fucomp %st(0)1100; X86-NEXT: fnstsw %ax1101; X86-NEXT: # kill: def $ah killed $ah killed $ax1102; X86-NEXT: sahf1103; X86-NEXT: setp %al1104; X86-NEXT: retl1105;1106; X64-LABEL: isnan_d:1107; X64: # %bb.0: # %entry1108; X64-NEXT: ucomisd %xmm0, %xmm01109; X64-NEXT: setp %al1110; X64-NEXT: retq1111entry:1112 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 3) ; "nan"1113 ret i1 %01114}1115 1116define i1 @isinf_d(double %x) {1117; X86-LABEL: isinf_d:1118; X86: # %bb.0: # %entry1119; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1120; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1121; X86-NEXT: xorl $2146435072, %eax # imm = 0x7FF000001122; X86-NEXT: orl {{[0-9]+}}(%esp), %eax1123; X86-NEXT: sete %al1124; X86-NEXT: retl1125;1126; X64-GENERIC-LABEL: isinf_d:1127; X64-GENERIC: # %bb.0: # %entry1128; X64-GENERIC-NEXT: movq %xmm0, %rax1129; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1130; X64-GENERIC-NEXT: andq %rax, %rcx1131; X64-GENERIC-NEXT: movabsq $9218868437227405312, %rax # imm = 0x7FF00000000000001132; X64-GENERIC-NEXT: cmpq %rax, %rcx1133; X64-GENERIC-NEXT: sete %al1134; X64-GENERIC-NEXT: retq1135;1136; X64-NDD-LABEL: isinf_d:1137; X64-NDD: # %bb.0: # %entry1138; X64-NDD-NEXT: movq %xmm0, %rax1139; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1140; X64-NDD-NEXT: andq %rcx, %rax1141; X64-NDD-NEXT: movabsq $9218868437227405312, %rcx # imm = 0x7FF00000000000001142; X64-NDD-NEXT: cmpq %rcx, %rax1143; X64-NDD-NEXT: sete %al1144; X64-NDD-NEXT: retq1145entry:1146 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 516) ; 0x204 = "inf"1147 ret i1 %01148}1149 1150define i1 @isfinite_d(double %x) {1151; X86-LABEL: isfinite_d:1152; X86: # %bb.0: # %entry1153; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1154; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1155; X86-NEXT: cmpl $2146435072, %eax # imm = 0x7FF000001156; X86-NEXT: setl %al1157; X86-NEXT: retl1158;1159; X64-GENERIC-LABEL: isfinite_d:1160; X64-GENERIC: # %bb.0: # %entry1161; X64-GENERIC-NEXT: movq %xmm0, %rax1162; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1163; X64-GENERIC-NEXT: andq %rax, %rcx1164; X64-GENERIC-NEXT: movabsq $9218868437227405312, %rax # imm = 0x7FF00000000000001165; X64-GENERIC-NEXT: cmpq %rax, %rcx1166; X64-GENERIC-NEXT: setl %al1167; X64-GENERIC-NEXT: retq1168;1169; X64-NDD-LABEL: isfinite_d:1170; X64-NDD: # %bb.0: # %entry1171; X64-NDD-NEXT: movq %xmm0, %rax1172; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1173; X64-NDD-NEXT: andq %rcx, %rax1174; X64-NDD-NEXT: movabsq $9218868437227405312, %rcx # imm = 0x7FF00000000000001175; X64-NDD-NEXT: cmpq %rcx, %rax1176; X64-NDD-NEXT: setl %al1177; X64-NDD-NEXT: retq1178entry:1179 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 504) ; 0x1f8 = "finite"1180 ret i1 %01181}1182 1183define i1 @isnormal_d(double %x) {1184; X86-LABEL: isnormal_d:1185; X86: # %bb.0: # %entry1186; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1187; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1188; X86-NEXT: addl $-1048576, %eax # imm = 0xFFF000001189; X86-NEXT: shrl $21, %eax1190; X86-NEXT: cmpl $1023, %eax # imm = 0x3FF1191; X86-NEXT: setb %al1192; X86-NEXT: retl1193;1194; X64-GENERIC-LABEL: isnormal_d:1195; X64-GENERIC: # %bb.0: # %entry1196; X64-GENERIC-NEXT: movq %xmm0, %rax1197; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1198; X64-GENERIC-NEXT: andq %rax, %rcx1199; X64-GENERIC-NEXT: movabsq $-4503599627370496, %rax # imm = 0xFFF00000000000001200; X64-GENERIC-NEXT: addq %rcx, %rax1201; X64-GENERIC-NEXT: shrq $53, %rax1202; X64-GENERIC-NEXT: cmpl $1023, %eax # imm = 0x3FF1203; X64-GENERIC-NEXT: setb %al1204; X64-GENERIC-NEXT: retq1205;1206; X64-NDD-LABEL: isnormal_d:1207; X64-NDD: # %bb.0: # %entry1208; X64-NDD-NEXT: movq %xmm0, %rax1209; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1210; X64-NDD-NEXT: andq %rcx, %rax1211; X64-NDD-NEXT: movabsq $-4503599627370496, %rcx # imm = 0xFFF00000000000001212; X64-NDD-NEXT: addq %rcx, %rax1213; X64-NDD-NEXT: shrq $53, %rax1214; X64-NDD-NEXT: cmpl $1023, %eax # imm = 0x3FF1215; X64-NDD-NEXT: setb %al1216; X64-NDD-NEXT: retq1217entry:1218 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 264) ; 0x108 = "normal"1219 ret i1 %01220}1221 1222define i1 @issubnormal_d(double %x) {1223; X86-LABEL: issubnormal_d:1224; X86: # %bb.0: # %entry1225; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1226; X86-NEXT: movl $2147483647, %ecx # imm = 0x7FFFFFFF1227; X86-NEXT: andl {{[0-9]+}}(%esp), %ecx1228; X86-NEXT: addl $-1, %eax1229; X86-NEXT: adcl $-1, %ecx1230; X86-NEXT: cmpl $-1, %eax1231; X86-NEXT: sbbl $1048575, %ecx # imm = 0xFFFFF1232; X86-NEXT: setb %al1233; X86-NEXT: retl1234;1235; X64-GENERIC-LABEL: issubnormal_d:1236; X64-GENERIC: # %bb.0: # %entry1237; X64-GENERIC-NEXT: movq %xmm0, %rax1238; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1239; X64-GENERIC-NEXT: andq %rax, %rcx1240; X64-GENERIC-NEXT: decq %rcx1241; X64-GENERIC-NEXT: movabsq $4503599627370495, %rax # imm = 0xFFFFFFFFFFFFF1242; X64-GENERIC-NEXT: cmpq %rax, %rcx1243; X64-GENERIC-NEXT: setb %al1244; X64-GENERIC-NEXT: retq1245;1246; X64-NDD-LABEL: issubnormal_d:1247; X64-NDD: # %bb.0: # %entry1248; X64-NDD-NEXT: movq %xmm0, %rax1249; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1250; X64-NDD-NEXT: andq %rcx, %rax1251; X64-NDD-NEXT: decq %rax1252; X64-NDD-NEXT: movabsq $4503599627370495, %rcx # imm = 0xFFFFFFFFFFFFF1253; X64-NDD-NEXT: cmpq %rcx, %rax1254; X64-NDD-NEXT: setb %al1255; X64-NDD-NEXT: retq1256entry:1257 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 144) ; 0x90 = "subnormal"1258 ret i1 %01259}1260 1261define i1 @iszero_d(double %x) {1262; X86-LABEL: iszero_d:1263; X86: # %bb.0: # %entry1264; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1265; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1266; X86-NEXT: orl {{[0-9]+}}(%esp), %eax1267; X86-NEXT: sete %al1268; X86-NEXT: retl1269;1270; X64-LABEL: iszero_d:1271; X64: # %bb.0: # %entry1272; X64-NEXT: movq %xmm0, %rax1273; X64-NEXT: shlq %rax1274; X64-NEXT: testq %rax, %rax1275; X64-NEXT: sete %al1276; X64-NEXT: retq1277entry:1278 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 96) ; 0x60 = "zero"1279 ret i1 %01280}1281 1282define i1 @issignaling_d(double %x) {1283; X86-LABEL: issignaling_d:1284; X86: # %bb.0: # %entry1285; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1286; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1287; X86-NEXT: xorl %ecx, %ecx1288; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx1289; X86-NEXT: movl $2146435072, %ecx # imm = 0x7FF000001290; X86-NEXT: sbbl %eax, %ecx1291; X86-NEXT: setl %cl1292; X86-NEXT: cmpl $2146959360, %eax # imm = 0x7FF800001293; X86-NEXT: setl %al1294; X86-NEXT: andb %cl, %al1295; X86-NEXT: retl1296;1297; X64-GENERIC-LABEL: issignaling_d:1298; X64-GENERIC: # %bb.0: # %entry1299; X64-GENERIC-NEXT: movq %xmm0, %rax1300; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1301; X64-GENERIC-NEXT: andq %rax, %rcx1302; X64-GENERIC-NEXT: movabsq $9221120237041090560, %rax # imm = 0x7FF80000000000001303; X64-GENERIC-NEXT: cmpq %rax, %rcx1304; X64-GENERIC-NEXT: setl %dl1305; X64-GENERIC-NEXT: movabsq $9218868437227405312, %rax # imm = 0x7FF00000000000001306; X64-GENERIC-NEXT: cmpq %rax, %rcx1307; X64-GENERIC-NEXT: setg %al1308; X64-GENERIC-NEXT: andb %dl, %al1309; X64-GENERIC-NEXT: retq1310;1311; X64-NDD-LABEL: issignaling_d:1312; X64-NDD: # %bb.0: # %entry1313; X64-NDD-NEXT: movq %xmm0, %rax1314; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1315; X64-NDD-NEXT: andq %rcx, %rax1316; X64-NDD-NEXT: movabsq $9221120237041090560, %rcx # imm = 0x7FF80000000000001317; X64-NDD-NEXT: cmpq %rcx, %rax1318; X64-NDD-NEXT: setl %cl1319; X64-NDD-NEXT: movabsq $9218868437227405312, %rdx # imm = 0x7FF00000000000001320; X64-NDD-NEXT: cmpq %rdx, %rax1321; X64-NDD-NEXT: setg %al1322; X64-NDD-NEXT: andb %cl, %al1323; X64-NDD-NEXT: retq1324entry:1325 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1) ; "snan"1326 ret i1 %01327}1328 1329define i1 @isquiet_d(double %x) {1330; X86-LABEL: isquiet_d:1331; X86: # %bb.0: # %entry1332; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1333; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1334; X86-NEXT: cmpl $2146959360, %eax # imm = 0x7FF800001335; X86-NEXT: setge %al1336; X86-NEXT: retl1337;1338; X64-GENERIC-LABEL: isquiet_d:1339; X64-GENERIC: # %bb.0: # %entry1340; X64-GENERIC-NEXT: movq %xmm0, %rax1341; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1342; X64-GENERIC-NEXT: andq %rax, %rcx1343; X64-GENERIC-NEXT: movabsq $9221120237041090559, %rax # imm = 0x7FF7FFFFFFFFFFFF1344; X64-GENERIC-NEXT: cmpq %rax, %rcx1345; X64-GENERIC-NEXT: setg %al1346; X64-GENERIC-NEXT: retq1347;1348; X64-NDD-LABEL: isquiet_d:1349; X64-NDD: # %bb.0: # %entry1350; X64-NDD-NEXT: movq %xmm0, %rax1351; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1352; X64-NDD-NEXT: andq %rcx, %rax1353; X64-NDD-NEXT: movabsq $9221120237041090559, %rcx # imm = 0x7FF7FFFFFFFFFFFF1354; X64-NDD-NEXT: cmpq %rcx, %rax1355; X64-NDD-NEXT: setg %al1356; X64-NDD-NEXT: retq1357entry:1358 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 2) ; "qnan"1359 ret i1 %01360}1361 1362define i1 @isnan_d_strictfp(double %x) strictfp {1363; X86-LABEL: isnan_d_strictfp:1364; X86: # %bb.0: # %entry1365; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1366; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1367; X86-NEXT: xorl %ecx, %ecx1368; X86-NEXT: cmpl {{[0-9]+}}(%esp), %ecx1369; X86-NEXT: movl $2146435072, %ecx # imm = 0x7FF000001370; X86-NEXT: sbbl %eax, %ecx1371; X86-NEXT: setl %al1372; X86-NEXT: retl1373;1374; X64-GENERIC-LABEL: isnan_d_strictfp:1375; X64-GENERIC: # %bb.0: # %entry1376; X64-GENERIC-NEXT: movq %xmm0, %rax1377; X64-GENERIC-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1378; X64-GENERIC-NEXT: andq %rax, %rcx1379; X64-GENERIC-NEXT: movabsq $9218868437227405312, %rax # imm = 0x7FF00000000000001380; X64-GENERIC-NEXT: cmpq %rax, %rcx1381; X64-GENERIC-NEXT: setg %al1382; X64-GENERIC-NEXT: retq1383;1384; X64-NDD-LABEL: isnan_d_strictfp:1385; X64-NDD: # %bb.0: # %entry1386; X64-NDD-NEXT: movq %xmm0, %rax1387; X64-NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF1388; X64-NDD-NEXT: andq %rcx, %rax1389; X64-NDD-NEXT: movabsq $9218868437227405312, %rcx # imm = 0x7FF00000000000001390; X64-NDD-NEXT: cmpq %rcx, %rax1391; X64-NDD-NEXT: setg %al1392; X64-NDD-NEXT: retq1393entry:1394 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 3) strictfp ; "nan"1395 ret i1 %01396}1397 1398define i1 @iszero_d_strictfp(double %x) strictfp {1399; X86-LABEL: iszero_d_strictfp:1400; X86: # %bb.0: # %entry1401; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1402; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1403; X86-NEXT: orl {{[0-9]+}}(%esp), %eax1404; X86-NEXT: sete %al1405; X86-NEXT: retl1406;1407; X64-LABEL: iszero_d_strictfp:1408; X64: # %bb.0: # %entry1409; X64-NEXT: movq %xmm0, %rax1410; X64-NEXT: shlq %rax1411; X64-NEXT: testq %rax, %rax1412; X64-NEXT: sete %al1413; X64-NEXT: retq1414entry:1415 %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 96) strictfp ; 0x60 = "zero"1416 ret i1 %01417}1418 1419 1420 1421define <1 x i1> @isnan_v1f(<1 x float> %x) {1422; X86-LABEL: isnan_v1f:1423; X86: # %bb.0: # %entry1424; X86-NEXT: flds {{[0-9]+}}(%esp)1425; X86-NEXT: fucomp %st(0)1426; X86-NEXT: fnstsw %ax1427; X86-NEXT: # kill: def $ah killed $ah killed $ax1428; X86-NEXT: sahf1429; X86-NEXT: setp %al1430; X86-NEXT: retl1431;1432; X64-LABEL: isnan_v1f:1433; X64: # %bb.0: # %entry1434; X64-NEXT: ucomiss %xmm0, %xmm01435; X64-NEXT: setp %al1436; X64-NEXT: retq1437entry:1438 %0 = tail call <1 x i1> @llvm.is.fpclass.v1f32(<1 x float> %x, i32 3) ; "nan"1439 ret <1 x i1> %01440}1441 1442define <1 x i1> @isnan_v1f_strictfp(<1 x float> %x) strictfp {1443; X86-LABEL: isnan_v1f_strictfp:1444; X86: # %bb.0: # %entry1445; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1446; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1447; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011448; X86-NEXT: setge %al1449; X86-NEXT: retl1450;1451; X64-LABEL: isnan_v1f_strictfp:1452; X64: # %bb.0: # %entry1453; X64-NEXT: movd %xmm0, %eax1454; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1455; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011456; X64-NEXT: setge %al1457; X64-NEXT: retq1458entry:1459 %0 = tail call <1 x i1> @llvm.is.fpclass.v1f32(<1 x float> %x, i32 3) strictfp ; "nan"1460 ret <1 x i1> %01461}1462 1463define <2 x i1> @isnan_v2f(<2 x float> %x) {1464; X86-LABEL: isnan_v2f:1465; X86: # %bb.0: # %entry1466; X86-NEXT: flds {{[0-9]+}}(%esp)1467; X86-NEXT: flds {{[0-9]+}}(%esp)1468; X86-NEXT: fucomp %st(0)1469; X86-NEXT: fnstsw %ax1470; X86-NEXT: # kill: def $ah killed $ah killed $ax1471; X86-NEXT: sahf1472; X86-NEXT: setp %cl1473; X86-NEXT: fucomp %st(0)1474; X86-NEXT: fnstsw %ax1475; X86-NEXT: # kill: def $ah killed $ah killed $ax1476; X86-NEXT: sahf1477; X86-NEXT: setp %dl1478; X86-NEXT: movl %ecx, %eax1479; X86-NEXT: retl1480;1481; X64-LABEL: isnan_v2f:1482; X64: # %bb.0: # %entry1483; X64-NEXT: cmpunordps %xmm0, %xmm01484; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]1485; X64-NEXT: retq1486entry:1487 %0 = tail call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %x, i32 3) ; "nan"1488 ret <2 x i1> %01489}1490 1491 1492define <2 x i1> @isnot_nan_v2f(<2 x float> %x) {1493; X86-LABEL: isnot_nan_v2f:1494; X86: # %bb.0: # %entry1495; X86-NEXT: flds {{[0-9]+}}(%esp)1496; X86-NEXT: flds {{[0-9]+}}(%esp)1497; X86-NEXT: fucomp %st(0)1498; X86-NEXT: fnstsw %ax1499; X86-NEXT: # kill: def $ah killed $ah killed $ax1500; X86-NEXT: sahf1501; X86-NEXT: setnp %cl1502; X86-NEXT: fucomp %st(0)1503; X86-NEXT: fnstsw %ax1504; X86-NEXT: # kill: def $ah killed $ah killed $ax1505; X86-NEXT: sahf1506; X86-NEXT: setnp %dl1507; X86-NEXT: movl %ecx, %eax1508; X86-NEXT: retl1509;1510; X64-LABEL: isnot_nan_v2f:1511; X64: # %bb.0: # %entry1512; X64-NEXT: cmpordps %xmm0, %xmm01513; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]1514; X64-NEXT: retq1515entry:1516 %0 = tail call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %x, i32 1020) ; 0x3fc = "zero|subnormal|normal|inf"1517 ret <2 x i1> %01518}1519 1520define <2 x i1> @isnan_v2f_strictfp(<2 x float> %x) strictfp {1521; X86-LABEL: isnan_v2f_strictfp:1522; X86: # %bb.0: # %entry1523; X86-NEXT: movl $2147483647, %ecx # imm = 0x7FFFFFFF1524; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1525; X86-NEXT: andl %ecx, %eax1526; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011527; X86-NEXT: setge %al1528; X86-NEXT: andl {{[0-9]+}}(%esp), %ecx1529; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000011530; X86-NEXT: setge %dl1531; X86-NEXT: retl1532;1533; X64-LABEL: isnan_v2f_strictfp:1534; X64: # %bb.0: # %entry1535; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1,1,3]1536; X64-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01537; X64-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01538; X64-NEXT: retq1539entry:1540 %0 = tail call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %x, i32 3) strictfp ; "nan"1541 ret <2 x i1> %01542}1543 1544define <4 x i1> @isnan_v4f(<4 x float> %x) {1545; X86-LABEL: isnan_v4f:1546; X86: # %bb.0: # %entry1547; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1548; X86-NEXT: flds {{[0-9]+}}(%esp)1549; X86-NEXT: flds {{[0-9]+}}(%esp)1550; X86-NEXT: flds {{[0-9]+}}(%esp)1551; X86-NEXT: flds {{[0-9]+}}(%esp)1552; X86-NEXT: fucomp %st(0)1553; X86-NEXT: fnstsw %ax1554; X86-NEXT: # kill: def $ah killed $ah killed $ax1555; X86-NEXT: sahf1556; X86-NEXT: setp %dh1557; X86-NEXT: shlb $2, %dh1558; X86-NEXT: fucomp %st(0)1559; X86-NEXT: fnstsw %ax1560; X86-NEXT: # kill: def $ah killed $ah killed $ax1561; X86-NEXT: sahf1562; X86-NEXT: setp %dl1563; X86-NEXT: shlb $3, %dl1564; X86-NEXT: orb %dh, %dl1565; X86-NEXT: fucomp %st(0)1566; X86-NEXT: fnstsw %ax1567; X86-NEXT: # kill: def $ah killed $ah killed $ax1568; X86-NEXT: sahf1569; X86-NEXT: setp %dh1570; X86-NEXT: fucomp %st(0)1571; X86-NEXT: fnstsw %ax1572; X86-NEXT: # kill: def $ah killed $ah killed $ax1573; X86-NEXT: sahf1574; X86-NEXT: setp %al1575; X86-NEXT: addb %al, %al1576; X86-NEXT: orb %dh, %al1577; X86-NEXT: orb %dl, %al1578; X86-NEXT: movb %al, (%ecx)1579; X86-NEXT: movl %ecx, %eax1580; X86-NEXT: retl $41581;1582; X64-LABEL: isnan_v4f:1583; X64: # %bb.0: # %entry1584; X64-NEXT: cmpunordps %xmm0, %xmm01585; X64-NEXT: retq1586entry:1587 %0 = tail call <4 x i1> @llvm.is.fpclass.v4f32(<4 x float> %x, i32 3) ; "nan"1588 ret <4 x i1> %01589}1590 1591define <4 x i1> @isnan_v4f_strictfp(<4 x float> %x) strictfp {1592; X86-LABEL: isnan_v4f_strictfp:1593; X86: # %bb.0: # %entry1594; X86-NEXT: pushl %esi1595; X86-NEXT: .cfi_def_cfa_offset 81596; X86-NEXT: .cfi_offset %esi, -81597; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1598; X86-NEXT: movl $2147483647, %ecx # imm = 0x7FFFFFFF1599; X86-NEXT: movl {{[0-9]+}}(%esp), %edx1600; X86-NEXT: andl %ecx, %edx1601; X86-NEXT: cmpl $2139095041, %edx # imm = 0x7F8000011602; X86-NEXT: setge %dh1603; X86-NEXT: shlb $2, %dh1604; X86-NEXT: movl {{[0-9]+}}(%esp), %esi1605; X86-NEXT: andl %ecx, %esi1606; X86-NEXT: cmpl $2139095041, %esi # imm = 0x7F8000011607; X86-NEXT: setge %dl1608; X86-NEXT: shlb $3, %dl1609; X86-NEXT: orb %dh, %dl1610; X86-NEXT: movl {{[0-9]+}}(%esp), %esi1611; X86-NEXT: andl %ecx, %esi1612; X86-NEXT: cmpl $2139095041, %esi # imm = 0x7F8000011613; X86-NEXT: setge %dh1614; X86-NEXT: andl {{[0-9]+}}(%esp), %ecx1615; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000011616; X86-NEXT: setge %cl1617; X86-NEXT: addb %cl, %cl1618; X86-NEXT: orb %dh, %cl1619; X86-NEXT: orb %dl, %cl1620; X86-NEXT: movb %cl, (%eax)1621; X86-NEXT: popl %esi1622; X86-NEXT: .cfi_def_cfa_offset 41623; X86-NEXT: retl $41624;1625; X64-LABEL: isnan_v4f_strictfp:1626; X64: # %bb.0: # %entry1627; X64-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01628; X64-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01629; X64-NEXT: retq1630entry:1631 %0 = tail call <4 x i1> @llvm.is.fpclass.v4f32(<4 x float> %x, i32 3) strictfp ; "nan"1632 ret <4 x i1> %01633}1634 1635define i1 @isnone_f(float %x) {1636; X86-LABEL: isnone_f:1637; X86: # %bb.0: # %entry1638; X86-NEXT: xorl %eax, %eax1639; X86-NEXT: retl1640;1641; X64-LABEL: isnone_f:1642; X64: # %bb.0: # %entry1643; X64-NEXT: xorl %eax, %eax1644; X64-NEXT: retq1645entry:1646 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 0)1647 ret i1 %01648}1649 1650define i1 @isany_f(float %x) {1651; X86-LABEL: isany_f:1652; X86: # %bb.0: # %entry1653; X86-NEXT: movb $1, %al1654; X86-NEXT: retl1655;1656; X64-LABEL: isany_f:1657; X64: # %bb.0: # %entry1658; X64-NEXT: movb $1, %al1659; X64-NEXT: retq1660entry:1661 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1023)1662 ret i1 %01663}1664 1665 1666define i1 @iszero_or_nan_f(float %x) {1667; X86-LABEL: iszero_or_nan_f:1668; X86: # %bb.0: # %entry1669; X86-NEXT: flds {{[0-9]+}}(%esp)1670; X86-NEXT: fldz1671; X86-NEXT: fucompp1672; X86-NEXT: fnstsw %ax1673; X86-NEXT: # kill: def $ah killed $ah killed $ax1674; X86-NEXT: sahf1675; X86-NEXT: sete %al1676; X86-NEXT: retl1677;1678; X64-LABEL: iszero_or_nan_f:1679; X64: # %bb.0: # %entry1680; X64-NEXT: xorps %xmm1, %xmm11681; X64-NEXT: ucomiss %xmm1, %xmm01682; X64-NEXT: sete %al1683; X64-NEXT: retq1684entry:1685 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 99) ; 0x60|0x3 = "zero|nan"1686 ret i1 %01687}1688 1689define i1 @iszero_or_nan_f_daz(float %x) #0 {1690; X86-LABEL: iszero_or_nan_f_daz:1691; X86: # %bb.0: # %entry1692; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1693; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1694; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011695; X86-NEXT: setge %cl1696; X86-NEXT: testl %eax, %eax1697; X86-NEXT: sete %al1698; X86-NEXT: orb %cl, %al1699; X86-NEXT: retl1700;1701; X64-LABEL: iszero_or_nan_f_daz:1702; X64: # %bb.0: # %entry1703; X64-NEXT: movd %xmm0, %eax1704; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1705; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011706; X64-NEXT: setge %cl1707; X64-NEXT: testl %eax, %eax1708; X64-NEXT: sete %al1709; X64-NEXT: orb %cl, %al1710; X64-NEXT: retq1711entry:1712 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 99) ; 0x60|0x3 = "zero|nan"1713 ret i1 %01714}1715 1716define i1 @iszero_or_nan_f_maybe_daz(float %x) #1 {1717; X86-LABEL: iszero_or_nan_f_maybe_daz:1718; X86: # %bb.0: # %entry1719; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1720; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1721; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011722; X86-NEXT: setge %cl1723; X86-NEXT: testl %eax, %eax1724; X86-NEXT: sete %al1725; X86-NEXT: orb %cl, %al1726; X86-NEXT: retl1727;1728; X64-LABEL: iszero_or_nan_f_maybe_daz:1729; X64: # %bb.0: # %entry1730; X64-NEXT: movd %xmm0, %eax1731; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1732; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011733; X64-NEXT: setge %cl1734; X64-NEXT: testl %eax, %eax1735; X64-NEXT: sete %al1736; X64-NEXT: orb %cl, %al1737; X64-NEXT: retq1738entry:1739 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 99) ; 0x60|0x3 = "zero|nan"1740 ret i1 %01741}1742 1743define i1 @not_iszero_or_nan_f(float %x) {1744; X86-LABEL: not_iszero_or_nan_f:1745; X86: # %bb.0: # %entry1746; X86-NEXT: flds {{[0-9]+}}(%esp)1747; X86-NEXT: fldz1748; X86-NEXT: fucompp1749; X86-NEXT: fnstsw %ax1750; X86-NEXT: # kill: def $ah killed $ah killed $ax1751; X86-NEXT: sahf1752; X86-NEXT: setne %al1753; X86-NEXT: retl1754;1755; X64-LABEL: not_iszero_or_nan_f:1756; X64: # %bb.0: # %entry1757; X64-NEXT: xorps %xmm1, %xmm11758; X64-NEXT: ucomiss %xmm1, %xmm01759; X64-NEXT: setne %al1760; X64-NEXT: retq1761entry:1762 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 924) ; ~0x60 = "~(zero|nan)"1763 ret i1 %01764}1765 1766define i1 @not_iszero_or_nan_f_daz(float %x) #0 {1767; X86-LABEL: not_iszero_or_nan_f_daz:1768; X86: # %bb.0: # %entry1769; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1770; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1771; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011772; X86-NEXT: setl %cl1773; X86-NEXT: testl %eax, %eax1774; X86-NEXT: setne %al1775; X86-NEXT: andb %cl, %al1776; X86-NEXT: retl1777;1778; X64-LABEL: not_iszero_or_nan_f_daz:1779; X64: # %bb.0: # %entry1780; X64-NEXT: movd %xmm0, %eax1781; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1782; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011783; X64-NEXT: setl %cl1784; X64-NEXT: testl %eax, %eax1785; X64-NEXT: setne %al1786; X64-NEXT: andb %cl, %al1787; X64-NEXT: retq1788entry:1789 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 924) ; ~(0x60|0x3) = "~(zero|nan)"1790 ret i1 %01791}1792 1793define i1 @not_iszero_or_nan_f_maybe_daz(float %x) #1 {1794; X86-LABEL: not_iszero_or_nan_f_maybe_daz:1795; X86: # %bb.0: # %entry1796; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1797; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1798; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011799; X86-NEXT: setl %cl1800; X86-NEXT: testl %eax, %eax1801; X86-NEXT: setne %al1802; X86-NEXT: andb %cl, %al1803; X86-NEXT: retl1804;1805; X64-LABEL: not_iszero_or_nan_f_maybe_daz:1806; X64: # %bb.0: # %entry1807; X64-NEXT: movd %xmm0, %eax1808; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1809; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011810; X64-NEXT: setl %cl1811; X64-NEXT: testl %eax, %eax1812; X64-NEXT: setne %al1813; X64-NEXT: andb %cl, %al1814; X64-NEXT: retq1815entry:1816 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 924) ; ~(0x60|0x3) = "~(zero|nan)"1817 ret i1 %01818}1819 1820define i1 @iszero_or_qnan_f(float %x) {1821; X86-LABEL: iszero_or_qnan_f:1822; X86: # %bb.0: # %entry1823; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1824; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1825; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000001826; X86-NEXT: setge %cl1827; X86-NEXT: testl %eax, %eax1828; X86-NEXT: sete %al1829; X86-NEXT: orb %cl, %al1830; X86-NEXT: retl1831;1832; X64-LABEL: iszero_or_qnan_f:1833; X64: # %bb.0: # %entry1834; X64-NEXT: movd %xmm0, %eax1835; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1836; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000001837; X64-NEXT: setge %cl1838; X64-NEXT: testl %eax, %eax1839; X64-NEXT: sete %al1840; X64-NEXT: orb %cl, %al1841; X64-NEXT: retq1842entry:1843 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 98) ; 0x60|0x2 = "zero|qnan"1844 ret i1 %01845}1846 1847define i1 @iszero_or_snan_f(float %x) {1848; X86-LABEL: iszero_or_snan_f:1849; X86: # %bb.0: # %entry1850; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1851; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1852; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000001853; X86-NEXT: setl %cl1854; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011855; X86-NEXT: setge %dl1856; X86-NEXT: andb %cl, %dl1857; X86-NEXT: testl %eax, %eax1858; X86-NEXT: sete %al1859; X86-NEXT: orb %dl, %al1860; X86-NEXT: retl1861;1862; X64-GENERIC-LABEL: iszero_or_snan_f:1863; X64-GENERIC: # %bb.0: # %entry1864; X64-GENERIC-NEXT: movd %xmm0, %eax1865; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1866; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000001867; X64-GENERIC-NEXT: setl %cl1868; X64-GENERIC-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011869; X64-GENERIC-NEXT: setge %dl1870; X64-GENERIC-NEXT: andb %cl, %dl1871; X64-GENERIC-NEXT: testl %eax, %eax1872; X64-GENERIC-NEXT: sete %al1873; X64-GENERIC-NEXT: orb %dl, %al1874; X64-GENERIC-NEXT: retq1875;1876; X64-NDD-LABEL: iszero_or_snan_f:1877; X64-NDD: # %bb.0: # %entry1878; X64-NDD-NEXT: movd %xmm0, %eax1879; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1880; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000001881; X64-NDD-NEXT: setl %cl1882; X64-NDD-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011883; X64-NDD-NEXT: setge %dl1884; X64-NDD-NEXT: andb %dl, %cl1885; X64-NDD-NEXT: testl %eax, %eax1886; X64-NDD-NEXT: sete %al1887; X64-NDD-NEXT: orb %cl, %al1888; X64-NDD-NEXT: retq1889entry:1890 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 97) ; 0x60|0x1 = "zero|snan"1891 ret i1 %01892}1893 1894define i1 @not_iszero_or_qnan_f(float %x) {1895; X86-LABEL: not_iszero_or_qnan_f:1896; X86: # %bb.0: # %entry1897; X86-NEXT: pushl %esi1898; X86-NEXT: .cfi_def_cfa_offset 81899; X86-NEXT: .cfi_offset %esi, -81900; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1901; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1902; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000001903; X86-NEXT: setl %cl1904; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011905; X86-NEXT: setge %dl1906; X86-NEXT: andb %cl, %dl1907; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000001908; X86-NEXT: sete %cl1909; X86-NEXT: leal -1(%eax), %esi1910; X86-NEXT: cmpl $8388607, %esi # imm = 0x7FFFFF1911; X86-NEXT: setb %ch1912; X86-NEXT: orb %cl, %ch1913; X86-NEXT: addl $-8388608, %eax # imm = 0xFF8000001914; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000001915; X86-NEXT: setb %al1916; X86-NEXT: orb %dl, %al1917; X86-NEXT: orb %ch, %al1918; X86-NEXT: popl %esi1919; X86-NEXT: .cfi_def_cfa_offset 41920; X86-NEXT: retl1921;1922; X64-GENERIC-LABEL: not_iszero_or_qnan_f:1923; X64-GENERIC: # %bb.0: # %entry1924; X64-GENERIC-NEXT: movd %xmm0, %eax1925; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1926; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000001927; X64-GENERIC-NEXT: setl %cl1928; X64-GENERIC-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011929; X64-GENERIC-NEXT: setge %dl1930; X64-GENERIC-NEXT: andb %cl, %dl1931; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000001932; X64-GENERIC-NEXT: sete %cl1933; X64-GENERIC-NEXT: leal -1(%rax), %esi1934; X64-GENERIC-NEXT: cmpl $8388607, %esi # imm = 0x7FFFFF1935; X64-GENERIC-NEXT: setb %sil1936; X64-GENERIC-NEXT: orb %cl, %sil1937; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF8000001938; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000001939; X64-GENERIC-NEXT: setb %al1940; X64-GENERIC-NEXT: orb %dl, %al1941; X64-GENERIC-NEXT: orb %sil, %al1942; X64-GENERIC-NEXT: retq1943;1944; X64-NDD-LABEL: not_iszero_or_qnan_f:1945; X64-NDD: # %bb.0: # %entry1946; X64-NDD-NEXT: movd %xmm0, %eax1947; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1948; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000001949; X64-NDD-NEXT: setl %cl1950; X64-NDD-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000011951; X64-NDD-NEXT: setge %dl1952; X64-NDD-NEXT: andb %dl, %cl1953; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000001954; X64-NDD-NEXT: sete %dl1955; X64-NDD-NEXT: decl %eax, %esi1956; X64-NDD-NEXT: cmpl $8388607, %esi # imm = 0x7FFFFF1957; X64-NDD-NEXT: setb %sil1958; X64-NDD-NEXT: orb %sil, %dl1959; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF8000001960; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000001961; X64-NDD-NEXT: setb %al1962; X64-NDD-NEXT: orb %cl, %al1963; X64-NDD-NEXT: orb %dl, %al1964; X64-NDD-NEXT: retq1965entry:1966 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 925) ; ~(0x60|0x2) = "~(zero|qnan)"1967 ret i1 %01968}1969 1970define i1 @not_iszero_or_snan_f(float %x) {1971; X86-LABEL: not_iszero_or_snan_f:1972; X86: # %bb.0: # %entry1973; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF1974; X86-NEXT: andl {{[0-9]+}}(%esp), %eax1975; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000001976; X86-NEXT: sete %cl1977; X86-NEXT: leal -1(%eax), %edx1978; X86-NEXT: cmpl $8388607, %edx # imm = 0x7FFFFF1979; X86-NEXT: setb %dl1980; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000001981; X86-NEXT: setge %ch1982; X86-NEXT: orb %cl, %ch1983; X86-NEXT: orb %dl, %ch1984; X86-NEXT: addl $-8388608, %eax # imm = 0xFF8000001985; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000001986; X86-NEXT: setb %al1987; X86-NEXT: orb %ch, %al1988; X86-NEXT: retl1989;1990; X64-GENERIC-LABEL: not_iszero_or_snan_f:1991; X64-GENERIC: # %bb.0: # %entry1992; X64-GENERIC-NEXT: movd %xmm0, %eax1993; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF1994; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000001995; X64-GENERIC-NEXT: sete %cl1996; X64-GENERIC-NEXT: leal -1(%rax), %edx1997; X64-GENERIC-NEXT: cmpl $8388607, %edx # imm = 0x7FFFFF1998; X64-GENERIC-NEXT: setb %dl1999; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002000; X64-GENERIC-NEXT: setge %sil2001; X64-GENERIC-NEXT: orb %cl, %sil2002; X64-GENERIC-NEXT: orb %dl, %sil2003; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF8000002004; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002005; X64-GENERIC-NEXT: setb %al2006; X64-GENERIC-NEXT: orb %sil, %al2007; X64-GENERIC-NEXT: retq2008;2009; X64-NDD-LABEL: not_iszero_or_snan_f:2010; X64-NDD: # %bb.0: # %entry2011; X64-NDD-NEXT: movd %xmm0, %eax2012; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2013; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002014; X64-NDD-NEXT: sete %cl2015; X64-NDD-NEXT: decl %eax, %edx2016; X64-NDD-NEXT: cmpl $8388607, %edx # imm = 0x7FFFFF2017; X64-NDD-NEXT: setb %dl2018; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002019; X64-NDD-NEXT: setge %sil2020; X64-NDD-NEXT: orb %sil, %cl2021; X64-NDD-NEXT: orb %dl, %cl2022; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF8000002023; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002024; X64-NDD-NEXT: setb %al2025; X64-NDD-NEXT: orb %cl, %al2026; X64-NDD-NEXT: retq2027entry:2028 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 926) ; ~(0x60|0x1) = "~(zero|snan)"2029 ret i1 %02030}2031 2032define i1 @isinf_or_nan_f(float %x) {2033; X86-LABEL: isinf_or_nan_f:2034; X86: # %bb.0: # %entry2035; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF2036; X86-NEXT: andl {{[0-9]+}}(%esp), %eax2037; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002038; X86-NEXT: setge %al2039; X86-NEXT: retl2040;2041; X64-LABEL: isinf_or_nan_f:2042; X64: # %bb.0: # %entry2043; X64-NEXT: movd %xmm0, %eax2044; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2045; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002046; X64-NEXT: setge %al2047; X64-NEXT: retq2048entry:2049 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 519) ; 0x204|0x3 = "inf|nan"2050 ret i1 %02051}2052 2053define i1 @not_isinf_or_nan_f(float %x) {2054; X86-LABEL: not_isinf_or_nan_f:2055; X86: # %bb.0: # %entry2056; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF2057; X86-NEXT: andl {{[0-9]+}}(%esp), %eax2058; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002059; X86-NEXT: setl %al2060; X86-NEXT: retl2061;2062; X64-LABEL: not_isinf_or_nan_f:2063; X64: # %bb.0: # %entry2064; X64-NEXT: movd %xmm0, %eax2065; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2066; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002067; X64-NEXT: setl %al2068; X64-NEXT: retq2069entry:2070 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 504) ; ~(0x204|0x3) = "~(inf|nan)"2071 ret i1 %02072}2073 2074define i1 @isfinite_or_nan_f(float %x) {2075; X86-LABEL: isfinite_or_nan_f:2076; X86: # %bb.0: # %entry2077; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF2078; X86-NEXT: andl {{[0-9]+}}(%esp), %eax2079; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002080; X86-NEXT: setne %al2081; X86-NEXT: retl2082;2083; X64-LABEL: isfinite_or_nan_f:2084; X64: # %bb.0: # %entry2085; X64-NEXT: movd %xmm0, %eax2086; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2087; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002088; X64-NEXT: setne %al2089; X64-NEXT: retq2090entry:2091 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 507) ; 0x1f8|0x3 = "finite|nan"2092 ret i1 %02093}2094 2095define i1 @not_isfinite_or_nan_f(float %x) {2096; X86-LABEL: not_isfinite_or_nan_f:2097; X86: # %bb.0: # %entry2098; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF2099; X86-NEXT: andl {{[0-9]+}}(%esp), %eax2100; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002101; X86-NEXT: sete %al2102; X86-NEXT: retl2103;2104; X64-LABEL: not_isfinite_or_nan_f:2105; X64: # %bb.0: # %entry2106; X64-NEXT: movd %xmm0, %eax2107; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2108; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002109; X64-NEXT: sete %al2110; X64-NEXT: retq2111entry:2112 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 516) ; ~(0x1f8|0x3) = "~(finite|nan)"2113 ret i1 %02114}2115 2116define i1 @is_plus_inf_or_nan_f(float %x) {2117; X86-LABEL: is_plus_inf_or_nan_f:2118; X86: # %bb.0:2119; X86-NEXT: flds {{[0-9]+}}(%esp)2120; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2121; X86-NEXT: fucompp2122; X86-NEXT: fnstsw %ax2123; X86-NEXT: # kill: def $ah killed $ah killed $ax2124; X86-NEXT: sahf2125; X86-NEXT: sete %al2126; X86-NEXT: retl2127;2128; X64-LABEL: is_plus_inf_or_nan_f:2129; X64: # %bb.0:2130; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02131; X64-NEXT: sete %al2132; X64-NEXT: retq2133 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 515) ; 0x200|0x3 = "+inf|nan"2134 ret i1 %class2135}2136 2137define i1 @is_minus_inf_or_nan_f(float %x) {2138; X86-LABEL: is_minus_inf_or_nan_f:2139; X86: # %bb.0:2140; X86-NEXT: flds {{[0-9]+}}(%esp)2141; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2142; X86-NEXT: fucompp2143; X86-NEXT: fnstsw %ax2144; X86-NEXT: # kill: def $ah killed $ah killed $ax2145; X86-NEXT: sahf2146; X86-NEXT: sete %al2147; X86-NEXT: retl2148;2149; X64-LABEL: is_minus_inf_or_nan_f:2150; X64: # %bb.0:2151; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02152; X64-NEXT: sete %al2153; X64-NEXT: retq2154 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 7) ; "-inf|nan"2155 ret i1 %class2156}2157 2158define i1 @not_is_plus_inf_or_nan_f(float %x) {2159; X86-LABEL: not_is_plus_inf_or_nan_f:2160; X86: # %bb.0:2161; X86-NEXT: flds {{[0-9]+}}(%esp)2162; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2163; X86-NEXT: fucompp2164; X86-NEXT: fnstsw %ax2165; X86-NEXT: # kill: def $ah killed $ah killed $ax2166; X86-NEXT: sahf2167; X86-NEXT: setne %al2168; X86-NEXT: retl2169;2170; X64-LABEL: not_is_plus_inf_or_nan_f:2171; X64: # %bb.0:2172; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02173; X64-NEXT: setne %al2174; X64-NEXT: retq2175 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 508) ; ~(0x200|0x3) = "~(+inf|nan)"2176 ret i1 %class2177}2178 2179define i1 @not_is_minus_inf_or_nan_f(float %x) {2180; X86-LABEL: not_is_minus_inf_or_nan_f:2181; X86: # %bb.0:2182; X86-NEXT: flds {{[0-9]+}}(%esp)2183; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2184; X86-NEXT: fucompp2185; X86-NEXT: fnstsw %ax2186; X86-NEXT: # kill: def $ah killed $ah killed $ax2187; X86-NEXT: sahf2188; X86-NEXT: setne %al2189; X86-NEXT: retl2190;2191; X64-LABEL: not_is_minus_inf_or_nan_f:2192; X64: # %bb.0:2193; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02194; X64-NEXT: setne %al2195; X64-NEXT: retq2196 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1016) ; "~(-inf|nan)"2197 ret i1 %class2198}2199 2200define i1 @is_plus_inf_or_snan_f(float %x) {2201; X86-LABEL: is_plus_inf_or_snan_f:2202; X86: # %bb.0:2203; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2204; X86-NEXT: movl %eax, %ecx2205; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2206; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002207; X86-NEXT: setl %dl2208; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012209; X86-NEXT: setge %cl2210; X86-NEXT: andb %dl, %cl2211; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002212; X86-NEXT: sete %al2213; X86-NEXT: orb %cl, %al2214; X86-NEXT: retl2215;2216; X64-GENERIC-LABEL: is_plus_inf_or_snan_f:2217; X64-GENERIC: # %bb.0:2218; X64-GENERIC-NEXT: movd %xmm0, %eax2219; X64-GENERIC-NEXT: movl %eax, %ecx2220; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2221; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002222; X64-GENERIC-NEXT: setl %dl2223; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012224; X64-GENERIC-NEXT: setge %cl2225; X64-GENERIC-NEXT: andb %dl, %cl2226; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002227; X64-GENERIC-NEXT: sete %al2228; X64-GENERIC-NEXT: orb %cl, %al2229; X64-GENERIC-NEXT: retq2230;2231; X64-NDD-LABEL: is_plus_inf_or_snan_f:2232; X64-NDD: # %bb.0:2233; X64-NDD-NEXT: movd %xmm0, %eax2234; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF2235; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002236; X64-NDD-NEXT: setl %dl2237; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012238; X64-NDD-NEXT: setge %cl2239; X64-NDD-NEXT: andb %dl, %cl2240; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002241; X64-NDD-NEXT: sete %al2242; X64-NDD-NEXT: orb %cl, %al2243; X64-NDD-NEXT: retq2244 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 513) ; 0x200|0x1 = "+inf|snan"2245 ret i1 %class2246}2247 2248define i1 @is_plus_inf_or_qnan_f(float %x) {2249; X86-LABEL: is_plus_inf_or_qnan_f:2250; X86: # %bb.0:2251; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2252; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002253; X86-NEXT: sete %cl2254; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2255; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002256; X86-NEXT: setge %al2257; X86-NEXT: orb %cl, %al2258; X86-NEXT: retl2259;2260; X64-LABEL: is_plus_inf_or_qnan_f:2261; X64: # %bb.0:2262; X64-NEXT: movd %xmm0, %eax2263; X64-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002264; X64-NEXT: sete %cl2265; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2266; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002267; X64-NEXT: setge %al2268; X64-NEXT: orb %cl, %al2269; X64-NEXT: retq2270 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 514) ; 0x200|0x1 = "+inf|qnan"2271 ret i1 %class2272}2273 2274define i1 @not_is_plus_inf_or_snan_f(float %x) {2275; X86-LABEL: not_is_plus_inf_or_snan_f:2276; X86: # %bb.0:2277; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2278; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002279; X86-NEXT: sete %cl2280; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2281; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002282; X86-NEXT: setl %dl2283; X86-NEXT: orb %cl, %dl2284; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002285; X86-NEXT: setge %al2286; X86-NEXT: orb %dl, %al2287; X86-NEXT: retl2288;2289; X64-GENERIC-LABEL: not_is_plus_inf_or_snan_f:2290; X64-GENERIC: # %bb.0:2291; X64-GENERIC-NEXT: movd %xmm0, %eax2292; X64-GENERIC-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002293; X64-GENERIC-NEXT: sete %cl2294; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2295; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002296; X64-GENERIC-NEXT: setl %dl2297; X64-GENERIC-NEXT: orb %cl, %dl2298; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002299; X64-GENERIC-NEXT: setge %al2300; X64-GENERIC-NEXT: orb %dl, %al2301; X64-GENERIC-NEXT: retq2302;2303; X64-NDD-LABEL: not_is_plus_inf_or_snan_f:2304; X64-NDD: # %bb.0:2305; X64-NDD-NEXT: movd %xmm0, %eax2306; X64-NDD-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002307; X64-NDD-NEXT: sete %cl2308; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2309; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002310; X64-NDD-NEXT: setl %dl2311; X64-NDD-NEXT: orb %dl, %cl2312; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002313; X64-NDD-NEXT: setge %al2314; X64-NDD-NEXT: orb %cl, %al2315; X64-NDD-NEXT: retq2316 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 510) ; ~(+inf|snan)2317 ret i1 %class2318}2319 2320define i1 @not_is_plus_inf_or_qnan_f(float %x) {2321; X86-LABEL: not_is_plus_inf_or_qnan_f:2322; X86: # %bb.0:2323; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2324; X86-NEXT: movl %eax, %ecx2325; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2326; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002327; X86-NEXT: setl %dl2328; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012329; X86-NEXT: setge %dh2330; X86-NEXT: andb %dl, %dh2331; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002332; X86-NEXT: sete %dl2333; X86-NEXT: cmpl $2139095040, %ecx # imm = 0x7F8000002334; X86-NEXT: setl %al2335; X86-NEXT: orb %dl, %al2336; X86-NEXT: orb %dh, %al2337; X86-NEXT: retl2338;2339; X64-GENERIC-LABEL: not_is_plus_inf_or_qnan_f:2340; X64-GENERIC: # %bb.0:2341; X64-GENERIC-NEXT: movd %xmm0, %eax2342; X64-GENERIC-NEXT: movl %eax, %ecx2343; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2344; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002345; X64-GENERIC-NEXT: setl %dl2346; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012347; X64-GENERIC-NEXT: setge %sil2348; X64-GENERIC-NEXT: andb %dl, %sil2349; X64-GENERIC-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002350; X64-GENERIC-NEXT: sete %dl2351; X64-GENERIC-NEXT: cmpl $2139095040, %ecx # imm = 0x7F8000002352; X64-GENERIC-NEXT: setl %al2353; X64-GENERIC-NEXT: orb %dl, %al2354; X64-GENERIC-NEXT: orb %sil, %al2355; X64-GENERIC-NEXT: retq2356;2357; X64-NDD-LABEL: not_is_plus_inf_or_qnan_f:2358; X64-NDD: # %bb.0:2359; X64-NDD-NEXT: movd %xmm0, %eax2360; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF2361; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002362; X64-NDD-NEXT: setl %dl2363; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012364; X64-NDD-NEXT: setge %sil2365; X64-NDD-NEXT: andb %sil, %dl2366; X64-NDD-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002367; X64-NDD-NEXT: sete %al2368; X64-NDD-NEXT: cmpl $2139095040, %ecx # imm = 0x7F8000002369; X64-NDD-NEXT: setl %cl2370; X64-NDD-NEXT: orb %cl, %al2371; X64-NDD-NEXT: orb %dl, %al2372; X64-NDD-NEXT: retq2373 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 509) ; ~(+inf|qnan)2374 ret i1 %class2375}2376 2377define i1 @is_minus_inf_or_snan_f(float %x) {2378; X86-LABEL: is_minus_inf_or_snan_f:2379; X86: # %bb.0:2380; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2381; X86-NEXT: movl %eax, %ecx2382; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2383; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002384; X86-NEXT: setl %dl2385; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012386; X86-NEXT: setge %cl2387; X86-NEXT: andb %dl, %cl2388; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002389; X86-NEXT: sete %al2390; X86-NEXT: orb %cl, %al2391; X86-NEXT: retl2392;2393; X64-GENERIC-LABEL: is_minus_inf_or_snan_f:2394; X64-GENERIC: # %bb.0:2395; X64-GENERIC-NEXT: movd %xmm0, %eax2396; X64-GENERIC-NEXT: movl %eax, %ecx2397; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2398; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002399; X64-GENERIC-NEXT: setl %dl2400; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012401; X64-GENERIC-NEXT: setge %cl2402; X64-GENERIC-NEXT: andb %dl, %cl2403; X64-GENERIC-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002404; X64-GENERIC-NEXT: sete %al2405; X64-GENERIC-NEXT: orb %cl, %al2406; X64-GENERIC-NEXT: retq2407;2408; X64-NDD-LABEL: is_minus_inf_or_snan_f:2409; X64-NDD: # %bb.0:2410; X64-NDD-NEXT: movd %xmm0, %eax2411; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF2412; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002413; X64-NDD-NEXT: setl %dl2414; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012415; X64-NDD-NEXT: setge %cl2416; X64-NDD-NEXT: andb %dl, %cl2417; X64-NDD-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002418; X64-NDD-NEXT: sete %al2419; X64-NDD-NEXT: orb %cl, %al2420; X64-NDD-NEXT: retq2421 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 5) ; "-inf|snan"2422 ret i1 %class2423}2424 2425define i1 @is_minus_inf_or_qnan_f(float %x) {2426; X86-LABEL: is_minus_inf_or_qnan_f:2427; X86: # %bb.0:2428; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2429; X86-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002430; X86-NEXT: sete %cl2431; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2432; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002433; X86-NEXT: setge %al2434; X86-NEXT: orb %cl, %al2435; X86-NEXT: retl2436;2437; X64-LABEL: is_minus_inf_or_qnan_f:2438; X64: # %bb.0:2439; X64-NEXT: movd %xmm0, %eax2440; X64-NEXT: cmpl $-8388608, %eax # imm = 0xFF8000002441; X64-NEXT: sete %cl2442; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2443; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002444; X64-NEXT: setge %al2445; X64-NEXT: orb %cl, %al2446; X64-NEXT: retq2447 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 6) ; "-inf|qnan"2448 ret i1 %class2449}2450 2451define i1 @not_is_minus_inf_or_snan_f(float %x) {2452; X86-LABEL: not_is_minus_inf_or_snan_f:2453; X86: # %bb.0:2454; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2455; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002456; X86-NEXT: sete %cl2457; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2458; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002459; X86-NEXT: setl %dl2460; X86-NEXT: orb %cl, %dl2461; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002462; X86-NEXT: setge %al2463; X86-NEXT: orb %dl, %al2464; X86-NEXT: retl2465;2466; X64-GENERIC-LABEL: not_is_minus_inf_or_snan_f:2467; X64-GENERIC: # %bb.0:2468; X64-GENERIC-NEXT: movd %xmm0, %eax2469; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002470; X64-GENERIC-NEXT: sete %cl2471; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2472; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002473; X64-GENERIC-NEXT: setl %dl2474; X64-GENERIC-NEXT: orb %cl, %dl2475; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002476; X64-GENERIC-NEXT: setge %al2477; X64-GENERIC-NEXT: orb %dl, %al2478; X64-GENERIC-NEXT: retq2479;2480; X64-NDD-LABEL: not_is_minus_inf_or_snan_f:2481; X64-NDD: # %bb.0:2482; X64-NDD-NEXT: movd %xmm0, %eax2483; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002484; X64-NDD-NEXT: sete %cl2485; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2486; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002487; X64-NDD-NEXT: setl %dl2488; X64-NDD-NEXT: orb %dl, %cl2489; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002490; X64-NDD-NEXT: setge %al2491; X64-NDD-NEXT: orb %cl, %al2492; X64-NDD-NEXT: retq2493 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1018) ; "~(-inf|snan)"2494 ret i1 %class2495}2496 2497define i1 @not_is_minus_inf_or_qnan_f(float %x) {2498; X86-LABEL: not_is_minus_inf_or_qnan_f:2499; X86: # %bb.0:2500; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2501; X86-NEXT: movl %eax, %ecx2502; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2503; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002504; X86-NEXT: setl %dl2505; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012506; X86-NEXT: setge %dh2507; X86-NEXT: andb %dl, %dh2508; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002509; X86-NEXT: sete %dl2510; X86-NEXT: cmpl $2139095040, %ecx # imm = 0x7F8000002511; X86-NEXT: setl %al2512; X86-NEXT: orb %dl, %al2513; X86-NEXT: orb %dh, %al2514; X86-NEXT: retl2515;2516; X64-GENERIC-LABEL: not_is_minus_inf_or_qnan_f:2517; X64-GENERIC: # %bb.0:2518; X64-GENERIC-NEXT: movd %xmm0, %eax2519; X64-GENERIC-NEXT: movl %eax, %ecx2520; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2521; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002522; X64-GENERIC-NEXT: setl %dl2523; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012524; X64-GENERIC-NEXT: setge %sil2525; X64-GENERIC-NEXT: andb %dl, %sil2526; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002527; X64-GENERIC-NEXT: sete %dl2528; X64-GENERIC-NEXT: cmpl $2139095040, %ecx # imm = 0x7F8000002529; X64-GENERIC-NEXT: setl %al2530; X64-GENERIC-NEXT: orb %dl, %al2531; X64-GENERIC-NEXT: orb %sil, %al2532; X64-GENERIC-NEXT: retq2533;2534; X64-NDD-LABEL: not_is_minus_inf_or_qnan_f:2535; X64-NDD: # %bb.0:2536; X64-NDD-NEXT: movd %xmm0, %eax2537; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF2538; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002539; X64-NDD-NEXT: setl %dl2540; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012541; X64-NDD-NEXT: setge %sil2542; X64-NDD-NEXT: andb %sil, %dl2543; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002544; X64-NDD-NEXT: sete %al2545; X64-NDD-NEXT: cmpl $2139095040, %ecx # imm = 0x7F8000002546; X64-NDD-NEXT: setl %cl2547; X64-NDD-NEXT: orb %cl, %al2548; X64-NDD-NEXT: orb %dl, %al2549; X64-NDD-NEXT: retq2550 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1017) ; "-inf|qnan"2551 ret i1 %class2552}2553 2554define i1 @issubnormal_or_nan_f(float %x) {2555; X86-LABEL: issubnormal_or_nan_f:2556; X86: # %bb.0:2557; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF2558; X86-NEXT: andl {{[0-9]+}}(%esp), %eax2559; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000012560; X86-NEXT: setge %cl2561; X86-NEXT: decl %eax2562; X86-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF2563; X86-NEXT: setb %al2564; X86-NEXT: orb %cl, %al2565; X86-NEXT: retl2566;2567; X64-LABEL: issubnormal_or_nan_f:2568; X64: # %bb.0:2569; X64-NEXT: movd %xmm0, %eax2570; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2571; X64-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000012572; X64-NEXT: setge %cl2573; X64-NEXT: decl %eax2574; X64-NEXT: cmpl $8388607, %eax # imm = 0x7FFFFF2575; X64-NEXT: setb %al2576; X64-NEXT: orb %cl, %al2577; X64-NEXT: retq2578 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 147) ; 0x90|0x3 = "subnormal|nan"2579 ret i1 %class2580}2581 2582define i1 @issubnormal_or_zero_or_nan_f(float %x) {2583; X86-LABEL: issubnormal_or_zero_or_nan_f:2584; X86: # %bb.0:2585; X86-NEXT: flds {{[0-9]+}}(%esp)2586; X86-NEXT: fabs2587; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2588; X86-NEXT: fxch %st(1)2589; X86-NEXT: fucompp2590; X86-NEXT: fnstsw %ax2591; X86-NEXT: # kill: def $ah killed $ah killed $ax2592; X86-NEXT: sahf2593; X86-NEXT: setb %al2594; X86-NEXT: retl2595;2596; X64-LABEL: issubnormal_or_zero_or_nan_f:2597; X64: # %bb.0:2598; X64-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02599; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02600; X64-NEXT: setb %al2601; X64-NEXT: retq2602 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 243) ; 0xf0|0x3 = "subnormal|zero|nan"2603 ret i1 %class2604}2605 2606define i1 @issubnormal_or_zero_or_nan_f_daz(float %x) #0 {2607; X86-LABEL: issubnormal_or_zero_or_nan_f_daz:2608; X86: # %bb.0:2609; X86-NEXT: flds {{[0-9]+}}(%esp)2610; X86-NEXT: fldz2611; X86-NEXT: fucompp2612; X86-NEXT: fnstsw %ax2613; X86-NEXT: # kill: def $ah killed $ah killed $ax2614; X86-NEXT: sahf2615; X86-NEXT: sete %al2616; X86-NEXT: retl2617;2618; X64-LABEL: issubnormal_or_zero_or_nan_f_daz:2619; X64: # %bb.0:2620; X64-NEXT: xorps %xmm1, %xmm12621; X64-NEXT: ucomiss %xmm1, %xmm02622; X64-NEXT: sete %al2623; X64-NEXT: retq2624 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 243) ; 0xf0|0x3 = "subnormal|zero|nan"2625 ret i1 %class2626}2627 2628define i1 @issubnormal_or_zero_or_snan_f(float %x) {2629; X86-LABEL: issubnormal_or_zero_or_snan_f:2630; X86: # %bb.0:2631; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2632; X86-NEXT: movl %eax, %ecx2633; X86-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2634; X86-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002635; X86-NEXT: setl %dl2636; X86-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012637; X86-NEXT: setge %cl2638; X86-NEXT: andb %dl, %cl2639; X86-NEXT: testl $2139095040, %eax # imm = 0x7F8000002640; X86-NEXT: sete %al2641; X86-NEXT: orb %cl, %al2642; X86-NEXT: retl2643;2644; X64-GENERIC-LABEL: issubnormal_or_zero_or_snan_f:2645; X64-GENERIC: # %bb.0:2646; X64-GENERIC-NEXT: movd %xmm0, %eax2647; X64-GENERIC-NEXT: movl %eax, %ecx2648; X64-GENERIC-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF2649; X64-GENERIC-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002650; X64-GENERIC-NEXT: setl %dl2651; X64-GENERIC-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012652; X64-GENERIC-NEXT: setge %cl2653; X64-GENERIC-NEXT: andb %dl, %cl2654; X64-GENERIC-NEXT: testl $2139095040, %eax # imm = 0x7F8000002655; X64-GENERIC-NEXT: sete %al2656; X64-GENERIC-NEXT: orb %cl, %al2657; X64-GENERIC-NEXT: retq2658;2659; X64-NDD-LABEL: issubnormal_or_zero_or_snan_f:2660; X64-NDD: # %bb.0:2661; X64-NDD-NEXT: movd %xmm0, %eax2662; X64-NDD-NEXT: andl $2147483647, %eax, %ecx # imm = 0x7FFFFFFF2663; X64-NDD-NEXT: cmpl $2143289344, %ecx # imm = 0x7FC000002664; X64-NDD-NEXT: setl %dl2665; X64-NDD-NEXT: cmpl $2139095041, %ecx # imm = 0x7F8000012666; X64-NDD-NEXT: setge %cl2667; X64-NDD-NEXT: andb %dl, %cl2668; X64-NDD-NEXT: testl $2139095040, %eax # imm = 0x7F8000002669; X64-NDD-NEXT: sete %al2670; X64-NDD-NEXT: orb %cl, %al2671; X64-NDD-NEXT: retq2672 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 241) ; 0x90|0x1 = "subnormal|snan"2673 ret i1 %class2674}2675 2676define i1 @issubnormal_or_zero_or_qnan_f(float %x) {2677; X86-LABEL: issubnormal_or_zero_or_qnan_f:2678; X86: # %bb.0:2679; X86-NEXT: movl {{[0-9]+}}(%esp), %eax2680; X86-NEXT: testl $2139095040, %eax # imm = 0x7F8000002681; X86-NEXT: sete %cl2682; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2683; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002684; X86-NEXT: setge %al2685; X86-NEXT: orb %cl, %al2686; X86-NEXT: retl2687;2688; X64-LABEL: issubnormal_or_zero_or_qnan_f:2689; X64: # %bb.0:2690; X64-NEXT: movd %xmm0, %eax2691; X64-NEXT: testl $2139095040, %eax # imm = 0x7F8000002692; X64-NEXT: sete %cl2693; X64-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2694; X64-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002695; X64-NEXT: setge %al2696; X64-NEXT: orb %cl, %al2697; X64-NEXT: retq2698 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 242) ; 0x90|0x2 = "subnormal|qnan"2699 ret i1 %class2700}2701 2702define i1 @not_issubnormal_or_nan_f(float %x) {2703; X86-LABEL: not_issubnormal_or_nan_f:2704; X86: # %bb.0:2705; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF2706; X86-NEXT: andl {{[0-9]+}}(%esp), %eax2707; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002708; X86-NEXT: sete %cl2709; X86-NEXT: testl %eax, %eax2710; X86-NEXT: sete %dl2711; X86-NEXT: orb %cl, %dl2712; X86-NEXT: addl $-8388608, %eax # imm = 0xFF8000002713; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002714; X86-NEXT: setb %al2715; X86-NEXT: orb %dl, %al2716; X86-NEXT: retl2717;2718; X64-GENERIC-LABEL: not_issubnormal_or_nan_f:2719; X64-GENERIC: # %bb.0:2720; X64-GENERIC-NEXT: movd %xmm0, %eax2721; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2722; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002723; X64-GENERIC-NEXT: sete %cl2724; X64-GENERIC-NEXT: testl %eax, %eax2725; X64-GENERIC-NEXT: sete %dl2726; X64-GENERIC-NEXT: orb %cl, %dl2727; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF8000002728; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002729; X64-GENERIC-NEXT: setb %al2730; X64-GENERIC-NEXT: orb %dl, %al2731; X64-GENERIC-NEXT: retq2732;2733; X64-NDD-LABEL: not_issubnormal_or_nan_f:2734; X64-NDD: # %bb.0:2735; X64-NDD-NEXT: movd %xmm0, %eax2736; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2737; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002738; X64-NDD-NEXT: sete %cl2739; X64-NDD-NEXT: testl %eax, %eax2740; X64-NDD-NEXT: sete %dl2741; X64-NDD-NEXT: orb %dl, %cl2742; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF8000002743; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002744; X64-NDD-NEXT: setb %al2745; X64-NDD-NEXT: orb %cl, %al2746; X64-NDD-NEXT: retq2747 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 876) ; ~(0x90|0x3) = ~"subnormal|nan"2748 ret i1 %class2749}2750 2751define i1 @not_issubnormal_or_zero_or_nan_f(float %x) {2752; X86-LABEL: not_issubnormal_or_zero_or_nan_f:2753; X86: # %bb.0:2754; X86-NEXT: flds {{[0-9]+}}(%esp)2755; X86-NEXT: fabs2756; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}2757; X86-NEXT: fxch %st(1)2758; X86-NEXT: fucompp2759; X86-NEXT: fnstsw %ax2760; X86-NEXT: # kill: def $ah killed $ah killed $ax2761; X86-NEXT: sahf2762; X86-NEXT: setae %al2763; X86-NEXT: retl2764;2765; X64-LABEL: not_issubnormal_or_zero_or_nan_f:2766; X64: # %bb.0:2767; X64-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02768; X64-NEXT: ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02769; X64-NEXT: setae %al2770; X64-NEXT: retq2771 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 780) ; ~(0xf0|0x3) = ~"subnormal|zero|nan"2772 ret i1 %class2773}2774 2775define i1 @not_issubnormal_or_zero_or_nan_f_daz(float %x) #0 {2776; X86-LABEL: not_issubnormal_or_zero_or_nan_f_daz:2777; X86: # %bb.0:2778; X86-NEXT: flds {{[0-9]+}}(%esp)2779; X86-NEXT: fldz2780; X86-NEXT: fucompp2781; X86-NEXT: fnstsw %ax2782; X86-NEXT: # kill: def $ah killed $ah killed $ax2783; X86-NEXT: sahf2784; X86-NEXT: setne %al2785; X86-NEXT: retl2786;2787; X64-LABEL: not_issubnormal_or_zero_or_nan_f_daz:2788; X64: # %bb.0:2789; X64-NEXT: xorps %xmm1, %xmm12790; X64-NEXT: ucomiss %xmm1, %xmm02791; X64-NEXT: setne %al2792; X64-NEXT: retq2793 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 780) ; ~(0xf0|0x3) = ~"subnormal|zero|nan"2794 ret i1 %class2795}2796 2797define i1 @not_issubnormal_or_zero_or_snan_f(float %x) {2798; X86-LABEL: not_issubnormal_or_zero_or_snan_f:2799; X86: # %bb.0:2800; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF2801; X86-NEXT: andl {{[0-9]+}}(%esp), %eax2802; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002803; X86-NEXT: setge %cl2804; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002805; X86-NEXT: sete %dl2806; X86-NEXT: orb %cl, %dl2807; X86-NEXT: addl $-8388608, %eax # imm = 0xFF8000002808; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002809; X86-NEXT: setb %al2810; X86-NEXT: orb %dl, %al2811; X86-NEXT: retl2812;2813; X64-GENERIC-LABEL: not_issubnormal_or_zero_or_snan_f:2814; X64-GENERIC: # %bb.0:2815; X64-GENERIC-NEXT: movd %xmm0, %eax2816; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2817; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002818; X64-GENERIC-NEXT: setge %cl2819; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002820; X64-GENERIC-NEXT: sete %dl2821; X64-GENERIC-NEXT: orb %cl, %dl2822; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF8000002823; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002824; X64-GENERIC-NEXT: setb %al2825; X64-GENERIC-NEXT: orb %dl, %al2826; X64-GENERIC-NEXT: retq2827;2828; X64-NDD-LABEL: not_issubnormal_or_zero_or_snan_f:2829; X64-NDD: # %bb.0:2830; X64-NDD-NEXT: movd %xmm0, %eax2831; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2832; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002833; X64-NDD-NEXT: setge %cl2834; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002835; X64-NDD-NEXT: sete %dl2836; X64-NDD-NEXT: orb %dl, %cl2837; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF8000002838; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002839; X64-NDD-NEXT: setb %al2840; X64-NDD-NEXT: orb %cl, %al2841; X64-NDD-NEXT: retq2842 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 782) ; ~(0x90|0x1) = ~"subnormal|snan"2843 ret i1 %class2844}2845 2846define i1 @not_issubnormal_or_zero_or_qnan_f(float %x) {2847; X86-LABEL: not_issubnormal_or_zero_or_qnan_f:2848; X86: # %bb.0:2849; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF2850; X86-NEXT: andl {{[0-9]+}}(%esp), %eax2851; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002852; X86-NEXT: setl %cl2853; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000012854; X86-NEXT: setge %dl2855; X86-NEXT: andb %cl, %dl2856; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002857; X86-NEXT: sete %cl2858; X86-NEXT: orb %dl, %cl2859; X86-NEXT: addl $-8388608, %eax # imm = 0xFF8000002860; X86-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002861; X86-NEXT: setb %al2862; X86-NEXT: orb %cl, %al2863; X86-NEXT: retl2864;2865; X64-GENERIC-LABEL: not_issubnormal_or_zero_or_qnan_f:2866; X64-GENERIC: # %bb.0:2867; X64-GENERIC-NEXT: movd %xmm0, %eax2868; X64-GENERIC-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2869; X64-GENERIC-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002870; X64-GENERIC-NEXT: setl %cl2871; X64-GENERIC-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000012872; X64-GENERIC-NEXT: setge %dl2873; X64-GENERIC-NEXT: andb %cl, %dl2874; X64-GENERIC-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002875; X64-GENERIC-NEXT: sete %cl2876; X64-GENERIC-NEXT: orb %dl, %cl2877; X64-GENERIC-NEXT: addl $-8388608, %eax # imm = 0xFF8000002878; X64-GENERIC-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002879; X64-GENERIC-NEXT: setb %al2880; X64-GENERIC-NEXT: orb %cl, %al2881; X64-GENERIC-NEXT: retq2882;2883; X64-NDD-LABEL: not_issubnormal_or_zero_or_qnan_f:2884; X64-NDD: # %bb.0:2885; X64-NDD-NEXT: movd %xmm0, %eax2886; X64-NDD-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF2887; X64-NDD-NEXT: cmpl $2143289344, %eax # imm = 0x7FC000002888; X64-NDD-NEXT: setl %cl2889; X64-NDD-NEXT: cmpl $2139095041, %eax # imm = 0x7F8000012890; X64-NDD-NEXT: setge %dl2891; X64-NDD-NEXT: andb %dl, %cl2892; X64-NDD-NEXT: cmpl $2139095040, %eax # imm = 0x7F8000002893; X64-NDD-NEXT: sete %dl2894; X64-NDD-NEXT: orb %dl, %cl2895; X64-NDD-NEXT: addl $-8388608, %eax # imm = 0xFF8000002896; X64-NDD-NEXT: cmpl $2130706432, %eax # imm = 0x7F0000002897; X64-NDD-NEXT: setb %al2898; X64-NDD-NEXT: orb %cl, %al2899; X64-NDD-NEXT: retq2900 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 781) ; ~(0x90|0x2) = ~"subnormal|qnan"2901 ret i1 %class2902}2903 2904declare i1 @llvm.is.fpclass.f32(float, i32)2905declare i1 @llvm.is.fpclass.f64(double, i32)2906declare <1 x i1> @llvm.is.fpclass.v1f32(<1 x float>, i32)2907declare <2 x i1> @llvm.is.fpclass.v2f32(<2 x float>, i32)2908declare <4 x i1> @llvm.is.fpclass.v4f32(<4 x float>, i32)2909 2910; Assume DAZ2911attributes #0 = { "denormal-fp-math"="ieee,preserve-sign" }2912 2913; Maybe daz2914attributes #1 = { "denormal-fp-math"="ieee,dynamic" }2915