153 lines · plain
1; Test floating-point 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 6; Test signed i128->f128.7define fp128 @f1(i128 %i) {8; CHECK-LABEL: f1:9; CHECK: brasl %r14, __floattitf@PLT10; CHECK: br %r1411 %conv = sitofp i128 %i to fp12812 ret fp128 %conv13}14 15; Test signed i128->f64.16define double @f2(i128 %i) {17; CHECK-LABEL: f2:18; CHECK: brasl %r14, __floattidf@PLT19; CHECK: br %r1420 %conv = sitofp i128 %i to double21 ret double %conv22}23 24; Test signed i128->f32.25define float @f3(i128 %i) {26; CHECK-LABEL: f3:27; CHECK: brasl %r14, __floattisf@PLT28; CHECK: br %r1429 %conv = sitofp i128 %i to float30 ret float %conv31}32 33; Test signed i128->f16.34define half @f4(i128 %i) {35; CHECK-LABEL: f4:36; CHECK: brasl %r14, __floattisf@PLT37; CHECK: brasl %r14, __truncsfhf2@PLT38; CHECK: br %r1439 %conv = sitofp i128 %i to half40 ret half %conv41}42 43; Test unsigned i128->f128.44define fp128 @f5(i128 %i) {45; CHECK-LABEL: f5:46; CHECK: brasl %r14, __floatuntitf@PLT47; CHECK: br %r1448 %conv = uitofp i128 %i to fp12849 ret fp128 %conv50}51 52; Test unsigned i128->f64.53define double @f6(i128 %i) {54; CHECK-LABEL: f6:55; CHECK: brasl %r14, __floatuntidf@PLT56; CHECK: br %r1457 %conv = uitofp i128 %i to double58 ret double %conv59}60 61; Test unsigned i128->f32.62define float @f7(i128 %i) {63; CHECK-LABEL: f7:64; CHECK: brasl %r14, __floatuntisf@PLT65; CHECK: br %r1466 %conv = uitofp i128 %i to float67 ret float %conv68}69 70; Test unsigned i128->f16.71define half @f8(i128 %i) {72; CHECK-LABEL: f8:73; CHECK: brasl %r14, __floatuntisf@PLT74; CHECK: brasl %r14, __truncsfhf2@PLT75; CHECK: br %r1476 %conv = uitofp i128 %i to half77 ret half %conv78}79 80; Test signed f128->i128.81define i128 @f9(fp128 %f) {82; CHECK-LABEL: f9:83; CHECK: brasl %r14, __fixtfti@PLT84; CHECK: br %r1485 %conv = fptosi fp128 %f to i12886 ret i128 %conv87}88 89; Test signed f64->i128.90define i128 @f10(double %f) {91; CHECK-LABEL: f10:92; CHECK: brasl %r14, __fixdfti@PLT93; CHECK: br %r1494 %conv = fptosi double %f to i12895 ret i128 %conv96}97 98; Test signed f32->i128.99define i128 @f11(float %f) {100; CHECK-LABEL: f11:101; CHECK: brasl %r14, __fixsfti@PLT102; CHECK: br %r14103 %conv = fptosi float %f to i128104 ret i128 %conv105}106 107; Test signed f16->i128.108define i128 @f12(half %f) {109; CHECK-LABEL: f12:110; CHECK: brasl %r14, __extendhfsf2@PLT111; CHECK: brasl %r14, __fixsfti@PLT112; CHECK: br %r14113 %conv = fptosi half %f to i128114 ret i128 %conv115}116 117; Test unsigned f128->i128.118define i128 @f13(fp128 %f) {119; CHECK-LABEL: f13:120; CHECK: brasl %r14, __fixunstfti@PLT121; CHECK: br %r14122 %conv = fptoui fp128 %f to i128123 ret i128 %conv124}125 126; Test unsigned f64->i128.127define i128 @f14(double %f) {128; CHECK-LABEL: f14:129; CHECK: brasl %r14, __fixunsdfti@PLT130; CHECK: br %r14131 %conv = fptoui double %f to i128132 ret i128 %conv133}134 135; Test unsigned f32->i128.136define i128 @f15(float %f) {137; CHECK-LABEL: f15:138; CHECK: brasl %r14, __fixunssfti@PLT139; CHECK: br %r14140 %conv = fptoui float %f to i128141 ret i128 %conv142}143 144; Test unsigned f16->i128.145define i128 @f16(half %f) {146; CHECK-LABEL: f16:147; CHECK: brasl %r14, __extendhfsf2@PLT148; CHECK: brasl %r14, __fixunssfti@PLT149; CHECK: br %r14150 %conv = fptoui half %f to i128151 ret i128 %conv152}153