brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · b20707b Raw
86 lines · plain
1; Test multiple return values (LLVM ABI extension)2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -verify-machineinstrs| FileCheck %s4; RUN: llc < %s -mtriple=s390x-linux-gnu -verify-machineinstrs \5; RUN:   -mattr=soft-float | FileCheck %s --check-prefix=SOFT-FLOAT6 7; Up to four integer return values fit into GPRs.8define { i64, i64, i64, i64 } @f1() {9; CHECK-LABEL: f1:10; CHECK: lghi %r2, 011; CHECK: lghi %r3, 112; CHECK: lghi %r4, 213; CHECK: lghi %r5, 314; CHECK: br %r1415  ret { i64, i64, i64, i64 } { i64 0, i64 1, i64 2, i64 3 }16}17 18; More than four integer return values use sret.19define { i64, i64, i64, i64, i64 } @f2() {20; CHECK-LABEL: f2:21; CHECK: mvghi 32(%r2), 422; CHECK: mvghi 24(%r2), 323; CHECK: mvghi 16(%r2), 224; CHECK: mvghi 8(%r2), 125; CHECK: mvghi 0(%r2), 026; CHECK: br %r1427  ret { i64, i64, i64, i64, i64 } { i64 0, i64 1, i64 2, i64 3, i64 4 }28}29 30; Up to four floating-point return values fit into FPRs.31define { double, double, double, double } @f3() {32; CHECK-LABEL: f3:33; CHECK: larl [[TMP:%r[0-5]]], .LCPI34; CHECK: ld %f0, 0([[TMP]])35; CHECK: larl [[TMP:%r[0-5]]], .LCPI36; CHECK: ld %f2, 0([[TMP]])37; CHECK: larl [[TMP:%r[0-5]]], .LCPI38; CHECK: ld %f4, 0([[TMP]])39; CHECK: larl [[TMP:%r[0-5]]], .LCPI40; CHECK: ld %f6, 0([[TMP]])41; CHECK: br %r1442 43; SOFT-FLOAT-LABEL: f3:44; SOFT-FLOAT-NOT: %{{[fv]}}45; SOFT-FLOAT: llihh   %r2, 1636846; SOFT-FLOAT-NEXT: llihh   %r3, 1638447; SOFT-FLOAT-NEXT: llihh   %r4, 1639248; SOFT-FLOAT-NEXT: llihh   %r5, 1640049; SOFT-FLOAT-NEXT: br      %r1450  ret { double, double, double, double }51      { double 1.0, double 2.0, double 3.0, double 4.0 }52}53 54; More than four floating-point return values use sret.55define { double, double, double, double, double } @f4() {56; CHECK-LABEL: f4:57; CHECK: llihh [[TMP:%r[0-5]]], 1640458; CHECK: stg [[TMP]], 32(%r2)59; CHECK: llihh [[TMP:%r[0-5]]], 1640060; CHECK: stg [[TMP]], 24(%r2)61; CHECK: llihh [[TMP:%r[0-5]]], 1639262; CHECK: stg [[TMP]], 16(%r2)63; CHECK: llihh [[TMP:%r[0-5]]], 1638464; CHECK: stg [[TMP]], 8(%r2)65; CHECK: llihh [[TMP:%r[0-5]]], 1636866; CHECK: stg [[TMP]], 0(%r2)67; CHECK: br %r1468 69; SOFT-FLOAT-LABEL: f4:70; SOFT-FLOAT-NOT: %{{[fv]}}71; SOFT-FLOAT-NOT: %r272; SOFT-FLOAT: llihh   %r0, 1640473; SOFT-FLOAT-NEXT: stg     %r0, 32(%r2)74; SOFT-FLOAT-NEXT: llihh   %r0, 1640075; SOFT-FLOAT-NEXT: stg     %r0, 24(%r2)76; SOFT-FLOAT-NEXT: llihh   %r0, 1639277; SOFT-FLOAT-NEXT: stg     %r0, 16(%r2)78; SOFT-FLOAT-NEXT: llihh   %r0, 1638479; SOFT-FLOAT-NEXT: stg     %r0, 8(%r2)80; SOFT-FLOAT-NEXT: llihh   %r0, 1636881; SOFT-FLOAT-NEXT: stg     %r0, 0(%r2)82; SOFT-FLOAT-NEXT: br      %r1483  ret { double, double, double, double, double }84      { double 1.0, double 2.0, double 3.0, double 4.0, double 5.0 }85}86