59 lines · plain
1; Test strict conversions of signed i32s to floating-point values.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5declare half @llvm.experimental.constrained.sitofp.f16.i32(i32, metadata, metadata)6declare float @llvm.experimental.constrained.sitofp.f32.i32(i32, metadata, metadata)7declare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)8declare fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32, metadata, metadata)9 10; Check i32->f16.11define half @f0(i32 %i) #0 {12; CHECK-LABEL: f0:13; CHECK: cefbr %f0, %r214; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT15; CHECK: br %r1416 %conv = call half @llvm.experimental.constrained.sitofp.f16.i32(i32 %i,17 metadata !"round.dynamic",18 metadata !"fpexcept.strict") #019 ret half %conv20}21 22; Check i32->f32.23define float @f1(i32 %i) #0 {24; CHECK-LABEL: f1:25; CHECK: cefbr %f0, %r226; CHECK: br %r1427 %conv = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %i,28 metadata !"round.dynamic",29 metadata !"fpexcept.strict") #030 ret float %conv31}32 33; Check i32->f64.34define double @f2(i32 %i) #0 {35; CHECK-LABEL: f2:36; CHECK: cdfbr %f0, %r237; CHECK: br %r1438 %conv = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %i,39 metadata !"round.dynamic",40 metadata !"fpexcept.strict") #041 ret double %conv42}43 44; Check i32->f128.45define void @f3(i32 %i, ptr %dst) #0 {46; CHECK-LABEL: f3:47; CHECK: cxfbr %f0, %r248; CHECK: std %f0, 0(%r3)49; CHECK: std %f2, 8(%r3)50; CHECK: br %r1451 %conv = call fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32 %i,52 metadata !"round.dynamic",53 metadata !"fpexcept.strict") #054 store fp128 %conv, ptr %dst55 ret void56}57 58attributes #0 = { strictfp }59