95 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; Test calling functions with multiple return values (LLVM ABI extension)3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s5; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 -mattr=soft-float \6; RUN: | FileCheck %s --check-prefix=SOFT-FLOAT7 8; Up to eight vector return values fit into VRs.9declare { <2 x double>, <2 x double>, <2 x double>, <2 x double>,10 <2 x double>, <2 x double>, <2 x double>, <2 x double> } @bar1()11 12define <2 x double> @f1() {13; CHECK-LABEL: f1:14; CHECK: # %bb.0:15; CHECK-NEXT: stmg %r14, %r15, 112(%r15)16; CHECK-NEXT: .cfi_offset %r14, -4817; CHECK-NEXT: .cfi_offset %r15, -4018; CHECK-NEXT: aghi %r15, -16019; CHECK-NEXT: .cfi_def_cfa_offset 32020; CHECK-NEXT: brasl %r14, bar1@PLT21; CHECK-NEXT: vlr %v24, %v3122; CHECK-NEXT: lmg %r14, %r15, 272(%r15)23; CHECK-NEXT: br %r1424;25; SOFT-FLOAT-LABEL: f1:26; SOFT-FLOAT: # %bb.0:27; SOFT-FLOAT-NEXT: stmg %r14, %r15, 112(%r15)28; SOFT-FLOAT-NEXT: .cfi_offset %r14, -4829; SOFT-FLOAT-NEXT: .cfi_offset %r15, -4030; SOFT-FLOAT-NEXT: aghi %r15, -28831; SOFT-FLOAT-NEXT: .cfi_def_cfa_offset 44832; SOFT-FLOAT-NEXT: la %r2, 160(%r15)33; SOFT-FLOAT-NEXT: brasl %r14, bar1@PLT34; SOFT-FLOAT-NEXT: lg %r3, 280(%r15)35; SOFT-FLOAT-NEXT: lg %r2, 272(%r15)36; SOFT-FLOAT-NEXT: lmg %r14, %r15, 400(%r15)37; SOFT-FLOAT-NEXT: br %r1438 39 %mret = call { <2 x double>, <2 x double>,40 <2 x double>, <2 x double>,41 <2 x double>, <2 x double>,42 <2 x double>, <2 x double> } @bar1()43 %ret = extractvalue { <2 x double>, <2 x double>,44 <2 x double>, <2 x double>,45 <2 x double>, <2 x double>,46 <2 x double>, <2 x double> } %mret, 747 ret <2 x double> %ret48}49 50; More than eight vector return values use sret.51declare { <2 x double>, <2 x double>, <2 x double>, <2 x double>,52 <2 x double>, <2 x double>, <2 x double>, <2 x double>,53 <2 x double> } @bar2()54 55define <2 x double> @f2() {56; CHECK-LABEL: f2:57; CHECK: # %bb.0:58; CHECK-NEXT: stmg %r14, %r15, 112(%r15)59; CHECK-NEXT: .cfi_offset %r14, -4860; CHECK-NEXT: .cfi_offset %r15, -4061; CHECK-NEXT: aghi %r15, -30462; CHECK-NEXT: .cfi_def_cfa_offset 46463; CHECK-NEXT: la %r2, 160(%r15)64; CHECK-NEXT: brasl %r14, bar2@PLT65; CHECK-NEXT: vl %v24, 288(%r15), 366; CHECK-NEXT: lmg %r14, %r15, 416(%r15)67; CHECK-NEXT: br %r1468;69; SOFT-FLOAT-LABEL: f2:70; SOFT-FLOAT: # %bb.0:71; SOFT-FLOAT-NEXT: stmg %r14, %r15, 112(%r15)72; SOFT-FLOAT-NEXT: .cfi_offset %r14, -4873; SOFT-FLOAT-NEXT: .cfi_offset %r15, -4074; SOFT-FLOAT-NEXT: aghi %r15, -30475; SOFT-FLOAT-NEXT: .cfi_def_cfa_offset 46476; SOFT-FLOAT-NEXT: la %r2, 160(%r15)77; SOFT-FLOAT-NEXT: brasl %r14, bar2@PLT78; SOFT-FLOAT-NEXT: lg %r3, 296(%r15)79; SOFT-FLOAT-NEXT: lg %r2, 288(%r15)80; SOFT-FLOAT-NEXT: lmg %r14, %r15, 416(%r15)81; SOFT-FLOAT-NEXT: br %r1482 83 %mret = call { <2 x double>, <2 x double>,84 <2 x double>, <2 x double>,85 <2 x double>, <2 x double>,86 <2 x double>, <2 x double>,87 <2 x double> } @bar2()88 %ret = extractvalue { <2 x double>, <2 x double>,89 <2 x double>, <2 x double>,90 <2 x double>, <2 x double>,91 <2 x double>, <2 x double>,92 <2 x double> } %mret, 893 ret <2 x double> %ret94}95