Skip to content

Commit de117dd

Browse files
committed
[SystemZ] Add some more atomic load/store tests
Verify atomic load/store of f128 on z14 where the type lives in VRs.
1 parent 41dd07b commit de117dd

File tree

2 files changed

+159
-0
lines changed

2 files changed

+159
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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+
6+
define 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+
18+
define 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+
32+
define 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+
55+
define 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+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; Test long double atomic stores on z14.
3+
;
4+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
5+
6+
define void @f1(ptr %dst, ptr %src) {
7+
; CHECK-LABEL: f1:
8+
; CHECK: # %bb.0:
9+
; CHECK-NEXT: lg %r1, 8(%r3)
10+
; CHECK-NEXT: lg %r0, 0(%r3)
11+
; CHECK-NEXT: stpq %r0, 0(%r2)
12+
; CHECK-NEXT: bcr 14, %r0
13+
; CHECK-NEXT: br %r14
14+
%val = load fp128, ptr %src, align 8
15+
store atomic fp128 %val, ptr %dst seq_cst, align 16
16+
ret void
17+
}
18+
19+
define void @f1_fpsrc(ptr %dst, ptr %src) {
20+
; CHECK-LABEL: f1_fpsrc:
21+
; CHECK: # %bb.0:
22+
; CHECK-NEXT: vl %v0, 0(%r3), 3
23+
; CHECK-NEXT: wfaxb %v0, %v0, %v0
24+
; CHECK-NEXT: vlgvg %r1, %v0, 1
25+
; CHECK-NEXT: vlgvg %r0, %v0, 0
26+
; CHECK-NEXT: stpq %r0, 0(%r2)
27+
; CHECK-NEXT: bcr 14, %r0
28+
; CHECK-NEXT: br %r14
29+
%val = load fp128, ptr %src, align 8
30+
%add = fadd fp128 %val, %val
31+
store atomic fp128 %add, ptr %dst seq_cst, align 16
32+
ret void
33+
}
34+
35+
define void @f2(ptr %dst, ptr %src) {
36+
; CHECK-LABEL: f2:
37+
; CHECK: # %bb.0:
38+
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
39+
; CHECK-NEXT: .cfi_offset %r14, -48
40+
; CHECK-NEXT: .cfi_offset %r15, -40
41+
; CHECK-NEXT: aghi %r15, -176
42+
; CHECK-NEXT: .cfi_def_cfa_offset 336
43+
; CHECK-NEXT: vl %v0, 0(%r3), 3
44+
; CHECK-NEXT: lgr %r0, %r2
45+
; CHECK-NEXT: la %r4, 160(%r15)
46+
; CHECK-NEXT: lghi %r2, 16
47+
; CHECK-NEXT: lgr %r3, %r0
48+
; CHECK-NEXT: lhi %r5, 5
49+
; CHECK-NEXT: vst %v0, 160(%r15), 3
50+
; CHECK-NEXT: brasl %r14, __atomic_store@PLT
51+
; CHECK-NEXT: lmg %r14, %r15, 288(%r15)
52+
; CHECK-NEXT: br %r14
53+
%val = load fp128, ptr %src, align 8
54+
store atomic fp128 %val, ptr %dst seq_cst, align 8
55+
ret void
56+
}
57+
58+
define void @f2_fpuse(ptr %dst, ptr %src) {
59+
; CHECK-LABEL: f2_fpuse:
60+
; CHECK: # %bb.0:
61+
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
62+
; CHECK-NEXT: .cfi_offset %r14, -48
63+
; CHECK-NEXT: .cfi_offset %r15, -40
64+
; CHECK-NEXT: aghi %r15, -176
65+
; CHECK-NEXT: .cfi_def_cfa_offset 336
66+
; CHECK-NEXT: vl %v0, 0(%r3), 3
67+
; CHECK-NEXT: wfaxb %v0, %v0, %v0
68+
; CHECK-NEXT: lgr %r0, %r2
69+
; CHECK-NEXT: la %r4, 160(%r15)
70+
; CHECK-NEXT: lghi %r2, 16
71+
; CHECK-NEXT: lgr %r3, %r0
72+
; CHECK-NEXT: lhi %r5, 5
73+
; CHECK-NEXT: vst %v0, 160(%r15), 3
74+
; CHECK-NEXT: brasl %r14, __atomic_store@PLT
75+
; CHECK-NEXT: lmg %r14, %r15, 288(%r15)
76+
; CHECK-NEXT: br %r14
77+
%val = load fp128, ptr %src, align 8
78+
%add = fadd fp128 %val, %val
79+
store atomic fp128 %add, ptr %dst seq_cst, align 8
80+
ret void
81+
}

0 commit comments

Comments
 (0)