xref: /llvm-project/llvm/test/CodeGen/SystemZ/atomic-load-09.ll (revision de117dd533547f8bc8d00ea989252021ec1e877e)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2; Test long double atomic loads on z14.
3;
4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
5
6define void @f1(ptr %ret, ptr %src) {
7; CHECK-LABEL: f1:
8; CHECK:       # %bb.0:
9; CHECK-NEXT:    lpq %r0, 0(%r3)
10; CHECK-NEXT:    stg %r1, 8(%r2)
11; CHECK-NEXT:    stg %r0, 0(%r2)
12; CHECK-NEXT:    br %r14
13  %val = load atomic fp128, ptr %src seq_cst, align 16
14  store fp128 %val, ptr %ret, align 8
15  ret void
16}
17
18define void @f1_fpuse(ptr %ret, ptr %src) {
19; CHECK-LABEL: f1_fpuse:
20; CHECK:       # %bb.0:
21; CHECK-NEXT:    lpq %r0, 0(%r3)
22; CHECK-NEXT:    vlvgp %v0, %r0, %r1
23; CHECK-NEXT:    wfaxb %v0, %v0, %v0
24; CHECK-NEXT:    vst %v0, 0(%r2), 3
25; CHECK-NEXT:    br %r14
26  %val = load atomic fp128, ptr %src seq_cst, align 16
27  %use = fadd fp128 %val, %val
28  store fp128 %use, ptr %ret, align 8
29  ret void
30}
31
32define void @f2(ptr %ret, ptr %src) {
33; CHECK-LABEL: f2:
34; CHECK:       # %bb.0:
35; CHECK-NEXT:    stmg %r13, %r15, 104(%r15)
36; CHECK-NEXT:    .cfi_offset %r13, -56
37; CHECK-NEXT:    .cfi_offset %r14, -48
38; CHECK-NEXT:    .cfi_offset %r15, -40
39; CHECK-NEXT:    aghi %r15, -176
40; CHECK-NEXT:    .cfi_def_cfa_offset 336
41; CHECK-NEXT:    lgr %r13, %r2
42; CHECK-NEXT:    la %r4, 160(%r15)
43; CHECK-NEXT:    lghi %r2, 16
44; CHECK-NEXT:    lhi %r5, 5
45; CHECK-NEXT:    brasl %r14, __atomic_load@PLT
46; CHECK-NEXT:    vl %v0, 160(%r15), 3
47; CHECK-NEXT:    vst %v0, 0(%r13), 3
48; CHECK-NEXT:    lmg %r13, %r15, 280(%r15)
49; CHECK-NEXT:    br %r14
50  %val = load atomic fp128, ptr %src seq_cst, align 8
51  store fp128 %val, ptr %ret, align 8
52  ret void
53}
54
55define void @f2_fpuse(ptr %ret, ptr %src) {
56; CHECK-LABEL: f2_fpuse:
57; CHECK:       # %bb.0:
58; CHECK-NEXT:    stmg %r13, %r15, 104(%r15)
59; CHECK-NEXT:    .cfi_offset %r13, -56
60; CHECK-NEXT:    .cfi_offset %r14, -48
61; CHECK-NEXT:    .cfi_offset %r15, -40
62; CHECK-NEXT:    aghi %r15, -176
63; CHECK-NEXT:    .cfi_def_cfa_offset 336
64; CHECK-NEXT:    lgr %r13, %r2
65; CHECK-NEXT:    la %r4, 160(%r15)
66; CHECK-NEXT:    lghi %r2, 16
67; CHECK-NEXT:    lhi %r5, 5
68; CHECK-NEXT:    brasl %r14, __atomic_load@PLT
69; CHECK-NEXT:    vl %v0, 160(%r15), 3
70; CHECK-NEXT:    wfaxb %v0, %v0, %v0
71; CHECK-NEXT:    vst %v0, 0(%r13), 3
72; CHECK-NEXT:    lmg %r13, %r15, 280(%r15)
73; CHECK-NEXT:    br %r14
74  %val = load atomic fp128, ptr %src seq_cst, align 8
75  %use = fadd fp128 %val, %val
76  store fp128 %use, ptr %ret, align 8
77  ret void
78}
79