90 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Test conversion of floating-point values to unsigned i64s (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-i64 conversions;7; they were added in z196 as the Convert to Logical family of instructions.8; Convert via signed i64s instead.9 10; Test f16->i64. Converted to signed as the max float value is smaller than11; the signed integer range.12define i64 @f0(half %f) {13; CHECK-LABEL: f0: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: cgebr %r2, 5, %f022; CHECK-NEXT: lmg %r14, %r15, 272(%r15)23; CHECK-NEXT: br %r1424 %conv = fptoui half %f to i6425 ret i64 %conv26}27 28; Test f32->i64.29define i64 @f1(float %f) {30; CHECK-LABEL: f1:31; CHECK: # %bb.0:32; CHECK-NEXT: larl %r1, .LCPI1_033; CHECK-NEXT: le %f1, 0(%r1)34; CHECK-NEXT: cebr %f0, %f135; CHECK-NEXT: jnl .LBB1_236; CHECK-NEXT: # %bb.1:37; CHECK-NEXT: cgebr %r2, 5, %f038; CHECK-NEXT: br %r1439; CHECK-NEXT: .LBB1_2:40; CHECK-NEXT: sebr %f0, %f141; CHECK-NEXT: cgebr %r2, 5, %f042; CHECK-NEXT: xihf %r2, 214748364843; CHECK-NEXT: br %r1444 %conv = fptoui float %f to i6445 ret i64 %conv46}47 48; Test f64->i64.49define i64 @f2(double %f) {50; CHECK-LABEL: f2:51; CHECK: # %bb.0:52; CHECK-NEXT: larl %r1, .LCPI2_053; CHECK-NEXT: ld %f1, 0(%r1)54; CHECK-NEXT: cdbr %f0, %f155; CHECK-NEXT: jnl .LBB2_256; CHECK-NEXT: # %bb.1:57; CHECK-NEXT: cgdbr %r2, 5, %f058; CHECK-NEXT: br %r1459; CHECK-NEXT: .LBB2_2:60; CHECK-NEXT: sdbr %f0, %f161; CHECK-NEXT: cgdbr %r2, 5, %f062; CHECK-NEXT: xihf %r2, 214748364863; CHECK-NEXT: br %r1464 %conv = fptoui double %f to i6465 ret i64 %conv66}67 68; Test f128->i64.69define i64 @f3(ptr %src) {70; CHECK-LABEL: f3:71; CHECK: # %bb.0:72; CHECK-NEXT: ld %f0, 0(%r2)73; CHECK-NEXT: ld %f2, 8(%r2)74; CHECK-NEXT: larl %r1, .LCPI3_075; CHECK-NEXT: lxeb %f1, 0(%r1)76; CHECK-NEXT: cxbr %f0, %f177; CHECK-NEXT: jnl .LBB3_278; CHECK-NEXT: # %bb.1:79; CHECK-NEXT: cgxbr %r2, 5, %f080; CHECK-NEXT: br %r1481; CHECK-NEXT: .LBB3_2:82; CHECK-NEXT: sxbr %f0, %f183; CHECK-NEXT: cgxbr %r2, 5, %f084; CHECK-NEXT: xihf %r2, 214748364885; CHECK-NEXT: br %r1486 %f = load fp128, ptr %src87 %conv = fptoui fp128 %f to i6488 ret i64 %conv89}90