55 lines · plain
1; Test strict conversion of floating-point values to signed i32s.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5declare i32 @llvm.experimental.constrained.fptosi.i32.f16(half, metadata)6declare i32 @llvm.experimental.constrained.fptosi.i32.f32(float, metadata)7declare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)8declare i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128, metadata)9 10; Test f16->i32.11define i32 @f0(half %f) #0 {12; CHECK-LABEL: f0:13; CHECK: brasl %r14, __extendhfsf2@PLT14; CHECK-NEXT: cfebr %r2, 5, %f015; CHECK: br %r1416 %conv = call i32 @llvm.experimental.constrained.fptosi.i32.f16(half %f,17 metadata !"fpexcept.strict") #018 ret i32 %conv19}20 21; Test f32->i32.22define i32 @f1(float %f) #0 {23; CHECK-LABEL: f1:24; CHECK: cfebr %r2, 5, %f025; CHECK: br %r1426 %conv = call i32 @llvm.experimental.constrained.fptosi.i32.f32(float %f,27 metadata !"fpexcept.strict") #028 ret i32 %conv29}30 31; Test f64->i32.32define i32 @f2(double %f) #0 {33; CHECK-LABEL: f2:34; CHECK: cfdbr %r2, 5, %f035; CHECK: br %r1436 %conv = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %f,37 metadata !"fpexcept.strict") #038 ret i32 %conv39}40 41; Test f128->i32.42define i32 @f3(ptr %src) #0 {43; CHECK-LABEL: f3:44; CHECK: ld %f0, 0(%r2)45; CHECK: ld %f2, 8(%r2)46; CHECK: cfxbr %r2, 5, %f047; CHECK: br %r1448 %f = load fp128, ptr %src49 %conv = call i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128 %f,50 metadata !"fpexcept.strict") #051 ret i32 %conv52}53 54attributes #0 = { strictfp }55