91 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Test conversion of floating-point values to unsigned i32s (z10 only).3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s5 6; z10 doesn't have native support for unsigned fp-to-i32 conversions;7; they were added in z196 as the Convert to Logical family of instructions.8; Promoting to i64 doesn't generate an inexact condition for values that are9; outside the i32 range but in the i64 range, so use the default expansion.10 11; Test f16->i32. Converted to signed as the max float value is smaller than12; the signed integer range.13define i32 @f0(half %f) {14; CHECK-LABEL: f0:15; CHECK: # %bb.0:16; CHECK-NEXT: stmg %r14, %r15, 112(%r15)17; CHECK-NEXT: .cfi_offset %r14, -4818; CHECK-NEXT: .cfi_offset %r15, -4019; CHECK-NEXT: aghi %r15, -16020; CHECK-NEXT: .cfi_def_cfa_offset 32021; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT22; CHECK-NEXT: cfebr %r2, 5, %f023; CHECK-NEXT: lmg %r14, %r15, 272(%r15)24; CHECK-NEXT: br %r1425 %conv = fptoui half %f to i3226 ret i32 %conv27}28 29; Test f32->i32.30define i32 @f1(float %f) {31; CHECK-LABEL: f1:32; CHECK: # %bb.0:33; CHECK-NEXT: larl %r1, .LCPI1_034; CHECK-NEXT: le %f1, 0(%r1)35; CHECK-NEXT: cebr %f0, %f136; CHECK-NEXT: jnl .LBB1_237; CHECK-NEXT: # %bb.1:38; CHECK-NEXT: cfebr %r2, 5, %f039; CHECK-NEXT: br %r1440; CHECK-NEXT: .LBB1_2:41; CHECK-NEXT: sebr %f0, %f142; CHECK-NEXT: cfebr %r2, 5, %f043; CHECK-NEXT: xilf %r2, 214748364844; CHECK-NEXT: br %r1445 %conv = fptoui float %f to i3246 ret i32 %conv47}48 49; Test f64->i32.50define i32 @f2(double %f) {51; CHECK-LABEL: f2:52; CHECK: # %bb.0:53; CHECK-NEXT: larl %r1, .LCPI2_054; CHECK-NEXT: ld %f1, 0(%r1)55; CHECK-NEXT: cdbr %f0, %f156; CHECK-NEXT: jnl .LBB2_257; CHECK-NEXT: # %bb.1:58; CHECK-NEXT: cfdbr %r2, 5, %f059; CHECK-NEXT: br %r1460; CHECK-NEXT: .LBB2_2:61; CHECK-NEXT: sdbr %f0, %f162; CHECK-NEXT: cfdbr %r2, 5, %f063; CHECK-NEXT: xilf %r2, 214748364864; CHECK-NEXT: br %r1465 %conv = fptoui double %f to i3266 ret i32 %conv67}68 69; Test f128->i32.70define i32 @f3(ptr %src) {71; CHECK-LABEL: f3:72; CHECK: # %bb.0:73; CHECK-NEXT: ld %f0, 0(%r2)74; CHECK-NEXT: ld %f2, 8(%r2)75; CHECK-NEXT: larl %r1, .LCPI3_076; CHECK-NEXT: lxeb %f1, 0(%r1)77; CHECK-NEXT: cxbr %f0, %f178; CHECK-NEXT: jnl .LBB3_279; CHECK-NEXT: # %bb.1:80; CHECK-NEXT: cfxbr %r2, 5, %f081; CHECK-NEXT: br %r1482; CHECK-NEXT: .LBB3_2:83; CHECK-NEXT: sxbr %f0, %f184; CHECK-NEXT: cfxbr %r2, 5, %f085; CHECK-NEXT: xilf %r2, 214748364886; CHECK-NEXT: br %r1487 %f = load fp128, ptr %src88 %conv = fptoui fp128 %f to i3289 ret i32 %conv90}91