brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · d2206a4 Raw
112 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Test strict 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; Note that the strict expansion sequence must be used.11 12declare i32 @llvm.experimental.constrained.fptoui.i32.f16(half, metadata)13declare i32 @llvm.experimental.constrained.fptoui.i32.f32(float, metadata)14declare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)15declare i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128, metadata)16 17; Test f16->i32. Converted to signed as the max float value is smaller than18; the signed integer range.19define i32 @f0(half %f) #0 {20; CHECK-LABEL: f0:21; CHECK:       # %bb.0:22; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)23; CHECK-NEXT:    .cfi_offset %r14, -4824; CHECK-NEXT:    .cfi_offset %r15, -4025; CHECK-NEXT:    aghi %r15, -16026; CHECK-NEXT:    .cfi_def_cfa_offset 32027; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT28; CHECK-NEXT:    cfebr %r2, 5, %f029; CHECK-NEXT:    lmg %r14, %r15, 272(%r15)30; CHECK-NEXT:    br %r1431  %conv = call i32 @llvm.experimental.constrained.fptoui.i32.f16(half %f,32                                               metadata !"fpexcept.strict") #033  ret i32 %conv34}35 36; Test f32->i32.37define i32 @f1(float %f) #0 {38; CHECK-LABEL: f1:39; CHECK:       # %bb.0:40; CHECK-NEXT:    larl %r1, .LCPI1_041; CHECK-NEXT:    le %f1, 0(%r1)42; CHECK-NEXT:    kebr %f0, %f143; CHECK-NEXT:    jnl .LBB1_244; CHECK-NEXT:  # %bb.1:45; CHECK-NEXT:    lhi %r0, 046; CHECK-NEXT:    lzer %f147; CHECK-NEXT:    j .LBB1_348; CHECK-NEXT:  .LBB1_2:49; CHECK-NEXT:    llilh %r0, 3276850; CHECK-NEXT:  .LBB1_3:51; CHECK-NEXT:    sebr %f0, %f152; CHECK-NEXT:    cfebr %r2, 5, %f053; CHECK-NEXT:    xr %r2, %r054; CHECK-NEXT:    br %r1455  %conv = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %f,56                                               metadata !"fpexcept.strict") #057  ret i32 %conv58}59 60; Test f64->i32.61define i32 @f2(double %f) #0 {62; CHECK-LABEL: f2:63; CHECK:       # %bb.0:64; CHECK-NEXT:    larl %r1, .LCPI2_065; CHECK-NEXT:    ld %f1, 0(%r1)66; CHECK-NEXT:    kdbr %f0, %f167; CHECK-NEXT:    jnl .LBB2_268; CHECK-NEXT:  # %bb.1:69; CHECK-NEXT:    lhi %r0, 070; CHECK-NEXT:    lzdr %f171; CHECK-NEXT:    j .LBB2_372; CHECK-NEXT:  .LBB2_2:73; CHECK-NEXT:    llilh %r0, 3276874; CHECK-NEXT:  .LBB2_3:75; CHECK-NEXT:    sdbr %f0, %f176; CHECK-NEXT:    cfdbr %r2, 5, %f077; CHECK-NEXT:    xr %r2, %r078; CHECK-NEXT:    br %r1479  %conv = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %f,80                                               metadata !"fpexcept.strict") #081  ret i32 %conv82}83 84; Test f128->i32.85define i32 @f3(ptr %src) #0 {86; CHECK-LABEL: f3:87; CHECK:       # %bb.0:88; CHECK-NEXT:    ld %f0, 0(%r2)89; CHECK-NEXT:    ld %f2, 8(%r2)90; CHECK-NEXT:    larl %r1, .LCPI3_091; CHECK-NEXT:    lxeb %f1, 0(%r1)92; CHECK-NEXT:    kxbr %f0, %f193; CHECK-NEXT:    jnl .LBB3_294; CHECK-NEXT:  # %bb.1:95; CHECK-NEXT:    lhi %r0, 096; CHECK-NEXT:    lzxr %f197; CHECK-NEXT:    j .LBB3_398; CHECK-NEXT:  .LBB3_2:99; CHECK-NEXT:    llilh %r0, 32768100; CHECK-NEXT:  .LBB3_3:101; CHECK-NEXT:    sxbr %f0, %f1102; CHECK-NEXT:    cfxbr %r2, 5, %f0103; CHECK-NEXT:    xr %r2, %r0104; CHECK-NEXT:    br %r14105  %f = load fp128, ptr %src106  %conv = call i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128 %f,107                                               metadata !"fpexcept.strict") #0108  ret i32 %conv109}110 111attributes #0 = { strictfp }112