247 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=mipsisa32r6-unknown-linux-gnu -verify-machineinstrs -o - %s | FileCheck %s3 4 5define i1 @isnan_float(float %x) nounwind {6; CHECK-LABEL: isnan_float:7; CHECK: # %bb.0:8; CHECK-NEXT: class.s $f0, $f129; CHECK-NEXT: mfc1 $1, $f010; CHECK-NEXT: andi $1, $1, 311; CHECK-NEXT: jr $ra12; CHECK-NEXT: sltu $2, $zero, $113 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 3) ; nan14 ret i1 %115}16 17define i1 @isnan_double(double %x) nounwind {18; CHECK-LABEL: isnan_double:19; CHECK: # %bb.0:20; CHECK-NEXT: class.d $f0, $f1221; CHECK-NEXT: mfc1 $1, $f022; CHECK-NEXT: andi $1, $1, 323; CHECK-NEXT: jr $ra24; CHECK-NEXT: sltu $2, $zero, $125 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 3) ; nan26 ret i1 %127}28 29define i1 @isnan_float_strictfp(float %x) strictfp nounwind {30; CHECK-LABEL: isnan_float_strictfp:31; CHECK: # %bb.0:32; CHECK-NEXT: class.s $f0, $f1233; CHECK-NEXT: mfc1 $1, $f034; CHECK-NEXT: andi $1, $1, 335; CHECK-NEXT: jr $ra36; CHECK-NEXT: sltu $2, $zero, $137 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 3) strictfp ; nan38 ret i1 %139}40 41define i1 @isnan_double_strictfp(double %x) strictfp nounwind {42; CHECK-LABEL: isnan_double_strictfp:43; CHECK: # %bb.0:44; CHECK-NEXT: class.d $f0, $f1245; CHECK-NEXT: mfc1 $1, $f046; CHECK-NEXT: andi $1, $1, 347; CHECK-NEXT: jr $ra48; CHECK-NEXT: sltu $2, $zero, $149 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 3) strictfp ; nan50 ret i1 %151}52 53define i1 @isinf_float(float %x) nounwind {54; CHECK-LABEL: isinf_float:55; CHECK: # %bb.0:56; CHECK-NEXT: class.s $f0, $f1257; CHECK-NEXT: mfc1 $1, $f058; CHECK-NEXT: andi $1, $1, 6859; CHECK-NEXT: jr $ra60; CHECK-NEXT: sltu $2, $zero, $161 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 516) ; 0x204 = "inf"62 ret i1 %163}64 65define i1 @isfinite_float(float %x) nounwind {66; CHECK-LABEL: isfinite_float:67; CHECK: # %bb.0:68; CHECK-NEXT: class.s $f0, $f1269; CHECK-NEXT: mfc1 $1, $f070; CHECK-NEXT: andi $1, $1, 95271; CHECK-NEXT: jr $ra72; CHECK-NEXT: sltu $2, $zero, $173 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 504) ; 0x1f8 = "finite"74 ret i1 %175}76 77define i1 @isnormal_float(float %x) nounwind {78; CHECK-LABEL: isnormal_float:79; CHECK: # %bb.0:80; CHECK-NEXT: class.s $f0, $f1281; CHECK-NEXT: mfc1 $1, $f082; CHECK-NEXT: andi $1, $1, 13683; CHECK-NEXT: jr $ra84; CHECK-NEXT: sltu $2, $zero, $185 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 264) ; 0x108 = "normal"86 ret i1 %187}88 89define i1 @issubnormal_float(float %x) nounwind {90; CHECK-LABEL: issubnormal_float:91; CHECK: # %bb.0:92; CHECK-NEXT: class.s $f0, $f1293; CHECK-NEXT: mfc1 $1, $f094; CHECK-NEXT: andi $1, $1, 27295; CHECK-NEXT: jr $ra96; CHECK-NEXT: sltu $2, $zero, $197 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 144) ; 0x90 = "subnormal"98 ret i1 %199}100 101define i1 @iszero_float(float %x) nounwind {102; CHECK-LABEL: iszero_float:103; CHECK: # %bb.0:104; CHECK-NEXT: class.s $f0, $f12105; CHECK-NEXT: mfc1 $1, $f0106; CHECK-NEXT: andi $1, $1, 544107; CHECK-NEXT: jr $ra108; CHECK-NEXT: sltu $2, $zero, $1109 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 96) ; 0x60 = "zero"110 ret i1 %1111}112 113define i1 @issnan_float(float %x) nounwind {114; CHECK-LABEL: issnan_float:115; CHECK: # %bb.0:116; CHECK-NEXT: class.s $f0, $f12117; CHECK-NEXT: mfc1 $1, $f0118; CHECK-NEXT: andi $1, $1, 1119; CHECK-NEXT: jr $ra120; CHECK-NEXT: sltu $2, $zero, $1121 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 1)122 ret i1 %1123}124 125define i1 @issnan_double(double %x) nounwind {126; CHECK-LABEL: issnan_double:127; CHECK: # %bb.0:128; CHECK-NEXT: class.d $f0, $f12129; CHECK-NEXT: mfc1 $1, $f0130; CHECK-NEXT: andi $1, $1, 1131; CHECK-NEXT: jr $ra132; CHECK-NEXT: sltu $2, $zero, $1133 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 1)134 ret i1 %1135}136 137define i1 @isqnan_float(float %x) nounwind {138; CHECK-LABEL: isqnan_float:139; CHECK: # %bb.0:140; CHECK-NEXT: class.s $f0, $f12141; CHECK-NEXT: mfc1 $1, $f0142; CHECK-NEXT: andi $1, $1, 2143; CHECK-NEXT: jr $ra144; CHECK-NEXT: sltu $2, $zero, $1145 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 2)146 ret i1 %1147}148 149define i1 @isqnan_double(double %x) nounwind {150; CHECK-LABEL: isqnan_double:151; CHECK: # %bb.0:152; CHECK-NEXT: class.d $f0, $f12153; CHECK-NEXT: mfc1 $1, $f0154; CHECK-NEXT: andi $1, $1, 2155; CHECK-NEXT: jr $ra156; CHECK-NEXT: sltu $2, $zero, $1157 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 2)158 ret i1 %1159}160 161define i1 @isposzero_double(double %x) nounwind {162; CHECK-LABEL: isposzero_double:163; CHECK: # %bb.0:164; CHECK-NEXT: class.d $f0, $f12165; CHECK-NEXT: mfc1 $1, $f0166; CHECK-NEXT: andi $1, $1, 512167; CHECK-NEXT: jr $ra168; CHECK-NEXT: sltu $2, $zero, $1169 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 64)170 ret i1 %1171}172 173define i1 @isnegzero_double(double %x) nounwind {174; CHECK-LABEL: isnegzero_double:175; CHECK: # %bb.0:176; CHECK-NEXT: class.d $f0, $f12177; CHECK-NEXT: mfc1 $1, $f0178; CHECK-NEXT: andi $1, $1, 32179; CHECK-NEXT: jr $ra180; CHECK-NEXT: sltu $2, $zero, $1181 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 32)182 ret i1 %1183}184 185define i1 @isposnormal_double(double %x) nounwind {186; CHECK-LABEL: isposnormal_double:187; CHECK: # %bb.0:188; CHECK-NEXT: class.d $f0, $f12189; CHECK-NEXT: mfc1 $1, $f0190; CHECK-NEXT: andi $1, $1, 128191; CHECK-NEXT: jr $ra192; CHECK-NEXT: sltu $2, $zero, $1193 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 256)194 ret i1 %1195}196 197define i1 @isnegnormal_double(double %x) nounwind {198; CHECK-LABEL: isnegnormal_double:199; CHECK: # %bb.0:200; CHECK-NEXT: class.d $f0, $f12201; CHECK-NEXT: mfc1 $1, $f0202; CHECK-NEXT: andi $1, $1, 8203; CHECK-NEXT: jr $ra204; CHECK-NEXT: sltu $2, $zero, $1205 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 8)206 ret i1 %1207}208 209define i1 @isnormal_double(double %x) nounwind {210; CHECK-LABEL: isnormal_double:211; CHECK: # %bb.0:212; CHECK-NEXT: class.d $f0, $f12213; CHECK-NEXT: mfc1 $1, $f0214; CHECK-NEXT: andi $1, $1, 136215; CHECK-NEXT: jr $ra216; CHECK-NEXT: sltu $2, $zero, $1217 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 264)218 ret i1 %1219}220 221define i1 @isclass_00d_double(double %x) nounwind {222; CHECK-LABEL: isclass_00d_double:223; CHECK: # %bb.0:224; CHECK-NEXT: class.d $f0, $f12225; CHECK-NEXT: mfc1 $1, $f0226; CHECK-NEXT: andi $1, $1, 13227; CHECK-NEXT: jr $ra228; CHECK-NEXT: sltu $2, $zero, $1229 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 13)230 ret i1 %1231}232 233define i1 @isclass_1c0_float(float %x) nounwind {234; CHECK-LABEL: isclass_1c0_float:235; CHECK: # %bb.0:236; CHECK-NEXT: class.s $f0, $f12237; CHECK-NEXT: mfc1 $1, $f0238; CHECK-NEXT: andi $1, $1, 896239; CHECK-NEXT: jr $ra240; CHECK-NEXT: sltu $2, $zero, $1241 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 448)242 ret i1 %1243}244 245declare i1 @llvm.is.fpclass.f32(float, i32)246declare i1 @llvm.is.fpclass.f64(double, i32)247