1; Test floating-point conversion to/from 128-bit integers. 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 5 6; Test signed i128->f128. 7define fp128 @f1(i128 %i) { 8; CHECK-LABEL: f1: 9; CHECK: brasl %r14, __floattitf@PLT 10; CHECK: br %r14 11 %conv = sitofp i128 %i to fp128 12 ret fp128 %conv 13} 14 15; Test signed i128->f64. 16define double @f2(i128 %i) { 17; CHECK-LABEL: f2: 18; CHECK: brasl %r14, __floattidf@PLT 19; CHECK: br %r14 20 %conv = sitofp i128 %i to double 21 ret double %conv 22} 23 24; Test signed i128->f32. 25define float @f3(i128 %i) { 26; CHECK-LABEL: f3: 27; CHECK: brasl %r14, __floattisf@PLT 28; CHECK: br %r14 29 %conv = sitofp i128 %i to float 30 ret float %conv 31} 32 33; Test unsigned i128->f128. 34define fp128 @f4(i128 %i) { 35; CHECK-LABEL: f4: 36; CHECK: brasl %r14, __floatuntitf@PLT 37; CHECK: br %r14 38 %conv = uitofp i128 %i to fp128 39 ret fp128 %conv 40} 41 42; Test unsigned i128->f64. 43define double @f5(i128 %i) { 44; CHECK-LABEL: f5: 45; CHECK: brasl %r14, __floatuntidf@PLT 46; CHECK: br %r14 47 %conv = uitofp i128 %i to double 48 ret double %conv 49} 50 51; Test unsigned i128->f32. 52define float @f6(i128 %i) { 53; CHECK-LABEL: f6: 54; CHECK: brasl %r14, __floatuntisf@PLT 55; CHECK: br %r14 56 %conv = uitofp i128 %i to float 57 ret float %conv 58} 59 60; Test signed f128->i128. 61define i128 @f7(fp128 %f) { 62; CHECK-LABEL: f7: 63; CHECK: brasl %r14, __fixtfti@PLT 64; CHECK: br %r14 65 %conv = fptosi fp128 %f to i128 66 ret i128 %conv 67} 68 69; Test signed f64->i128. 70define i128 @f8(double %f) { 71; CHECK-LABEL: f8: 72; CHECK: brasl %r14, __fixdfti@PLT 73; CHECK: br %r14 74 %conv = fptosi double %f to i128 75 ret i128 %conv 76} 77 78; Test signed f9->i128. 79define i128 @f9(float %f) { 80; CHECK-LABEL: f9: 81; CHECK: brasl %r14, __fixsfti@PLT 82; CHECK: br %r14 83 %conv = fptosi float %f to i128 84 ret i128 %conv 85} 86 87; Test unsigned f128->i128. 88define i128 @f10(fp128 %f) { 89; CHECK-LABEL: f10: 90; CHECK: brasl %r14, __fixunstfti@PLT 91; CHECK: br %r14 92 %conv = fptoui fp128 %f to i128 93 ret i128 %conv 94} 95 96; Test unsigned f64->i128. 97define i128 @f11(double %f) { 98; CHECK-LABEL: f11: 99; CHECK: brasl %r14, __fixunsdfti@PLT 100; CHECK: br %r14 101 %conv = fptoui double %f to i128 102 ret i128 %conv 103} 104 105; Test unsigned f32->i128. 106define i128 @f12(float %f) { 107; CHECK-LABEL: f12: 108; CHECK: brasl %r14, __fixunssfti@PLT 109; CHECK: br %r14 110 %conv = fptoui float %f to i128 111 ret i128 %conv 112} 113