brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 2becd18 Raw
199 lines · plain
1; Test floating-point strict conversion to/from 128-bit integers.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s5 6declare fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128, metadata, metadata)7declare double @llvm.experimental.constrained.sitofp.f64.i128(i128, metadata, metadata)8declare float @llvm.experimental.constrained.sitofp.f32.i128(i128, metadata, metadata)9declare half @llvm.experimental.constrained.sitofp.f16.i128(i128, metadata, metadata)10 11declare fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128, metadata, metadata)12declare double @llvm.experimental.constrained.uitofp.f64.i128(i128, metadata, metadata)13declare float @llvm.experimental.constrained.uitofp.f32.i128(i128, metadata, metadata)14declare half @llvm.experimental.constrained.uitofp.f16.i128(i128, metadata, metadata)15 16declare i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128, metadata)17declare i128 @llvm.experimental.constrained.fptosi.i128.f64(double, metadata)18declare i128 @llvm.experimental.constrained.fptosi.i128.f32(float, metadata)19declare i128 @llvm.experimental.constrained.fptosi.i128.f16(half, metadata)20 21declare i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128, metadata)22declare i128 @llvm.experimental.constrained.fptoui.i128.f64(double, metadata)23declare i128 @llvm.experimental.constrained.fptoui.i128.f32(float, metadata)24declare i128 @llvm.experimental.constrained.fptoui.i128.f16(half, metadata)25 26; Test signed i128->f128.27define fp128 @f1(i128 %i) #0 {28; CHECK-LABEL: f1:29; CHECK: brasl %r14, __floattitf@PLT30; CHECK: br %r1431  %conv = call fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128 %i,32                                               metadata !"round.dynamic",33                                               metadata !"fpexcept.strict") #034  ret fp128 %conv35}36 37; Test signed i128->f64.38define double @f2(i128 %i) #0 {39; CHECK-LABEL: f2:40; CHECK: brasl %r14, __floattidf@PLT41; CHECK: br %r1442  %conv = call double @llvm.experimental.constrained.sitofp.f64.i128(i128 %i,43                                               metadata !"round.dynamic",44                                               metadata !"fpexcept.strict") #045  ret double %conv46}47 48; Test signed i128->f32.49define float @f3(i128 %i) #0 {50; CHECK-LABEL: f3:51; CHECK: brasl %r14, __floattisf@PLT52; CHECK: br %r1453  %conv = call float @llvm.experimental.constrained.sitofp.f32.i128(i128 %i,54                                               metadata !"round.dynamic",55                                               metadata !"fpexcept.strict") #056  ret float %conv57}58 59; Test signed i128->f16.60define half @f4(i128 %i) #0 {61; CHECK-LABEL: f4:62; CHECK: %r14, __floattisf@PLT63; CHECK: %r14, __truncsfhf2@PLT64; CHECK: br %r1465  %conv = call half @llvm.experimental.constrained.sitofp.f16.i128(i128 %i,66                                               metadata !"round.dynamic",67                                               metadata !"fpexcept.strict") #068  ret half %conv69}70 71; Test unsigned i128->f128.72define fp128 @f5(i128 %i) #0 {73; CHECK-LABEL: f5:74; CHECK: brasl %r14, __floatuntitf@PLT75; CHECK: br %r1476  %conv = call fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128 %i,77                                               metadata !"round.dynamic",78                                               metadata !"fpexcept.strict") #079  ret fp128 %conv80}81 82; Test unsigned i128->f64.83define double @f6(i128 %i) #0 {84; CHECK-LABEL: f6:85; CHECK: brasl %r14, __floatuntidf@PLT86; CHECK: br %r1487  %conv = call double @llvm.experimental.constrained.uitofp.f64.i128(i128 %i,88                                               metadata !"round.dynamic",89                                               metadata !"fpexcept.strict") #090  ret double %conv91}92 93; Test unsigned i128->f32.94define float @f7(i128 %i) #0 {95; CHECK-LABEL: f7:96; CHECK: brasl %r14, __floatuntisf@PLT97; CHECK: br %r1498  %conv = call float @llvm.experimental.constrained.uitofp.f32.i128(i128 %i,99                                               metadata !"round.dynamic",100                                               metadata !"fpexcept.strict") #0101  ret float %conv102}103 104; Test unsigned i128->f16.105define half @f8(i128 %i) #0 {106; CHECK-LABEL: f8:107; CHECK: brasl %r14, __floatuntisf@PLT108; CHECK: brasl %r14, __truncsfhf2@PLT109; CHECK: br %r14110  %conv = call half @llvm.experimental.constrained.uitofp.f16.i128(i128 %i,111                                               metadata !"round.dynamic",112                                               metadata !"fpexcept.strict") #0113  ret half %conv114}115 116; Test signed f128->i128.117define i128 @f9(fp128 %f) #0 {118; CHECK-LABEL: f9:119; CHECK: brasl %r14, __fixtfti@PLT120; CHECK: br %r14121  %conv = call i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128 %f,122                                               metadata !"fpexcept.strict") #0123  ret i128 %conv124}125 126; Test signed f64->i128.127define i128 @f10(double %f) #0 {128; CHECK-LABEL: f10:129; CHECK: brasl %r14, __fixdfti@PLT130; CHECK: br %r14131  %conv = call i128 @llvm.experimental.constrained.fptosi.i128.f64(double %f,132                                               metadata !"fpexcept.strict") #0133  ret i128 %conv134}135 136; Test signed f32->i128.137define i128 @f11(float %f) #0 {138; CHECK-LABEL: f11:139; CHECK: brasl %r14, __fixsfti@PLT140; CHECK: br %r14141  %conv = call i128 @llvm.experimental.constrained.fptosi.i128.f32(float %f,142                                               metadata !"fpexcept.strict") #0143  ret i128 %conv144}145 146; Test signed f16->i128.147define i128 @f12(half %f) #0 {148; CHECK-LABEL: f12:149; CHECK: brasl %r14, __extendhfsf2@PLT150; CHECK: brasl %r14, __fixsfti@PLT151; CHECK: br %r14152  %conv = call i128 @llvm.experimental.constrained.fptosi.i128.f16(half %f,153                                               metadata !"fpexcept.strict") #0154  ret i128 %conv155}156 157; Test unsigned f128->i128.158define i128 @f13(fp128 %f) #0 {159; CHECK-LABEL: f13:160; CHECK: brasl %r14, __fixunstfti@PLT161; CHECK: br %r14162  %conv = call i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128 %f,163                                               metadata !"fpexcept.strict") #0164  ret i128 %conv165}166 167; Test unsigned f64->i128.168define i128 @f14(double %f) #0 {169; CHECK-LABEL: f14:170; CHECK: brasl %r14, __fixunsdfti@PLT171; CHECK: br %r14172  %conv = call i128 @llvm.experimental.constrained.fptoui.i128.f64(double %f,173                                               metadata !"fpexcept.strict") #0174  ret i128 %conv175}176 177; Test unsigned f32->i128.178define i128 @f15(float %f) #0 {179; CHECK-LABEL: f15:180; CHECK: brasl %r14, __fixunssfti@PLT181; CHECK: br %r14182  %conv = call i128 @llvm.experimental.constrained.fptoui.i128.f32(float %f,183                                               metadata !"fpexcept.strict") #0184  ret i128 %conv185}186 187; Test unsigned f16->i128.188define i128 @f16(half %f) #0 {189; CHECK-LABEL: f16:190; CHECK: brasl %r14, __extendhfsf2@PLT191; CHECK: brasl %r14, __fixunssfti@PLT192; CHECK: br %r14193  %conv = call i128 @llvm.experimental.constrained.fptoui.i128.f16(half %f,194                                               metadata !"fpexcept.strict") #0195  ret i128 %conv196}197 198attributes #0 = { strictfp }199