Skip to content

Commit 74a09bd

Browse files
authored
[SystemZ] Test improvements for atomic load/store instructions (NFC). (#75630)
Improve tests for atomic loads and stores, mainly by testing 128-bit atomic load and store instructions both with and w/out natural alignment.
1 parent 809f2f3 commit 74a09bd

File tree

6 files changed

+67
-33
lines changed

6 files changed

+67
-33
lines changed
Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
1-
; Test 128-bit atomic loads.
1+
; Test 128-bit integer atomic loads.
22
;
33
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
44
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
55

66
define i128 @f1(ptr %src) {
77
; CHECK-LABEL: f1:
8-
; CHECK: lpq %r0, 0(%r3)
9-
; CHECK-DAG: stg %r1, 8(%r2)
10-
; CHECK-DAG: stg %r0, 0(%r2)
11-
; CHECK: br %r14
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
1213
%val = load atomic i128, ptr %src seq_cst, align 16
1314
ret i128 %val
1415
}
16+
17+
define i128 @f2(ptr %src) {
18+
; CHECK-LABEL: f2:
19+
; CHECK: brasl %r14, __atomic_load@PLT
20+
%val = load atomic i128, ptr %src seq_cst, align 8
21+
ret i128 %val
22+
}

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
1-
; Test long double atomic loads. Expect a libcall.
1+
; Test long double atomic loads. These are emitted by the Clang FE as i128
2+
; loads with a bitcast, and this test case gets converted into that form as
3+
; well by the AtomicExpand pass.
24
;
35
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
6+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
47

58
define void @f1(ptr %ret, ptr %src) {
69
; CHECK-LABEL: f1:
7-
; CHECK: lgr [[RET:%r[0-9]+]], %r2
8-
; CHECK: la %r4, 160(%r15)
9-
; CHECK: lghi %r2, 16
10-
; CHECK: lhi %r5, 5
10+
; CHECK: # %bb.0:
11+
; CHECK-NEXT: lpq %r0, 0(%r3)
12+
; CHECK-NEXT: stg %r1, 8(%r2)
13+
; CHECK-NEXT: stg %r0, 0(%r2)
14+
; CHECK-NEXT: br %r14
15+
%val = load atomic fp128, ptr %src seq_cst, align 16
16+
store fp128 %val, ptr %ret, align 8
17+
ret void
18+
}
19+
20+
define void @f2(ptr %ret, ptr %src) {
21+
; CHECK-LABEL: f2:
1122
; CHECK: brasl %r14, __atomic_load@PLT
12-
; CHECK: ld [[FL:%f[0-9]+]], 160(%r15)
13-
; CHECK: ld [[FH:%f[0-9]+]], 168(%r15)
14-
; CHECK: std [[FL]], 0([[RET]])
15-
; CHECK: std [[FH]], 8([[RET]])
16-
; CHECK: br %r14
1723
%val = load atomic fp128, ptr %src seq_cst, align 8
1824
store fp128 %val, ptr %ret, align 8
1925
ret void

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; Test 128-bit atomic stores.
1+
; Test 128-bit integer atomic stores.
22
;
33
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
44
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
@@ -24,3 +24,10 @@ define void @f2(i128 %val, ptr %src) {
2424
store atomic i128 %val, ptr %src monotonic, align 16
2525
ret void
2626
}
27+
28+
define void @f3(i128 %val, ptr %src) {
29+
; CHECK-LABEL: f3:
30+
; CHECK: brasl %r14, __atomic_store@PLT
31+
store atomic i128 %val, ptr %src seq_cst, align 8
32+
ret void
33+
}
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1-
; Test float atomic loads.
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; Test float atomic stores.
23
;
34
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
45

56
define void @f1(ptr %src, float %val) {
67
; CHECK-LABEL: f1:
7-
; CHECK: lgdr [[R:%r[0-9]+]], %f0
8-
; CHECK: srlg [[R]], [[R]], 32
9-
; CHECK: st [[R]], 0(%r2)
10-
; CHECK: br %r14
8+
; CHECK: # %bb.0:
9+
; CHECK-NEXT: # kill: def $f0s killed $f0s def $f0d
10+
; CHECK-NEXT: lgdr %r0, %f0
11+
; CHECK-NEXT: srlg %r0, %r0, 32
12+
; CHECK-NEXT: st %r0, 0(%r2)
13+
; CHECK-NEXT: bcr 15, %r0
14+
; CHECK-NEXT: br %r14
1115
store atomic float %val, ptr %src seq_cst, align 4
1216
ret void
1317
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
12
; Test double atomic stores.
23
;
34
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
45

56
define void @f1(ptr %dst, double %val) {
67
; CHECK-LABEL: f1:
7-
; CHECK: std %f0, 0(%r2)
8-
; CHECK: br %r14
8+
; CHECK: # %bb.0:
9+
; CHECK-NEXT: std %f0, 0(%r2)
10+
; CHECK-NEXT: bcr 15, %r0
11+
; CHECK-NEXT: br %r14
912
store atomic double %val, ptr %dst seq_cst, align 8
1013
ret void
1114
}

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
1-
; Test long double atomic stores. Expect a libcall.
1+
; Test long double atomic stores. The atomic store is converted to i128 by
2+
; the AtomicExpand pass.
23
;
34
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
46

57
define void @f1(ptr %dst, ptr %src) {
68
; CHECK-LABEL: f1:
7-
; CHECK: ld [[FL:%f[0-9]+]], 0(%r3)
8-
; CHECK: ld [[FH:%f[0-9]+]], 8(%r3)
9-
; CHECK: lgr %r3, %r2
10-
; CHECK: std [[FL]], 160(%r15)
11-
; CHECK: std [[FH]], 168(%r15)
12-
; CHECK: la %r4, 160(%r15)
13-
; CHECK: lghi %r2, 16
14-
; CHECK: lhi %r5, 5
9+
; CHECK: # %bb.0:
10+
; CHECK-NEXT: lg %r1, 8(%r3)
11+
; CHECK-NEXT: lg %r0, 0(%r3)
12+
; CHECK-NEXT: stpq %r0, 0(%r2)
13+
; CHECK-NEXT: bcr 1{{[45]}}, %r0
14+
; CHECK-NEXT: br %r14
15+
%val = load fp128, ptr %src, align 8
16+
store atomic fp128 %val, ptr %dst seq_cst, align 16
17+
ret void
18+
}
19+
20+
define void @f2(ptr %dst, ptr %src) {
21+
; CHECK-LABEL: f2:
1522
; CHECK: brasl %r14, __atomic_store@PLT
16-
; CHECK: br %r14
1723
%val = load fp128, ptr %src, align 8
1824
store atomic fp128 %val, ptr %dst seq_cst, align 8
1925
ret void

0 commit comments

Comments
 (0)