brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 76c7188 Raw
111 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Test strict 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; Note that the strict expansion sequence must be used.10 11declare i64 @llvm.experimental.constrained.fptoui.i64.f16(half, metadata)12declare i64 @llvm.experimental.constrained.fptoui.i64.f32(float, metadata)13declare i64 @llvm.experimental.constrained.fptoui.i64.f64(double, metadata)14declare i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128, metadata)15 16; Test f16->i64. Converted to signed as the max float value is smaller than17; the signed integer range.18define i64 @f0(half %f) #0 {19; CHECK-LABEL: f0:20; CHECK:       # %bb.0:21; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)22; CHECK-NEXT:    .cfi_offset %r14, -4823; CHECK-NEXT:    .cfi_offset %r15, -4024; CHECK-NEXT:    aghi %r15, -16025; CHECK-NEXT:    .cfi_def_cfa_offset 32026; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT27; CHECK-NEXT:    cgebr %r2, 5, %f028; CHECK-NEXT:    lmg %r14, %r15, 272(%r15)29; CHECK-NEXT:    br %r1430  %conv = call i64 @llvm.experimental.constrained.fptoui.i64.f16(half %f,31                                               metadata !"fpexcept.strict") #032  ret i64 %conv33}34 35; Test f32->i64.36define i64 @f1(float %f) #0 {37; CHECK-LABEL: f1:38; CHECK:       # %bb.0:39; CHECK-NEXT:    larl %r1, .LCPI1_040; CHECK-NEXT:    le %f1, 0(%r1)41; CHECK-NEXT:    kebr %f0, %f142; CHECK-NEXT:    jnl .LBB1_243; CHECK-NEXT:  # %bb.1:44; CHECK-NEXT:    lghi %r0, 045; CHECK-NEXT:    lzer %f146; CHECK-NEXT:    j .LBB1_347; CHECK-NEXT:  .LBB1_2:48; CHECK-NEXT:    llihh %r0, 3276849; CHECK-NEXT:  .LBB1_3:50; CHECK-NEXT:    sebr %f0, %f151; CHECK-NEXT:    cgebr %r2, 5, %f052; CHECK-NEXT:    xgr %r2, %r053; CHECK-NEXT:    br %r1454  %conv = call i64 @llvm.experimental.constrained.fptoui.i64.f32(float %f,55                                               metadata !"fpexcept.strict") #056  ret i64 %conv57}58 59; Test f64->i64.60define i64 @f2(double %f) #0 {61; CHECK-LABEL: f2:62; CHECK:       # %bb.0:63; CHECK-NEXT:    larl %r1, .LCPI2_064; CHECK-NEXT:    ld %f1, 0(%r1)65; CHECK-NEXT:    kdbr %f0, %f166; CHECK-NEXT:    jnl .LBB2_267; CHECK-NEXT:  # %bb.1:68; CHECK-NEXT:    lghi %r0, 069; CHECK-NEXT:    lzdr %f170; CHECK-NEXT:    j .LBB2_371; CHECK-NEXT:  .LBB2_2:72; CHECK-NEXT:    llihh %r0, 3276873; CHECK-NEXT:  .LBB2_3:74; CHECK-NEXT:    sdbr %f0, %f175; CHECK-NEXT:    cgdbr %r2, 5, %f076; CHECK-NEXT:    xgr %r2, %r077; CHECK-NEXT:    br %r1478  %conv = call i64 @llvm.experimental.constrained.fptoui.i64.f64(double %f,79                                               metadata !"fpexcept.strict") #080  ret i64 %conv81}82 83; Test f128->i64.84define i64 @f3(ptr %src) #0 {85; CHECK-LABEL: f3:86; CHECK:       # %bb.0:87; CHECK-NEXT:    ld %f0, 0(%r2)88; CHECK-NEXT:    ld %f2, 8(%r2)89; CHECK-NEXT:    larl %r1, .LCPI3_090; CHECK-NEXT:    lxeb %f1, 0(%r1)91; CHECK-NEXT:    kxbr %f0, %f192; CHECK-NEXT:    jnl .LBB3_293; CHECK-NEXT:  # %bb.1:94; CHECK-NEXT:    lghi %r0, 095; CHECK-NEXT:    lzxr %f196; CHECK-NEXT:    j .LBB3_397; CHECK-NEXT:  .LBB3_2:98; CHECK-NEXT:    llihh %r0, 3276899; CHECK-NEXT:  .LBB3_3:100; CHECK-NEXT:    sxbr %f0, %f1101; CHECK-NEXT:    cgxbr %r2, 5, %f0102; CHECK-NEXT:    xgr %r2, %r0103; CHECK-NEXT:    br %r14104  %f = load fp128, ptr %src105  %conv = call i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128 %f,106                                               metadata !"fpexcept.strict") #0107  ret i64 %conv108}109 110attributes #0 = { strictfp }111