xref: /llvm-project/llvm/test/CodeGen/SystemZ/args-13.ll (revision 8424bf207efd89eacf2fe893b67be98d535e1db6)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; Test incoming i128 arguments.
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
7; Do some arithmetic so that we can see the register being used.
8define void @f1(ptr %r2, i16 %r3, i32 %r4, i64 %r5, i128 %r6) {
9; CHECK-LABEL: f1:
10; CHECK:       # %bb.0:
11; CHECK-NEXT:    vl %v0, 0(%r6), 3
12; CHECK-NEXT:    vaq %v0, %v0, %v0
13; CHECK-NEXT:    vst %v0, 0(%r2), 3
14; CHECK-NEXT:    br %r14
15  %y = add i128 %r6, %r6
16  store i128 %y, ptr %r2
17  ret void
18}
19
20; Test a case where the i128 address is passed on the stack.
21define void @f2(ptr %r2, i16 %r3, i32 %r4, i64 %r5, i128 %r6, i64 %s1, i64 %s2, i128 %s4) {
22; CHECK-LABEL: f2:
23; CHECK:       # %bb.0:
24; CHECK-NEXT:    lg %r1, 176(%r15)
25; CHECK-NEXT:    vl %v0, 0(%r1), 3
26; CHECK-NEXT:    vaq %v0, %v0, %v0
27; CHECK-NEXT:    vst %v0, 0(%r2), 3
28; CHECK-NEXT:    br %r14
29  %y = add i128 %s4, %s4
30  store i128 %y, ptr %r2
31  ret void
32}
33
34; Explicit i128 return values are likewise passed indirectly.
35define i128 @f14(i128 %r3) {
36; CHECK-LABEL: f14:
37; CHECK:       # %bb.0:
38; CHECK-NEXT:    vl %v0, 0(%r3), 3
39; CHECK-NEXT:    vaq %v0, %v0, %v0
40; CHECK-NEXT:    vst %v0, 0(%r2), 3
41; CHECK-NEXT:    br %r14
42  %y = add i128 %r3, %r3
43  ret i128 %y
44}
45
46