844 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc --mtriple=loongarch32 --mattr=+f --verify-machineinstrs < %s | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+f --verify-machineinstrs < %s | FileCheck %s4 5define i1 @isnan_f(float %x) {6; CHECK-LABEL: isnan_f:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: fclass.s $fa0, $fa09; CHECK-NEXT: movfr2gr.s $a0, $fa010; CHECK-NEXT: andi $a0, $a0, 311; CHECK-NEXT: sltu $a0, $zero, $a012; CHECK-NEXT: ret13entry:14 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 3) ; "nan"15 ret i1 %016}17 18define i1 @isnot_nan_f(float %x) {19; CHECK-LABEL: isnot_nan_f:20; CHECK: # %bb.0: # %entry21; CHECK-NEXT: fclass.s $fa0, $fa022; CHECK-NEXT: movfr2gr.s $a0, $fa023; CHECK-NEXT: andi $a0, $a0, 102024; CHECK-NEXT: sltu $a0, $zero, $a025; CHECK-NEXT: ret26entry:27 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1020) ; 0x3fc = "zero|subnormal|normal|inf"28 ret i1 %029}30 31define i1 @issignaling_f(float %x) {32; CHECK-LABEL: issignaling_f:33; CHECK: # %bb.0: # %entry34; CHECK-NEXT: fclass.s $fa0, $fa035; CHECK-NEXT: movfr2gr.s $a0, $fa036; CHECK-NEXT: andi $a0, $a0, 137; CHECK-NEXT: sltu $a0, $zero, $a038; CHECK-NEXT: ret39entry:40 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1) ; "snan"41 ret i1 %042}43 44define i1 @not_issignaling_f(float %x) {45; CHECK-LABEL: not_issignaling_f:46; CHECK: # %bb.0: # %entry47; CHECK-NEXT: fclass.s $fa0, $fa048; CHECK-NEXT: movfr2gr.s $a0, $fa049; CHECK-NEXT: andi $a0, $a0, 102250; CHECK-NEXT: sltu $a0, $zero, $a051; CHECK-NEXT: ret52entry:53 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1022) ; ~"snan"54 ret i1 %055}56 57define i1 @isquiet_f(float %x) {58; CHECK-LABEL: isquiet_f:59; CHECK: # %bb.0: # %entry60; CHECK-NEXT: fclass.s $fa0, $fa061; CHECK-NEXT: movfr2gr.s $a0, $fa062; CHECK-NEXT: andi $a0, $a0, 263; CHECK-NEXT: sltu $a0, $zero, $a064; CHECK-NEXT: ret65entry:66 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 2) ; "qnan"67 ret i1 %068}69 70define i1 @not_isquiet_f(float %x) {71; CHECK-LABEL: not_isquiet_f:72; CHECK: # %bb.0: # %entry73; CHECK-NEXT: fclass.s $fa0, $fa074; CHECK-NEXT: movfr2gr.s $a0, $fa075; CHECK-NEXT: andi $a0, $a0, 102176; CHECK-NEXT: sltu $a0, $zero, $a077; CHECK-NEXT: ret78entry:79 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1021) ; ~"qnan"80 ret i1 %081}82 83define i1 @isinf_f(float %x) {84; CHECK-LABEL: isinf_f:85; CHECK: # %bb.0: # %entry86; CHECK-NEXT: fclass.s $fa0, $fa087; CHECK-NEXT: movfr2gr.s $a0, $fa088; CHECK-NEXT: andi $a0, $a0, 6889; CHECK-NEXT: sltu $a0, $zero, $a090; CHECK-NEXT: ret91entry:92 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 516) ; 0x204 = "inf"93 ret i1 %094}95 96define i1 @not_isinf_f(float %x) {97; CHECK-LABEL: not_isinf_f:98; CHECK: # %bb.0: # %entry99; CHECK-NEXT: fclass.s $fa0, $fa0100; CHECK-NEXT: movfr2gr.s $a0, $fa0101; CHECK-NEXT: andi $a0, $a0, 955102; CHECK-NEXT: sltu $a0, $zero, $a0103; CHECK-NEXT: ret104entry:105 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 507) ; ~0x204 = "~inf"106 ret i1 %0107}108 109define i1 @is_plus_inf_f(float %x) {110; CHECK-LABEL: is_plus_inf_f:111; CHECK: # %bb.0: # %entry112; CHECK-NEXT: fclass.s $fa0, $fa0113; CHECK-NEXT: movfr2gr.s $a0, $fa0114; CHECK-NEXT: andi $a0, $a0, 64115; CHECK-NEXT: sltu $a0, $zero, $a0116; CHECK-NEXT: ret117entry:118 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 512) ; 0x200 = "+inf"119 ret i1 %0120}121 122define i1 @is_minus_inf_f(float %x) {123; CHECK-LABEL: is_minus_inf_f:124; CHECK: # %bb.0: # %entry125; CHECK-NEXT: fclass.s $fa0, $fa0126; CHECK-NEXT: movfr2gr.s $a0, $fa0127; CHECK-NEXT: andi $a0, $a0, 4128; CHECK-NEXT: sltu $a0, $zero, $a0129; CHECK-NEXT: ret130entry:131 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 4) ; "-inf"132 ret i1 %0133}134 135define i1 @not_is_minus_inf_f(float %x) {136; CHECK-LABEL: not_is_minus_inf_f:137; CHECK: # %bb.0: # %entry138; CHECK-NEXT: fclass.s $fa0, $fa0139; CHECK-NEXT: movfr2gr.s $a0, $fa0140; CHECK-NEXT: andi $a0, $a0, 1019141; CHECK-NEXT: sltu $a0, $zero, $a0142; CHECK-NEXT: ret143entry:144 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1019) ; ~"-inf"145 ret i1 %0146}147 148define i1 @isfinite_f(float %x) {149; CHECK-LABEL: isfinite_f:150; CHECK: # %bb.0: # %entry151; CHECK-NEXT: fclass.s $fa0, $fa0152; CHECK-NEXT: movfr2gr.s $a0, $fa0153; CHECK-NEXT: andi $a0, $a0, 952154; CHECK-NEXT: sltu $a0, $zero, $a0155; CHECK-NEXT: ret156entry:157 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 504) ; 0x1f8 = "finite"158 ret i1 %0159}160 161define i1 @not_isfinite_f(float %x) {162; CHECK-LABEL: not_isfinite_f:163; CHECK: # %bb.0: # %entry164; CHECK-NEXT: fclass.s $fa0, $fa0165; CHECK-NEXT: movfr2gr.s $a0, $fa0166; CHECK-NEXT: andi $a0, $a0, 71167; CHECK-NEXT: sltu $a0, $zero, $a0168; CHECK-NEXT: ret169entry:170 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 519) ; ~0x1f8 = "~finite"171 ret i1 %0172}173 174define i1 @is_plus_finite_f(float %x) {175; CHECK-LABEL: is_plus_finite_f:176; CHECK: # %bb.0: # %entry177; CHECK-NEXT: fclass.s $fa0, $fa0178; CHECK-NEXT: movfr2gr.s $a0, $fa0179; CHECK-NEXT: andi $a0, $a0, 896180; CHECK-NEXT: sltu $a0, $zero, $a0181; CHECK-NEXT: ret182entry:183 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 448) ; 0x1c0 = "+finite"184 ret i1 %0185}186 187define i1 @not_is_plus_finite_f(float %x) {188; CHECK-LABEL: not_is_plus_finite_f:189; CHECK: # %bb.0: # %entry190; CHECK-NEXT: fclass.s $fa0, $fa0191; CHECK-NEXT: movfr2gr.s $a0, $fa0192; CHECK-NEXT: andi $a0, $a0, 127193; CHECK-NEXT: sltu $a0, $zero, $a0194; CHECK-NEXT: ret195entry:196 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 575) ; ~0x1c0 = ~"+finite"197 ret i1 %0198}199 200define i1 @is_minus_finite_f(float %x) {201; CHECK-LABEL: is_minus_finite_f:202; CHECK: # %bb.0: # %entry203; CHECK-NEXT: fclass.s $fa0, $fa0204; CHECK-NEXT: movfr2gr.s $a0, $fa0205; CHECK-NEXT: andi $a0, $a0, 56206; CHECK-NEXT: sltu $a0, $zero, $a0207; CHECK-NEXT: ret208entry:209 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 56) ; 0x38 = "-finite"210 ret i1 %0211}212 213define i1 @not_is_minus_finite_f(float %x) {214; CHECK-LABEL: not_is_minus_finite_f:215; CHECK: # %bb.0: # %entry216; CHECK-NEXT: fclass.s $fa0, $fa0217; CHECK-NEXT: movfr2gr.s $a0, $fa0218; CHECK-NEXT: andi $a0, $a0, 967219; CHECK-NEXT: sltu $a0, $zero, $a0220; CHECK-NEXT: ret221entry:222 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 967) ; ~0x38 = ~"-finite"223 ret i1 %0224}225 226define i1 @isnormal_f(float %x) {227; CHECK-LABEL: isnormal_f:228; CHECK: # %bb.0: # %entry229; CHECK-NEXT: fclass.s $fa0, $fa0230; CHECK-NEXT: movfr2gr.s $a0, $fa0231; CHECK-NEXT: andi $a0, $a0, 136232; CHECK-NEXT: sltu $a0, $zero, $a0233; CHECK-NEXT: ret234entry:235 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 264) ; 0x108 = "normal"236 ret i1 %0237}238 239define i1 @not_isnormal_f(float %x) {240; CHECK-LABEL: not_isnormal_f:241; CHECK: # %bb.0: # %entry242; CHECK-NEXT: fclass.s $fa0, $fa0243; CHECK-NEXT: movfr2gr.s $a0, $fa0244; CHECK-NEXT: andi $a0, $a0, 887245; CHECK-NEXT: sltu $a0, $zero, $a0246; CHECK-NEXT: ret247entry:248 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 759) ; ~0x108 = "~normal"249 ret i1 %0250}251 252define i1 @is_plus_normal_f(float %x) {253; CHECK-LABEL: is_plus_normal_f:254; CHECK: # %bb.0: # %entry255; CHECK-NEXT: fclass.s $fa0, $fa0256; CHECK-NEXT: movfr2gr.s $a0, $fa0257; CHECK-NEXT: andi $a0, $a0, 128258; CHECK-NEXT: sltu $a0, $zero, $a0259; CHECK-NEXT: ret260entry:261 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 256) ; 0x100 = "+normal"262 ret i1 %0263}264 265define i1 @issubnormal_f(float %x) {266; CHECK-LABEL: issubnormal_f:267; CHECK: # %bb.0: # %entry268; CHECK-NEXT: fclass.s $fa0, $fa0269; CHECK-NEXT: movfr2gr.s $a0, $fa0270; CHECK-NEXT: andi $a0, $a0, 272271; CHECK-NEXT: sltu $a0, $zero, $a0272; CHECK-NEXT: ret273entry:274 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 144) ; 0x90 = "subnormal"275 ret i1 %0276}277 278define i1 @not_issubnormal_f(float %x) {279; CHECK-LABEL: not_issubnormal_f:280; CHECK: # %bb.0: # %entry281; CHECK-NEXT: fclass.s $fa0, $fa0282; CHECK-NEXT: movfr2gr.s $a0, $fa0283; CHECK-NEXT: andi $a0, $a0, 751284; CHECK-NEXT: sltu $a0, $zero, $a0285; CHECK-NEXT: ret286entry:287 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 879) ; ~0x90 = "~subnormal"288 ret i1 %0289}290 291define i1 @is_plus_subnormal_f(float %x) {292; CHECK-LABEL: is_plus_subnormal_f:293; CHECK: # %bb.0: # %entry294; CHECK-NEXT: fclass.s $fa0, $fa0295; CHECK-NEXT: movfr2gr.s $a0, $fa0296; CHECK-NEXT: andi $a0, $a0, 256297; CHECK-NEXT: sltu $a0, $zero, $a0298; CHECK-NEXT: ret299entry:300 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 128) ; 0x80 = "+subnormal"301 ret i1 %0302}303 304define i1 @not_is_plus_subnormal_f(float %x) {305; CHECK-LABEL: not_is_plus_subnormal_f:306; CHECK: # %bb.0: # %entry307; CHECK-NEXT: fclass.s $fa0, $fa0308; CHECK-NEXT: movfr2gr.s $a0, $fa0309; CHECK-NEXT: andi $a0, $a0, 767310; CHECK-NEXT: sltu $a0, $zero, $a0311; CHECK-NEXT: ret312entry:313 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 895) ; ~0x80 = ~"+subnormal"314 ret i1 %0315}316 317define i1 @is_minus_subnormal_f(float %x) {318; CHECK-LABEL: is_minus_subnormal_f:319; CHECK: # %bb.0: # %entry320; CHECK-NEXT: fclass.s $fa0, $fa0321; CHECK-NEXT: movfr2gr.s $a0, $fa0322; CHECK-NEXT: andi $a0, $a0, 16323; CHECK-NEXT: sltu $a0, $zero, $a0324; CHECK-NEXT: ret325entry:326 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 16) ; 0x10 = "-subnormal"327 ret i1 %0328}329 330define i1 @not_is_minus_subnormal_f(float %x) {331; CHECK-LABEL: not_is_minus_subnormal_f:332; CHECK: # %bb.0: # %entry333; CHECK-NEXT: fclass.s $fa0, $fa0334; CHECK-NEXT: movfr2gr.s $a0, $fa0335; CHECK-NEXT: andi $a0, $a0, 1007336; CHECK-NEXT: sltu $a0, $zero, $a0337; CHECK-NEXT: ret338entry:339 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1007) ; ~0x10 = ~"-subnormal"340 ret i1 %0341}342 343define i1 @iszero_f(float %x) {344; CHECK-LABEL: iszero_f:345; CHECK: # %bb.0: # %entry346; CHECK-NEXT: fclass.s $fa0, $fa0347; CHECK-NEXT: movfr2gr.s $a0, $fa0348; CHECK-NEXT: andi $a0, $a0, 544349; CHECK-NEXT: sltu $a0, $zero, $a0350; CHECK-NEXT: ret351entry:352 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 96) ; 0x60 = "zero"353 ret i1 %0354}355 356define i1 @not_iszero_f(float %x) {357; CHECK-LABEL: not_iszero_f:358; CHECK: # %bb.0: # %entry359; CHECK-NEXT: fclass.s $fa0, $fa0360; CHECK-NEXT: movfr2gr.s $a0, $fa0361; CHECK-NEXT: andi $a0, $a0, 479362; CHECK-NEXT: sltu $a0, $zero, $a0363; CHECK-NEXT: ret364entry:365 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 927) ; ~0x60 = "~zero"366 ret i1 %0367}368 369define i1 @issubnormal_or_zero_f(float %x) {370; CHECK-LABEL: issubnormal_or_zero_f:371; CHECK: # %bb.0: # %entry372; CHECK-NEXT: fclass.s $fa0, $fa0373; CHECK-NEXT: movfr2gr.s $a0, $fa0374; CHECK-NEXT: andi $a0, $a0, 816375; CHECK-NEXT: sltu $a0, $zero, $a0376; CHECK-NEXT: ret377entry:378 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 240) ; 0xf0 = "subnormal|zero"379 ret i1 %0380}381 382define i1 @not_issubnormal_or_zero_f(float %x) {383; CHECK-LABEL: not_issubnormal_or_zero_f:384; CHECK: # %bb.0: # %entry385; CHECK-NEXT: fclass.s $fa0, $fa0386; CHECK-NEXT: movfr2gr.s $a0, $fa0387; CHECK-NEXT: andi $a0, $a0, 207388; CHECK-NEXT: sltu $a0, $zero, $a0389; CHECK-NEXT: ret390entry:391 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 783) ; ~0xf0 = "~(subnormal|zero)"392 ret i1 %0393}394 395define i1 @is_plus_zero_f(float %x) {396; CHECK-LABEL: is_plus_zero_f:397; CHECK: # %bb.0: # %entry398; CHECK-NEXT: fclass.s $fa0, $fa0399; CHECK-NEXT: movfr2gr.s $a0, $fa0400; CHECK-NEXT: andi $a0, $a0, 512401; CHECK-NEXT: sltu $a0, $zero, $a0402; CHECK-NEXT: ret403entry:404 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 64) ; 0x40 = "+zero"405 ret i1 %0406}407 408define i1 @not_is_plus_zero_f(float %x) {409; CHECK-LABEL: not_is_plus_zero_f:410; CHECK: # %bb.0: # %entry411; CHECK-NEXT: fclass.s $fa0, $fa0412; CHECK-NEXT: movfr2gr.s $a0, $fa0413; CHECK-NEXT: andi $a0, $a0, 511414; CHECK-NEXT: sltu $a0, $zero, $a0415; CHECK-NEXT: ret416entry:417 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 959) ; ~0x40 = ~"+zero"418 ret i1 %0419}420 421define i1 @is_minus_zero_f(float %x) {422; CHECK-LABEL: is_minus_zero_f:423; CHECK: # %bb.0: # %entry424; CHECK-NEXT: fclass.s $fa0, $fa0425; CHECK-NEXT: movfr2gr.s $a0, $fa0426; CHECK-NEXT: andi $a0, $a0, 32427; CHECK-NEXT: sltu $a0, $zero, $a0428; CHECK-NEXT: ret429entry:430 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 32) ; 0x20 = "-zero"431 ret i1 %0432}433 434define i1 @not_is_minus_zero_f(float %x) {435; CHECK-LABEL: not_is_minus_zero_f:436; CHECK: # %bb.0: # %entry437; CHECK-NEXT: fclass.s $fa0, $fa0438; CHECK-NEXT: movfr2gr.s $a0, $fa0439; CHECK-NEXT: andi $a0, $a0, 991440; CHECK-NEXT: sltu $a0, $zero, $a0441; CHECK-NEXT: ret442entry:443 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 991) ; ~0x20 = ~"-zero"444 ret i1 %0445}446 447define i1 @isnone_f(float %x) {448; CHECK-LABEL: isnone_f:449; CHECK: # %bb.0: # %entry450; CHECK-NEXT: fclass.s $fa0, $fa0451; CHECK-NEXT: movfr2gr.s $a0, $fa0452; CHECK-NEXT: andi $a0, $a0, 0453; CHECK-NEXT: sltu $a0, $zero, $a0454; CHECK-NEXT: ret455entry:456 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 0)457 ret i1 %0458}459 460define i1 @isany_f(float %x) {461; CHECK-LABEL: isany_f:462; CHECK: # %bb.0: # %entry463; CHECK-NEXT: fclass.s $fa0, $fa0464; CHECK-NEXT: movfr2gr.s $a0, $fa0465; CHECK-NEXT: andi $a0, $a0, 1023466; CHECK-NEXT: sltu $a0, $zero, $a0467; CHECK-NEXT: ret468entry:469 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1023)470 ret i1 %0471}472 473define i1 @iszero_or_nan_f(float %x) {474; CHECK-LABEL: iszero_or_nan_f:475; CHECK: # %bb.0: # %entry476; CHECK-NEXT: fclass.s $fa0, $fa0477; CHECK-NEXT: movfr2gr.s $a0, $fa0478; CHECK-NEXT: andi $a0, $a0, 547479; CHECK-NEXT: sltu $a0, $zero, $a0480; CHECK-NEXT: ret481entry:482 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 99) ; 0x60|0x3 = "zero|nan"483 ret i1 %0484}485 486define i1 @not_iszero_or_nan_f(float %x) {487; CHECK-LABEL: not_iszero_or_nan_f:488; CHECK: # %bb.0: # %entry489; CHECK-NEXT: fclass.s $fa0, $fa0490; CHECK-NEXT: movfr2gr.s $a0, $fa0491; CHECK-NEXT: andi $a0, $a0, 476492; CHECK-NEXT: sltu $a0, $zero, $a0493; CHECK-NEXT: ret494entry:495 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 924) ; ~0x60 = "~(zero|nan)"496 ret i1 %0497}498 499define i1 @iszero_or_qnan_f(float %x) {500; CHECK-LABEL: iszero_or_qnan_f:501; CHECK: # %bb.0: # %entry502; CHECK-NEXT: fclass.s $fa0, $fa0503; CHECK-NEXT: movfr2gr.s $a0, $fa0504; CHECK-NEXT: andi $a0, $a0, 546505; CHECK-NEXT: sltu $a0, $zero, $a0506; CHECK-NEXT: ret507entry:508 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 98) ; 0x60|0x2 = "zero|qnan"509 ret i1 %0510}511 512define i1 @iszero_or_snan_f(float %x) {513; CHECK-LABEL: iszero_or_snan_f:514; CHECK: # %bb.0: # %entry515; CHECK-NEXT: fclass.s $fa0, $fa0516; CHECK-NEXT: movfr2gr.s $a0, $fa0517; CHECK-NEXT: andi $a0, $a0, 545518; CHECK-NEXT: sltu $a0, $zero, $a0519; CHECK-NEXT: ret520entry:521 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 97) ; 0x60|0x1 = "zero|snan"522 ret i1 %0523}524 525define i1 @not_iszero_or_qnan_f(float %x) {526; CHECK-LABEL: not_iszero_or_qnan_f:527; CHECK: # %bb.0: # %entry528; CHECK-NEXT: fclass.s $fa0, $fa0529; CHECK-NEXT: movfr2gr.s $a0, $fa0530; CHECK-NEXT: andi $a0, $a0, 477531; CHECK-NEXT: sltu $a0, $zero, $a0532; CHECK-NEXT: ret533entry:534 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 925) ; ~(0x60|0x2) = "~(zero|qnan)"535 ret i1 %0536}537 538define i1 @not_iszero_or_snan_f(float %x) {539; CHECK-LABEL: not_iszero_or_snan_f:540; CHECK: # %bb.0: # %entry541; CHECK-NEXT: fclass.s $fa0, $fa0542; CHECK-NEXT: movfr2gr.s $a0, $fa0543; CHECK-NEXT: andi $a0, $a0, 478544; CHECK-NEXT: sltu $a0, $zero, $a0545; CHECK-NEXT: ret546entry:547 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 926) ; ~(0x60|0x1) = "~(zero|snan)"548 ret i1 %0549}550 551define i1 @isinf_or_nan_f(float %x) {552; CHECK-LABEL: isinf_or_nan_f:553; CHECK: # %bb.0: # %entry554; CHECK-NEXT: fclass.s $fa0, $fa0555; CHECK-NEXT: movfr2gr.s $a0, $fa0556; CHECK-NEXT: andi $a0, $a0, 71557; CHECK-NEXT: sltu $a0, $zero, $a0558; CHECK-NEXT: ret559entry:560 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 519) ; 0x204|0x3 = "inf|nan"561 ret i1 %0562}563 564define i1 @not_isinf_or_nan_f(float %x) {565; CHECK-LABEL: not_isinf_or_nan_f:566; CHECK: # %bb.0: # %entry567; CHECK-NEXT: fclass.s $fa0, $fa0568; CHECK-NEXT: movfr2gr.s $a0, $fa0569; CHECK-NEXT: andi $a0, $a0, 952570; CHECK-NEXT: sltu $a0, $zero, $a0571; CHECK-NEXT: ret572entry:573 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 504) ; ~(0x204|0x3) = "~(inf|nan)"574 ret i1 %0575}576 577define i1 @isfinite_or_nan_f(float %x) {578; CHECK-LABEL: isfinite_or_nan_f:579; CHECK: # %bb.0: # %entry580; CHECK-NEXT: fclass.s $fa0, $fa0581; CHECK-NEXT: movfr2gr.s $a0, $fa0582; CHECK-NEXT: andi $a0, $a0, 955583; CHECK-NEXT: sltu $a0, $zero, $a0584; CHECK-NEXT: ret585entry:586 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 507) ; 0x1f8|0x3 = "finite|nan"587 ret i1 %0588}589 590define i1 @not_isfinite_or_nan_f(float %x) {591; CHECK-LABEL: not_isfinite_or_nan_f:592; CHECK: # %bb.0: # %entry593; CHECK-NEXT: fclass.s $fa0, $fa0594; CHECK-NEXT: movfr2gr.s $a0, $fa0595; CHECK-NEXT: andi $a0, $a0, 68596; CHECK-NEXT: sltu $a0, $zero, $a0597; CHECK-NEXT: ret598entry:599 %0 = tail call i1 @llvm.is.fpclass.f32(float %x, i32 516) ; ~(0x1f8|0x3) = "~(finite|nan)"600 ret i1 %0601}602 603define i1 @is_plus_inf_or_nan_f(float %x) {604; CHECK-LABEL: is_plus_inf_or_nan_f:605; CHECK: # %bb.0:606; CHECK-NEXT: fclass.s $fa0, $fa0607; CHECK-NEXT: movfr2gr.s $a0, $fa0608; CHECK-NEXT: andi $a0, $a0, 67609; CHECK-NEXT: sltu $a0, $zero, $a0610; CHECK-NEXT: ret611 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 515) ; 0x200|0x3 = "+inf|nan"612 ret i1 %class613}614 615define i1 @is_minus_inf_or_nan_f(float %x) {616; CHECK-LABEL: is_minus_inf_or_nan_f:617; CHECK: # %bb.0:618; CHECK-NEXT: fclass.s $fa0, $fa0619; CHECK-NEXT: movfr2gr.s $a0, $fa0620; CHECK-NEXT: andi $a0, $a0, 7621; CHECK-NEXT: sltu $a0, $zero, $a0622; CHECK-NEXT: ret623 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 7) ; "-inf|nan"624 ret i1 %class625}626 627define i1 @not_is_plus_inf_or_nan_f(float %x) {628; CHECK-LABEL: not_is_plus_inf_or_nan_f:629; CHECK: # %bb.0:630; CHECK-NEXT: fclass.s $fa0, $fa0631; CHECK-NEXT: movfr2gr.s $a0, $fa0632; CHECK-NEXT: andi $a0, $a0, 956633; CHECK-NEXT: sltu $a0, $zero, $a0634; CHECK-NEXT: ret635 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 508) ; ~(0x200|0x3) = "~(+inf|nan)"636 ret i1 %class637}638 639define i1 @not_is_minus_inf_or_nan_f(float %x) {640; CHECK-LABEL: not_is_minus_inf_or_nan_f:641; CHECK: # %bb.0:642; CHECK-NEXT: fclass.s $fa0, $fa0643; CHECK-NEXT: movfr2gr.s $a0, $fa0644; CHECK-NEXT: andi $a0, $a0, 1016645; CHECK-NEXT: sltu $a0, $zero, $a0646; CHECK-NEXT: ret647 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1016) ; "~(-inf|nan)"648 ret i1 %class649}650 651define i1 @is_plus_inf_or_snan_f(float %x) {652; CHECK-LABEL: is_plus_inf_or_snan_f:653; CHECK: # %bb.0:654; CHECK-NEXT: fclass.s $fa0, $fa0655; CHECK-NEXT: movfr2gr.s $a0, $fa0656; CHECK-NEXT: andi $a0, $a0, 65657; CHECK-NEXT: sltu $a0, $zero, $a0658; CHECK-NEXT: ret659 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 513) ; 0x200|0x1 = "+inf|snan"660 ret i1 %class661}662 663define i1 @is_plus_inf_or_qnan_f(float %x) {664; CHECK-LABEL: is_plus_inf_or_qnan_f:665; CHECK: # %bb.0:666; CHECK-NEXT: fclass.s $fa0, $fa0667; CHECK-NEXT: movfr2gr.s $a0, $fa0668; CHECK-NEXT: andi $a0, $a0, 66669; CHECK-NEXT: sltu $a0, $zero, $a0670; CHECK-NEXT: ret671 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 514) ; 0x200|0x1 = "+inf|qnan"672 ret i1 %class673}674 675define i1 @not_is_plus_inf_or_snan_f(float %x) {676; CHECK-LABEL: not_is_plus_inf_or_snan_f:677; CHECK: # %bb.0:678; CHECK-NEXT: fclass.s $fa0, $fa0679; CHECK-NEXT: movfr2gr.s $a0, $fa0680; CHECK-NEXT: andi $a0, $a0, 958681; CHECK-NEXT: sltu $a0, $zero, $a0682; CHECK-NEXT: ret683 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 510) ; ~(+inf|snan)684 ret i1 %class685}686 687define i1 @not_is_plus_inf_or_qnan_f(float %x) {688; CHECK-LABEL: not_is_plus_inf_or_qnan_f:689; CHECK: # %bb.0:690; CHECK-NEXT: fclass.s $fa0, $fa0691; CHECK-NEXT: movfr2gr.s $a0, $fa0692; CHECK-NEXT: andi $a0, $a0, 957693; CHECK-NEXT: sltu $a0, $zero, $a0694; CHECK-NEXT: ret695 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 509) ; ~(+inf|qnan)696 ret i1 %class697}698 699define i1 @is_minus_inf_or_snan_f(float %x) {700; CHECK-LABEL: is_minus_inf_or_snan_f:701; CHECK: # %bb.0:702; CHECK-NEXT: fclass.s $fa0, $fa0703; CHECK-NEXT: movfr2gr.s $a0, $fa0704; CHECK-NEXT: andi $a0, $a0, 5705; CHECK-NEXT: sltu $a0, $zero, $a0706; CHECK-NEXT: ret707 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 5) ; "-inf|snan"708 ret i1 %class709}710 711define i1 @is_minus_inf_or_qnan_f(float %x) {712; CHECK-LABEL: is_minus_inf_or_qnan_f:713; CHECK: # %bb.0:714; CHECK-NEXT: fclass.s $fa0, $fa0715; CHECK-NEXT: movfr2gr.s $a0, $fa0716; CHECK-NEXT: andi $a0, $a0, 6717; CHECK-NEXT: sltu $a0, $zero, $a0718; CHECK-NEXT: ret719 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 6) ; "-inf|qnan"720 ret i1 %class721}722 723define i1 @not_is_minus_inf_or_snan_f(float %x) {724; CHECK-LABEL: not_is_minus_inf_or_snan_f:725; CHECK: # %bb.0:726; CHECK-NEXT: fclass.s $fa0, $fa0727; CHECK-NEXT: movfr2gr.s $a0, $fa0728; CHECK-NEXT: andi $a0, $a0, 1018729; CHECK-NEXT: sltu $a0, $zero, $a0730; CHECK-NEXT: ret731 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1018) ; "~(-inf|snan)"732 ret i1 %class733}734 735define i1 @not_is_minus_inf_or_qnan_f(float %x) {736; CHECK-LABEL: not_is_minus_inf_or_qnan_f:737; CHECK: # %bb.0:738; CHECK-NEXT: fclass.s $fa0, $fa0739; CHECK-NEXT: movfr2gr.s $a0, $fa0740; CHECK-NEXT: andi $a0, $a0, 1017741; CHECK-NEXT: sltu $a0, $zero, $a0742; CHECK-NEXT: ret743 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 1017) ; "-inf|qnan"744 ret i1 %class745}746 747define i1 @issubnormal_or_nan_f(float %x) {748; CHECK-LABEL: issubnormal_or_nan_f:749; CHECK: # %bb.0:750; CHECK-NEXT: fclass.s $fa0, $fa0751; CHECK-NEXT: movfr2gr.s $a0, $fa0752; CHECK-NEXT: andi $a0, $a0, 275753; CHECK-NEXT: sltu $a0, $zero, $a0754; CHECK-NEXT: ret755 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 147) ; 0x90|0x3 = "subnormal|nan"756 ret i1 %class757}758 759define i1 @issubnormal_or_zero_or_nan_f(float %x) {760; CHECK-LABEL: issubnormal_or_zero_or_nan_f:761; CHECK: # %bb.0:762; CHECK-NEXT: fclass.s $fa0, $fa0763; CHECK-NEXT: movfr2gr.s $a0, $fa0764; CHECK-NEXT: andi $a0, $a0, 819765; CHECK-NEXT: sltu $a0, $zero, $a0766; CHECK-NEXT: ret767 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 243) ; 0xf0|0x3 = "subnormal|zero|nan"768 ret i1 %class769}770 771define i1 @issubnormal_or_zero_or_snan_f(float %x) {772; CHECK-LABEL: issubnormal_or_zero_or_snan_f:773; CHECK: # %bb.0:774; CHECK-NEXT: fclass.s $fa0, $fa0775; CHECK-NEXT: movfr2gr.s $a0, $fa0776; CHECK-NEXT: andi $a0, $a0, 817777; CHECK-NEXT: sltu $a0, $zero, $a0778; CHECK-NEXT: ret779 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 241) ; 0x90|0x1 = "subnormal|snan"780 ret i1 %class781}782 783define i1 @issubnormal_or_zero_or_qnan_f(float %x) {784; CHECK-LABEL: issubnormal_or_zero_or_qnan_f:785; CHECK: # %bb.0:786; CHECK-NEXT: fclass.s $fa0, $fa0787; CHECK-NEXT: movfr2gr.s $a0, $fa0788; CHECK-NEXT: andi $a0, $a0, 818789; CHECK-NEXT: sltu $a0, $zero, $a0790; CHECK-NEXT: ret791 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 242) ; 0x90|0x2 = "subnormal|qnan"792 ret i1 %class793}794 795define i1 @not_issubnormal_or_nan_f(float %x) {796; CHECK-LABEL: not_issubnormal_or_nan_f:797; CHECK: # %bb.0:798; CHECK-NEXT: fclass.s $fa0, $fa0799; CHECK-NEXT: movfr2gr.s $a0, $fa0800; CHECK-NEXT: andi $a0, $a0, 748801; CHECK-NEXT: sltu $a0, $zero, $a0802; CHECK-NEXT: ret803 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 876) ; ~(0x90|0x3) = ~"subnormal|nan"804 ret i1 %class805}806 807define i1 @not_issubnormal_or_zero_or_nan_f(float %x) {808; CHECK-LABEL: not_issubnormal_or_zero_or_nan_f:809; CHECK: # %bb.0:810; CHECK-NEXT: fclass.s $fa0, $fa0811; CHECK-NEXT: movfr2gr.s $a0, $fa0812; CHECK-NEXT: andi $a0, $a0, 204813; CHECK-NEXT: sltu $a0, $zero, $a0814; CHECK-NEXT: ret815 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 780) ; ~(0xf0|0x3) = ~"subnormal|zero|nan"816 ret i1 %class817}818 819define i1 @not_issubnormal_or_zero_or_snan_f(float %x) {820; CHECK-LABEL: not_issubnormal_or_zero_or_snan_f:821; CHECK: # %bb.0:822; CHECK-NEXT: fclass.s $fa0, $fa0823; CHECK-NEXT: movfr2gr.s $a0, $fa0824; CHECK-NEXT: andi $a0, $a0, 206825; CHECK-NEXT: sltu $a0, $zero, $a0826; CHECK-NEXT: ret827 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 782) ; ~(0x90|0x1) = ~"subnormal|snan"828 ret i1 %class829}830 831define i1 @not_issubnormal_or_zero_or_qnan_f(float %x) {832; CHECK-LABEL: not_issubnormal_or_zero_or_qnan_f:833; CHECK: # %bb.0:834; CHECK-NEXT: fclass.s $fa0, $fa0835; CHECK-NEXT: movfr2gr.s $a0, $fa0836; CHECK-NEXT: andi $a0, $a0, 205837; CHECK-NEXT: sltu $a0, $zero, $a0838; CHECK-NEXT: ret839 %class = tail call i1 @llvm.is.fpclass.f32(float %x, i32 781) ; ~(0x90|0x2) = ~"subnormal|qnan"840 ret i1 %class841}842 843declare i1 @llvm.is.fpclass.f32(float, i32)844