164 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Test intrinsic 'is_fpclass'.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6declare i1 @llvm.is.fpclass.f16(half, i32)7declare i1 @llvm.is.fpclass.f32(float, i32)8declare i1 @llvm.is.fpclass.f64(double, i32)9declare i1 @llvm.is.fpclass.f128(fp128, i32)10 11 12define i1 @isnan_h(half %x) {13; CHECK-LABEL: isnan_h:14; CHECK: # %bb.0:15; CHECK-NEXT: stmg %r14, %r15, 112(%r15)16; CHECK-NEXT: .cfi_offset %r14, -4817; CHECK-NEXT: .cfi_offset %r15, -4018; CHECK-NEXT: aghi %r15, -16019; CHECK-NEXT: .cfi_def_cfa_offset 32020; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT21; CHECK-NEXT: tceb %f0, 1522; CHECK-NEXT: ipm %r223; CHECK-NEXT: srl %r2, 2824; CHECK-NEXT: lmg %r14, %r15, 272(%r15)25; CHECK-NEXT: br %r1426 %1 = call i1 @llvm.is.fpclass.f16(half %x, i32 3) ; nan27 ret i1 %128}29 30define i1 @isnan_f(float %x) {31; CHECK-LABEL: isnan_f:32; CHECK: # %bb.0:33; CHECK-NEXT: tceb %f0, 1534; CHECK-NEXT: ipm %r235; CHECK-NEXT: srl %r2, 2836; CHECK-NEXT: br %r1437 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 3) ; nan38 ret i1 %139}40 41define i1 @isnan_d(double %x) {42; CHECK-LABEL: isnan_d:43; CHECK: # %bb.0:44; CHECK-NEXT: tcdb %f0, 1545; CHECK-NEXT: ipm %r246; CHECK-NEXT: srl %r2, 2847; CHECK-NEXT: br %r1448 %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 3) ; nan49 ret i1 %150}51 52define i1 @isnan_x(fp128 %x) {53; CHECK-LABEL: isnan_x:54; CHECK: # %bb.0:55; CHECK-NEXT: ld %f0, 0(%r2)56; CHECK-NEXT: ld %f2, 8(%r2)57; CHECK-NEXT: tcxb %f0, 1558; CHECK-NEXT: ipm %r259; CHECK-NEXT: srl %r2, 2860; CHECK-NEXT: br %r1461 %1 = call i1 @llvm.is.fpclass.f128(fp128 %x, i32 3) ; nan62 ret i1 %163}64 65define i1 @isqnan_f(float %x) {66; CHECK-LABEL: isqnan_f:67; CHECK: # %bb.0:68; CHECK-NEXT: tceb %f0, 1269; CHECK-NEXT: ipm %r270; CHECK-NEXT: srl %r2, 2871; CHECK-NEXT: br %r1472 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 2) ; qnan73 ret i1 %174}75 76define i1 @issnan_f(float %x) {77; CHECK-LABEL: issnan_f:78; CHECK: # %bb.0:79; CHECK-NEXT: tceb %f0, 380; CHECK-NEXT: ipm %r281; CHECK-NEXT: srl %r2, 2882; CHECK-NEXT: br %r1483 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 1) ; snan84 ret i1 %185}86 87define i1 @isinf_f(float %x) {88; CHECK-LABEL: isinf_f:89; CHECK: # %bb.0:90; CHECK-NEXT: tceb %f0, 4891; CHECK-NEXT: ipm %r292; CHECK-NEXT: srl %r2, 2893; CHECK-NEXT: br %r1494 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 516) ; 0x204 = "inf"95 ret i1 %196}97 98define i1 @isposinf_f(float %x) {99; CHECK-LABEL: isposinf_f:100; CHECK: # %bb.0:101; CHECK-NEXT: tceb %f0, 32102; CHECK-NEXT: ipm %r2103; CHECK-NEXT: srl %r2, 28104; CHECK-NEXT: br %r14105 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 512) ; 0x200 = "+inf"106 ret i1 %1107}108 109define i1 @isneginf_f(float %x) {110; CHECK-LABEL: isneginf_f:111; CHECK: # %bb.0:112; CHECK-NEXT: tceb %f0, 16113; CHECK-NEXT: ipm %r2114; CHECK-NEXT: srl %r2, 28115; CHECK-NEXT: br %r14116 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 4) ; "-inf"117 ret i1 %1118}119 120define i1 @isfinite_f(float %x) {121; CHECK-LABEL: isfinite_f:122; CHECK: # %bb.0:123; CHECK-NEXT: tceb %f0, 4032124; CHECK-NEXT: ipm %r2125; CHECK-NEXT: srl %r2, 28126; CHECK-NEXT: br %r14127 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 504) ; 0x1f8 = "finite"128 ret i1 %1129}130 131define i1 @isposfinite_f(float %x) {132; CHECK-LABEL: isposfinite_f:133; CHECK: # %bb.0:134; CHECK-NEXT: tceb %f0, 2688135; CHECK-NEXT: ipm %r2136; CHECK-NEXT: srl %r2, 28137; CHECK-NEXT: br %r14138 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 448) ; 0x1c0 = "+finite"139 ret i1 %1140}141 142define i1 @isnegfinite_f(float %x) {143; CHECK-LABEL: isnegfinite_f:144; CHECK: # %bb.0:145; CHECK-NEXT: tceb %f0, 1344146; CHECK-NEXT: ipm %r2147; CHECK-NEXT: srl %r2, 28148; CHECK-NEXT: br %r14149 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 56) ; 0x38 = "-finite"150 ret i1 %1151}152 153define i1 @isnotfinite_f(float %x) {154; CHECK-LABEL: isnotfinite_f:155; CHECK: # %bb.0:156; CHECK-NEXT: tceb %f0, 63157; CHECK-NEXT: ipm %r2158; CHECK-NEXT: srl %r2, 28159; CHECK-NEXT: br %r14160 %1 = call i1 @llvm.is.fpclass.f32(float %x, i32 519) ; ox207 = "inf|nan"161 ret i1 %1162}163 164