Skip to content

Commit 3a1e559

Browse files
authored
SystemZ: Add some tests for fp128 atomics with soft-float (#90826)
1 parent a2f9797 commit 3a1e559

File tree

3 files changed

+168
-50
lines changed

3 files changed

+168
-50
lines changed

llvm/test/CodeGen/SystemZ/atomic-load-08.ll

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,23 @@
55
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck -check-prefixes=CHECK,BASE %s
66
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck -check-prefixes=CHECK,Z13 %s
77

8+
; TODO: Is it worth testing softfp with vector?
9+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mattr=+soft-float | FileCheck -check-prefixes=SOFTFP %s
10+
811
define void @f1(ptr %ret, ptr %src) {
912
; CHECK-LABEL: f1:
1013
; CHECK: # %bb.0:
1114
; CHECK-NEXT: lpq %r0, 0(%r3)
1215
; CHECK-NEXT: stg %r1, 8(%r2)
1316
; CHECK-NEXT: stg %r0, 0(%r2)
1417
; CHECK-NEXT: br %r14
18+
19+
; SOFTFP-LABEL: f1:
20+
; SOFTFP: # %bb.0:
21+
; SOFTFP-NEXT: lpq %r0, 0(%r3)
22+
; SOFTFP-NEXT: stg %r1, 8(%r2)
23+
; SOFTFP-NEXT: stg %r0, 0(%r2)
24+
; SOFTFP-NEXT: br %r14
1525
%val = load atomic fp128, ptr %src seq_cst, align 16
1626
store fp128 %val, ptr %ret, align 8
1727
ret void
@@ -39,6 +49,26 @@ define void @f1_fpuse(ptr %ret, ptr %src) {
3949
; BASE-NEXT: aghi %r15, 176
4050
; CHECK-NEXT: br %r14
4151

52+
53+
; SOFTFP-LABEL: f1_fpuse:
54+
; SOFTFP: stmg %r13, %r15, 104(%r15)
55+
; SOFTFP: aghi %r15, -208
56+
; SOFTFP: lpq %r0, 0(%r3)
57+
; SOFTFP-NEXT: lgr %r13, %r2
58+
; SOFTFP-NEXT: stg %r1, 168(%r15)
59+
; SOFTFP-NEXT: stg %r0, 160(%r15)
60+
; SOFTFP-NEXT: stg %r1, 184(%r15)
61+
; SOFTFP-NEXT: la %r2, 192(%r15)
62+
; SOFTFP-NEXT: la %r3, 176(%r15)
63+
; SOFTFP-NEXT: la %r4, 160(%r15)
64+
; SOFTFP-NEXT: stg %r0, 176(%r15)
65+
; SOFTFP-NEXT: brasl %r14, __addtf3@PLT
66+
; SOFTFP-NEXT: lg %r0, 200(%r15)
67+
; SOFTFP-NEXT: lg %r1, 192(%r15)
68+
; SOFTFP-NEXT: stg %r0, 8(%r13)
69+
; SOFTFP-NEXT: stg %r1, 0(%r13)
70+
; SOFTFP-NEXT: lmg %r13, %r15, 312(%r15)
71+
; SOFTFP-NEXT: br %r14
4272
%val = load atomic fp128, ptr %src seq_cst, align 16
4373
%use = fadd fp128 %val, %val
4474
store fp128 %use, ptr %ret, align 8

llvm/test/CodeGen/SystemZ/atomic-store-08.ll

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck -check-prefixes=CHECK,BASE %s
55
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck -check-prefixes=CHECK,Z13 %s
66

7+
; TODO: Is it worth testing softfp with vector?
8+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mattr=+soft-float | FileCheck -check-prefixes=SOFTFP %s
9+
10+
711
define void @f1(ptr %dst, ptr %src) {
812
; CHECK-LABEL: f1:
913
; CHECK: # %bb.0:
@@ -12,6 +16,14 @@ define void @f1(ptr %dst, ptr %src) {
1216
; CHECK-NEXT: stpq %r0, 0(%r2)
1317
; CHECK-NEXT: bcr 1{{[45]}}, %r0
1418
; CHECK-NEXT: br %r14
19+
20+
; SOFTFP-LABEL: f1:
21+
; SOFTFP: # %bb.0:
22+
; SOFTFP-NEXT: lg %r1, 8(%r3)
23+
; SOFTFP-NEXT: lg %r0, 0(%r3)
24+
; SOFTFP-NEXT: stpq %r0, 0(%r2)
25+
; SOFTFP-NEXT: bcr 1{{[45]}}, %r0
26+
; SOFTFP-NEXT: br %r14
1527
%val = load fp128, ptr %src, align 8
1628
store atomic fp128 %val, ptr %dst seq_cst, align 16
1729
ret void
@@ -34,6 +46,26 @@ define void @f1_fpsrc(ptr %dst, ptr %src) {
3446
; CHECK-NEXT: stpq %r0, 0(%r2)
3547
; CHECK-NEXT: bcr 1{{[45]}}, %r0
3648
; CHECK-NEXT: br %r14
49+
50+
; SOFTFP-LABEL: f1_fpsrc:
51+
; SOFTFP: lg %r0, 8(%r3)
52+
; SOFTFP-NEXT: lg %r1, 0(%r3)
53+
; SOFTFP-NEXT: lgr %r13, %r2
54+
; SOFTFP-NEXT: stg %r0, 168(%r15)
55+
; SOFTFP-NEXT: stg %r1, 160(%r15)
56+
; SOFTFP-NEXT: stg %r0, 184(%r15)
57+
; SOFTFP-NEXT: la %r2, 192(%r15)
58+
; SOFTFP-NEXT: la %r3, 176(%r15)
59+
; SOFTFP-NEXT: la %r4, 160(%r15)
60+
; SOFTFP-NEXT: stg %r1, 176(%r15)
61+
; SOFTFP-NEXT: brasl %r14, __addtf3@PLT
62+
; SOFTFP-NEXT: lg %r1, 200(%r15)
63+
; SOFTFP-NEXT: lg %r0, 192(%r15)
64+
; SOFTFP-NEXT: stpq %r0, 0(%r13)
65+
; SOFTFP-NEXT: bcr 1{{[45]}}, %r0
66+
; SOFTFP-NEXT: lmg %r13, %r15, 312(%r15)
67+
; SOFTFP-NEXT: br %r14
68+
3769
%val = load fp128, ptr %src, align 8
3870
%add = fadd fp128 %val, %val
3971
store atomic fp128 %add, ptr %dst seq_cst, align 16

llvm/test/CodeGen/SystemZ/atomicrmw-xchg-07.ll

Lines changed: 106 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,122 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
12
; Test long double atomic exchange.
23
;
3-
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4+
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck -check-prefixes=CHECK,HARDFP %s
5+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mattr=+soft-float | FileCheck -check-prefixes=CHECK,SOFTFP %s
46

57
define void @f1(ptr align 16 %ret, ptr align 16 %src, ptr align 16 %b) {
68
; CHECK-LABEL: f1:
7-
; CHECK: lg %r1, 8(%r4)
8-
; CHECK-NEXT: lg %r0, 0(%r4)
9-
; CHECK-NEXT: lg %r4, 8(%r3)
10-
; CHECK-NEXT: lg %r5, 0(%r3)
11-
; CHECK-NEXT:.LBB0_1: # %atomicrmw.start
12-
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
13-
; CHECK-NEXT: lgr %r12, %r5
14-
; CHECK-NEXT: lgr %r13, %r4
15-
; CHECK-NEXT: cdsg %r12, %r0, 0(%r3)
16-
; CHECK-NEXT: lgr %r4, %r13
17-
; CHECK-NEXT: lgr %r5, %r12
18-
; CHECK-NEXT: jl .LBB0_1
19-
; CHECK-NEXT:# %bb.2: # %atomicrmw.end
20-
; CHECK-NEXT: stg %r5, 0(%r2)
21-
; CHECK-NEXT: stg %r4, 8(%r2)
22-
; CHECK-NEXT: lmg %r12, %r15, 96(%r15)
23-
; CHECK-NEXT: br %r14
24-
%val = load fp128, ptr %b, align 16
25-
%res = atomicrmw xchg ptr %src, fp128 %val seq_cst
26-
store fp128 %res, ptr %ret, align 16
27-
ret void
28-
}
29-
30-
define void @f1_fpuse(ptr align 16 %ret, ptr align 16 %src, ptr align 16 %b) {
31-
; CHECK-LABEL: f1_fpuse:
329
; CHECK: # %bb.0:
3310
; CHECK-NEXT: stmg %r12, %r15, 96(%r15)
3411
; CHECK-NEXT: .cfi_offset %r12, -64
3512
; CHECK-NEXT: .cfi_offset %r13, -56
3613
; CHECK-NEXT: .cfi_offset %r15, -40
37-
; CHECK-NEXT: aghi %r15, -176
38-
; CHECK-NEXT: .cfi_def_cfa_offset 336
39-
; CHECK-NEXT: ld %f0, 0(%r4)
40-
; CHECK-NEXT: ld %f2, 8(%r4)
41-
; CHECK-NEXT: lg %r0, 8(%r3)
42-
; CHECK-NEXT: lg %r1, 0(%r3)
43-
; CHECK-NEXT: axbr %f0, %f0
44-
; CHECK-NEXT: lgdr %r5, %f2
45-
; CHECK-NEXT: lgdr %r4, %f0
46-
; CHECK-NEXT: .LBB1_1: # %atomicrmw.start
14+
; CHECK-NEXT: lg %r1, 8(%r4)
15+
; CHECK-NEXT: lg %r0, 0(%r4)
16+
; CHECK-NEXT: lg %r4, 8(%r3)
17+
; CHECK-NEXT: lg %r5, 0(%r3)
18+
; CHECK-NEXT: .LBB0_1: # %atomicrmw.start
4719
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
48-
; CHECK-NEXT: lgr %r12, %r1
49-
; CHECK-NEXT: lgr %r13, %r0
50-
; CHECK-NEXT: cdsg %r12, %r4, 0(%r3)
51-
; CHECK-NEXT: lgr %r0, %r13
52-
; CHECK-NEXT: lgr %r1, %r12
53-
; CHECK-NEXT: jl .LBB1_1
20+
; CHECK-NEXT: lgr %r12, %r5
21+
; CHECK-NEXT: lgr %r13, %r4
22+
; CHECK-NEXT: cdsg %r12, %r0, 0(%r3)
23+
; CHECK-NEXT: lgr %r4, %r13
24+
; CHECK-NEXT: lgr %r5, %r12
25+
; CHECK-NEXT: jl .LBB0_1
5426
; CHECK-NEXT: # %bb.2: # %atomicrmw.end
55-
; CHECK-NEXT: stg %r1, 160(%r15)
56-
; CHECK-NEXT: stg %r0, 168(%r15)
57-
; CHECK-NEXT: ld %f0, 160(%r15)
58-
; CHECK-NEXT: ld %f2, 168(%r15)
59-
; CHECK-NEXT: axbr %f0, %f0
60-
; CHECK-NEXT: std %f0, 0(%r2)
61-
; CHECK-NEXT: std %f2, 8(%r2)
62-
; CHECK-NEXT: lmg %r12, %r15, 272(%r15)
27+
; CHECK-NEXT: stg %r5, 0(%r2)
28+
; CHECK-NEXT: stg %r4, 8(%r2)
29+
; CHECK-NEXT: lmg %r12, %r15, 96(%r15)
6330
; CHECK-NEXT: br %r14
31+
%val = load fp128, ptr %b, align 16
32+
%res = atomicrmw xchg ptr %src, fp128 %val seq_cst
33+
store fp128 %res, ptr %ret, align 16
34+
ret void
35+
}
36+
37+
define void @f1_fpuse(ptr align 16 %ret, ptr align 16 %src, ptr align 16 %b) {
38+
; HARDFP-LABEL: f1_fpuse:
39+
; HARDFP: # %bb.0:
40+
; HARDFP-NEXT: stmg %r12, %r15, 96(%r15)
41+
; HARDFP-NEXT: .cfi_offset %r12, -64
42+
; HARDFP-NEXT: .cfi_offset %r13, -56
43+
; HARDFP-NEXT: .cfi_offset %r15, -40
44+
; HARDFP-NEXT: aghi %r15, -176
45+
; HARDFP-NEXT: .cfi_def_cfa_offset 336
46+
; HARDFP-NEXT: ld %f0, 0(%r4)
47+
; HARDFP-NEXT: ld %f2, 8(%r4)
48+
; HARDFP-NEXT: lg %r0, 8(%r3)
49+
; HARDFP-NEXT: lg %r1, 0(%r3)
50+
; HARDFP-NEXT: axbr %f0, %f0
51+
; HARDFP-NEXT: lgdr %r5, %f2
52+
; HARDFP-NEXT: lgdr %r4, %f0
53+
; HARDFP-NEXT: .LBB1_1: # %atomicrmw.start
54+
; HARDFP-NEXT: # =>This Inner Loop Header: Depth=1
55+
; HARDFP-NEXT: lgr %r12, %r1
56+
; HARDFP-NEXT: lgr %r13, %r0
57+
; HARDFP-NEXT: cdsg %r12, %r4, 0(%r3)
58+
; HARDFP-NEXT: lgr %r0, %r13
59+
; HARDFP-NEXT: lgr %r1, %r12
60+
; HARDFP-NEXT: jl .LBB1_1
61+
; HARDFP-NEXT: # %bb.2: # %atomicrmw.end
62+
; HARDFP-NEXT: stg %r1, 160(%r15)
63+
; HARDFP-NEXT: stg %r0, 168(%r15)
64+
; HARDFP-NEXT: ld %f0, 160(%r15)
65+
; HARDFP-NEXT: ld %f2, 168(%r15)
66+
; HARDFP-NEXT: axbr %f0, %f0
67+
; HARDFP-NEXT: std %f0, 0(%r2)
68+
; HARDFP-NEXT: std %f2, 8(%r2)
69+
; HARDFP-NEXT: lmg %r12, %r15, 272(%r15)
70+
; HARDFP-NEXT: br %r14
71+
;
72+
; SOFTFP-LABEL: f1_fpuse:
73+
; SOFTFP: # %bb.0:
74+
; SOFTFP-NEXT: stmg %r12, %r15, 96(%r15)
75+
; SOFTFP-NEXT: .cfi_offset %r12, -64
76+
; SOFTFP-NEXT: .cfi_offset %r13, -56
77+
; SOFTFP-NEXT: .cfi_offset %r14, -48
78+
; SOFTFP-NEXT: .cfi_offset %r15, -40
79+
; SOFTFP-NEXT: aghi %r15, -256
80+
; SOFTFP-NEXT: .cfi_def_cfa_offset 416
81+
; SOFTFP-NEXT: lg %r0, 8(%r4)
82+
; SOFTFP-NEXT: lg %r1, 0(%r4)
83+
; SOFTFP-NEXT: lgr %r12, %r3
84+
; SOFTFP-NEXT: lgr %r13, %r2
85+
; SOFTFP-NEXT: stg %r0, 216(%r15)
86+
; SOFTFP-NEXT: stg %r1, 208(%r15)
87+
; SOFTFP-NEXT: stg %r0, 232(%r15)
88+
; SOFTFP-NEXT: la %r2, 240(%r15)
89+
; SOFTFP-NEXT: la %r3, 224(%r15)
90+
; SOFTFP-NEXT: la %r4, 208(%r15)
91+
; SOFTFP-NEXT: stg %r1, 224(%r15)
92+
; SOFTFP-NEXT: brasl %r14, __addtf3@PLT
93+
; SOFTFP-NEXT: lg %r3, 248(%r15)
94+
; SOFTFP-NEXT: lg %r2, 240(%r15)
95+
; SOFTFP-NEXT: lg %r0, 8(%r12)
96+
; SOFTFP-NEXT: lg %r1, 0(%r12)
97+
; SOFTFP-NEXT: .LBB1_1: # %atomicrmw.start
98+
; SOFTFP-NEXT: # =>This Inner Loop Header: Depth=1
99+
; SOFTFP-NEXT: lgr %r4, %r1
100+
; SOFTFP-NEXT: lgr %r5, %r0
101+
; SOFTFP-NEXT: cdsg %r4, %r2, 0(%r12)
102+
; SOFTFP-NEXT: lgr %r0, %r5
103+
; SOFTFP-NEXT: lgr %r1, %r4
104+
; SOFTFP-NEXT: jl .LBB1_1
105+
; SOFTFP-NEXT: # %bb.2: # %atomicrmw.end
106+
; SOFTFP-NEXT: stg %r1, 160(%r15)
107+
; SOFTFP-NEXT: stg %r1, 176(%r15)
108+
; SOFTFP-NEXT: stg %r0, 168(%r15)
109+
; SOFTFP-NEXT: la %r2, 192(%r15)
110+
; SOFTFP-NEXT: la %r3, 176(%r15)
111+
; SOFTFP-NEXT: la %r4, 160(%r15)
112+
; SOFTFP-NEXT: stg %r0, 184(%r15)
113+
; SOFTFP-NEXT: brasl %r14, __addtf3@PLT
114+
; SOFTFP-NEXT: lg %r0, 200(%r15)
115+
; SOFTFP-NEXT: lg %r1, 192(%r15)
116+
; SOFTFP-NEXT: stg %r0, 8(%r13)
117+
; SOFTFP-NEXT: stg %r1, 0(%r13)
118+
; SOFTFP-NEXT: lmg %r12, %r15, 352(%r15)
119+
; SOFTFP-NEXT: br %r14
64120
%val = load fp128, ptr %b, align 16
65121
%add.src = fadd fp128 %val, %val
66122
%res = atomicrmw xchg ptr %src, fp128 %add.src seq_cst

0 commit comments

Comments
 (0)