xref: /llvm-project/llvm/test/CodeGen/SystemZ/args-12.ll (revision 8424bf207efd89eacf2fe893b67be98d535e1db6)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; Test the handling of i128 argument values
3;
4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
5; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=arch15 | FileCheck %s
6
7declare void @bar(i64, i64, i64, i64, i128,
8                  i64, i64, i64, i64, i128)
9
10; There are two indirect i128 slots, one at offset 200 (the first available
11; byte after the outgoing arguments) and one immediately after it at 216.
12
13define void @foo() {
14; CHECK-LABEL: foo:
15; CHECK:       # %bb.0:
16; CHECK-NEXT:    stmg %r6, %r15, 48(%r15)
17; CHECK-NEXT:    .cfi_offset %r6, -112
18; CHECK-NEXT:    .cfi_offset %r14, -48
19; CHECK-NEXT:    .cfi_offset %r15, -40
20; CHECK-NEXT:    aghi %r15, -232
21; CHECK-NEXT:    .cfi_def_cfa_offset 392
22; CHECK-NEXT:    larl %r1, .LCPI0_0
23; CHECK-NEXT:    vl %v0, 0(%r1), 3
24; CHECK-NEXT:    la %r0, 200(%r15)
25; CHECK-NEXT:    larl %r1, .LCPI0_1
26; CHECK-NEXT:    stg %r0, 192(%r15)
27; CHECK-NEXT:    vst %v0, 176(%r15), 3
28; CHECK-NEXT:    vl %v0, 0(%r1), 3
29; CHECK-NEXT:    vst %v0, 160(%r15), 3
30; CHECK-NEXT:    vgbm %v0, 0
31; CHECK-NEXT:    la %r6, 216(%r15)
32; CHECK-NEXT:    lghi %r2, 1
33; CHECK-NEXT:    lghi %r3, 2
34; CHECK-NEXT:    lghi %r4, 3
35; CHECK-NEXT:    lghi %r5, 4
36; CHECK-NEXT:    vst %v0, 200(%r15), 3
37; CHECK-NEXT:    vst %v0, 216(%r15), 3
38; CHECK-NEXT:    brasl %r14, bar@PLT
39; CHECK-NEXT:    lmg %r6, %r15, 280(%r15)
40; CHECK-NEXT:    br %r14
41  call void @bar (i64 1, i64 2, i64 3, i64 4, i128 0,
42                  i64 5, i64 6, i64 7, i64 8, i128 0)
43  ret void
44}
45