brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · 7ad1e4c Raw
192 lines · plain
1; Test the passing of scalar values in GPRs, FPRs in 64-bit calls on z/OS.2;3; RUN: llc < %s -mtriple=s390x-ibm-zos -mcpu=z10 | FileCheck %s4 5; CHECK-LABEL: call_char:6; CHECK: lghi  1,87define i8 @call_char(){8  %retval = call i8 (i8) @pass_char(i8 8)9  ret i8 %retval10}11 12; CHECK-LABEL: call_short:13; CHECK: lghi  1,1614define i16 @call_short() {15entry:16  %retval = call i16 (i16) @pass_short(i16 16)17  ret i16 %retval18}19 20; CHECK-LABEL: call_int:21; CHECK: lghi  1,3222; CHECK: lghi  2,3323define i32 @call_int() {24entry:25  %retval = call i32 (i32, i32) @pass_int(i32 32, i32 33)26  ret i32 %retval27}28 29; CHECK-LABEL: call_long:30; CHECK: lghi  1,6431; CHECK: lghi  2,6532; CHECK: lghi  3,6633define i64 @call_long() {34entry:35  %retval = call i64 (i64, i64, i64) @pass_long(i64 64, i64 65, i64 66)36  ret i64 %retval37}38 39; CHECK-LABEL: call_ptr:40; CHECK: lgr 1,241define i32 @call_ptr(ptr %p1, ptr %p2) {42entry:43  %retval = call i32 (ptr) @pass_ptr(ptr %p2)44  ret i32 %retval45}46 47; CHECK-LABEL: call_integrals:48; CHECK: lghi  1,6449; CHECK: lghi  2,3250; CHECK: lghi  3,1651define i64 @call_integrals() {52entry:53  %retval = call i64 (i64, i32, i16, i64) @pass_integrals0(i64 64, i32 32, i16 16, i64 128)54  ret i64 %retval55}56 57; CHECK-LABEL: pass_char:58; CHECK: lgr 3,159define signext i8 @pass_char(i8 signext %arg) {60entry:61  ret i8 %arg62}63 64; CHECK-LABEL: pass_short:65; CHECK: lgr 3,166define signext i16 @pass_short(i16 signext %arg) {67entry:68  ret i16 %arg69}70 71; CHECK-LABEL: pass_int:72; CHECK: lgr 3,273define signext i32 @pass_int(i32 signext %arg0, i32 signext %arg1) {74entry:75  ret i32 %arg176}77 78; CHECK-LABEL: pass_long:79; CHECK: agr 1,280; CHECK: agr 3,181define signext i64 @pass_long(i64 signext %arg0, i64 signext %arg1, i64 signext %arg2) {82entry:83  %N = add i64 %arg0, %arg184  %M = add i64 %N, %arg285  ret i64 %M86}87 88; CHECK-LABEL: pass_integrals0:89; CHECK: ag  2,2200(4)90; CHECK-NEXT: lgr 3,291define signext i64 @pass_integrals0(i64 signext %arg0, i32 signext %arg1, i16 signext %arg2, i64 signext %arg3) {92entry:93  %N = sext i32 %arg1 to i6494  %M = add i64 %arg3, %N95  ret i64 %M96}97 98; CHECK-LABEL: call_float:99; CHECK: le 0,0({{[0-9]}})100define float @call_float() {101entry:102  %ret = call float (float) @pass_float(float 0x400921FB60000000)103  ret float %ret104}105 106; CHECK-LABEL: call_double:107; CHECK: larl  [[GENREG:[0-9]+]],L#{{CPI[0-9]+_[0-9]+}}108; CHECK-NEXT: ld  0,0([[GENREG]])109define double @call_double() {110entry:111  %ret = call double (double) @pass_double(double 3.141000e+00)112  ret double %ret113}114 115; CHECK-LABEL: call_longdouble:116; CHECK: larl  [[GENREG:[0-9]+]],L#{{CPI[0-9]+_[0-9]+}}117; CHECK-NEXT: ld  0,0([[GENREG]])118; CHECK-NEXT: ld  2,8([[GENREG]])119define fp128 @call_longdouble() {120entry:121  %ret = call fp128 (fp128) @pass_longdouble(fp128 0xLE0FC1518450562CD4000921FB5444261)122  ret fp128 %ret123}124 125; CHECK-LABEL: call_floats0126; CHECK: larl  [[GENREG:[0-9]+]],L#{{CPI[0-9]+_[0-9]+}}127; CHECK-NEXT: ld  1,0([[GENREG]])128; CHECK-NEXT: ld  3,8([[GENREG]])129; CHECK: lxr 5,0130; CHECK: lxr 0,1131; CHECK: lxr 4,5132define i64 @call_floats0(fp128 %arg0, double %arg1) {133entry:134  %ret = call i64 (fp128, fp128, double) @pass_floats0(fp128 0xLE0FC1518450562CD4000921FB5444261, fp128 %arg0, double %arg1)135  ret i64 %ret136}137 138; CHECK-LABEL: call_floats1139; CHECK: lxr 1,0140; CHECK: ldr 0,4141; CHECK: lxr 4,1142define i64 @call_floats1(fp128 %arg0, double %arg1) {143entry:144  %ret = call i64 (double, fp128) @pass_floats1(double %arg1, fp128 %arg0)145  ret i64 %ret146}147 148; CHECK-LABEL: pass_float:149; CHECK: larl  1,L#{{CPI[0-9]+_[0-9]+}}150; CHECK: aeb 0,0(1)151define float @pass_float(float %arg) {152entry:153  %X = fadd float %arg, 0x400821FB60000000154  ret float %X155}156 157; CHECK-LABEL: pass_double:158; CHECK: larl  1,L#{{CPI[0-9]+_[0-9]+}}159; CHECK: adb 0,0(1)160define double @pass_double(double %arg) {161entry:162  %X = fadd double %arg, 1.414213e+00163  ret double %X164}165 166; CHECK-LABEL: pass_longdouble167; CHECK: larl  1,L#{{CPI[0-9]+_[0-9]+}}168; CHECK: lxdb  1,0(1)169; CHECK: axbr  0,1170define fp128 @pass_longdouble(fp128 %arg) {171entry:172  %X = fadd fp128 %arg, 0xL10000000000000004000921FB53C8D4F173  ret fp128 %X174}175 176; CHECK-LABEL: pass_floats0177; CHECK: larl  1,L#{{CPI[0-9]+_[0-9]+}}178; CHECK: axbr  0,4179; CHECK: axbr  1,0180; CHECK: cxbr  1,5181define i64 @pass_floats0(fp128 %arg0, fp128 %arg1, double %arg2) {182  %X = fadd fp128 %arg0, %arg1183  %arg2_ext = fpext double %arg2 to fp128184  %Y = fadd fp128 %X, %arg2_ext185  %ret_bool = fcmp ueq fp128 %Y, 0xLE0FC1518450562CD4000921FB5444261186  %ret = sext i1 %ret_bool to i64187  ret i64 %ret188}189 190declare i64 @pass_floats1(double %arg0, fp128 %arg1)191declare i32 @pass_ptr(ptr %arg)192