[llvm] SystemZ: Add some tests for fp128 atomics with soft-float (PR #90826)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed May 1 23:52:27 PDT 2024
https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/90826
None
>From 44c6597d08541417e1245c9aadc22d3069c7463d Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Thu, 2 May 2024 08:51:20 +0200
Subject: [PATCH] SystemZ: Add some tests for fp128 atomics with soft-float
---
llvm/test/CodeGen/SystemZ/atomic-load-08.ll | 30 ++++
llvm/test/CodeGen/SystemZ/atomic-store-08.ll | 32 ++++
.../test/CodeGen/SystemZ/atomicrmw-xchg-07.ll | 156 ++++++++++++------
3 files changed, 168 insertions(+), 50 deletions(-)
diff --git a/llvm/test/CodeGen/SystemZ/atomic-load-08.ll b/llvm/test/CodeGen/SystemZ/atomic-load-08.ll
index 83050ef87591ae..c4f684ae718e8c 100644
--- a/llvm/test/CodeGen/SystemZ/atomic-load-08.ll
+++ b/llvm/test/CodeGen/SystemZ/atomic-load-08.ll
@@ -5,6 +5,9 @@
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck -check-prefixes=CHECK,BASE %s
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck -check-prefixes=CHECK,Z13 %s
+; TODO: Is it worth testing softfp with vector?
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mattr=+soft-float | FileCheck -check-prefixes=SOFTFP %s
+
define void @f1(ptr %ret, ptr %src) {
; CHECK-LABEL: f1:
; CHECK: # %bb.0:
@@ -12,6 +15,13 @@ define void @f1(ptr %ret, ptr %src) {
; CHECK-NEXT: stg %r1, 8(%r2)
; CHECK-NEXT: stg %r0, 0(%r2)
; CHECK-NEXT: br %r14
+
+; SOFTFP-LABEL: f1:
+; SOFTFP: # %bb.0:
+; SOFTFP-NEXT: lpq %r0, 0(%r3)
+; SOFTFP-NEXT: stg %r1, 8(%r2)
+; SOFTFP-NEXT: stg %r0, 0(%r2)
+; SOFTFP-NEXT: br %r14
%val = load atomic fp128, ptr %src seq_cst, align 16
store fp128 %val, ptr %ret, align 8
ret void
@@ -39,6 +49,26 @@ define void @f1_fpuse(ptr %ret, ptr %src) {
; BASE-NEXT: aghi %r15, 176
; CHECK-NEXT: br %r14
+
+; SOFTFP-LABEL: f1_fpuse:
+; SOFTFP: stmg %r13, %r15, 104(%r15)
+; SOFTFP: aghi %r15, -208
+; SOFTFP: lpq %r0, 0(%r3)
+; SOFTFP-NEXT: lgr %r13, %r2
+; SOFTFP-NEXT: stg %r1, 168(%r15)
+; SOFTFP-NEXT: stg %r0, 160(%r15)
+; SOFTFP-NEXT: stg %r1, 184(%r15)
+; SOFTFP-NEXT: la %r2, 192(%r15)
+; SOFTFP-NEXT: la %r3, 176(%r15)
+; SOFTFP-NEXT: la %r4, 160(%r15)
+; SOFTFP-NEXT: stg %r0, 176(%r15)
+; SOFTFP-NEXT: brasl %r14, __addtf3 at PLT
+; SOFTFP-NEXT: lg %r0, 200(%r15)
+; SOFTFP-NEXT: lg %r1, 192(%r15)
+; SOFTFP-NEXT: stg %r0, 8(%r13)
+; SOFTFP-NEXT: stg %r1, 0(%r13)
+; SOFTFP-NEXT: lmg %r13, %r15, 312(%r15)
+; SOFTFP-NEXT: br %r14
%val = load atomic fp128, ptr %src seq_cst, align 16
%use = fadd fp128 %val, %val
store fp128 %use, ptr %ret, align 8
diff --git a/llvm/test/CodeGen/SystemZ/atomic-store-08.ll b/llvm/test/CodeGen/SystemZ/atomic-store-08.ll
index a0c7455b7408aa..545ee120e01c50 100644
--- a/llvm/test/CodeGen/SystemZ/atomic-store-08.ll
+++ b/llvm/test/CodeGen/SystemZ/atomic-store-08.ll
@@ -4,6 +4,10 @@
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck -check-prefixes=CHECK,BASE %s
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck -check-prefixes=CHECK,Z13 %s
+; TODO: Is it worth testing softfp with vector?
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mattr=+soft-float | FileCheck -check-prefixes=SOFTFP %s
+
+
define void @f1(ptr %dst, ptr %src) {
; CHECK-LABEL: f1:
; CHECK: # %bb.0:
@@ -12,6 +16,14 @@ define void @f1(ptr %dst, ptr %src) {
; CHECK-NEXT: stpq %r0, 0(%r2)
; CHECK-NEXT: bcr 1{{[45]}}, %r0
; CHECK-NEXT: br %r14
+
+; SOFTFP-LABEL: f1:
+; SOFTFP: # %bb.0:
+; SOFTFP-NEXT: lg %r1, 8(%r3)
+; SOFTFP-NEXT: lg %r0, 0(%r3)
+; SOFTFP-NEXT: stpq %r0, 0(%r2)
+; SOFTFP-NEXT: bcr 1{{[45]}}, %r0
+; SOFTFP-NEXT: br %r14
%val = load fp128, ptr %src, align 8
store atomic fp128 %val, ptr %dst seq_cst, align 16
ret void
@@ -34,6 +46,26 @@ define void @f1_fpsrc(ptr %dst, ptr %src) {
; CHECK-NEXT: stpq %r0, 0(%r2)
; CHECK-NEXT: bcr 1{{[45]}}, %r0
; CHECK-NEXT: br %r14
+
+; SOFTFP-LABEL: f1_fpsrc:
+; SOFTFP: lg %r0, 8(%r3)
+; SOFTFP-NEXT: lg %r1, 0(%r3)
+; SOFTFP-NEXT: lgr %r13, %r2
+; SOFTFP-NEXT: stg %r0, 168(%r15)
+; SOFTFP-NEXT: stg %r1, 160(%r15)
+; SOFTFP-NEXT: stg %r0, 184(%r15)
+; SOFTFP-NEXT: la %r2, 192(%r15)
+; SOFTFP-NEXT: la %r3, 176(%r15)
+; SOFTFP-NEXT: la %r4, 160(%r15)
+; SOFTFP-NEXT: stg %r1, 176(%r15)
+; SOFTFP-NEXT: brasl %r14, __addtf3 at PLT
+; SOFTFP-NEXT: lg %r1, 200(%r15)
+; SOFTFP-NEXT: lg %r0, 192(%r15)
+; SOFTFP-NEXT: stpq %r0, 0(%r13)
+; SOFTFP-NEXT: bcr 1{{[45]}}, %r0
+; SOFTFP-NEXT: lmg %r13, %r15, 312(%r15)
+; SOFTFP-NEXT: br %r14
+
%val = load fp128, ptr %src, align 8
%add = fadd fp128 %val, %val
store atomic fp128 %add, ptr %dst seq_cst, align 16
diff --git a/llvm/test/CodeGen/SystemZ/atomicrmw-xchg-07.ll b/llvm/test/CodeGen/SystemZ/atomicrmw-xchg-07.ll
index f5d8dc092a7e93..acc9ce9b4e4e27 100644
--- a/llvm/test/CodeGen/SystemZ/atomicrmw-xchg-07.ll
+++ b/llvm/test/CodeGen/SystemZ/atomicrmw-xchg-07.ll
@@ -1,66 +1,122 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
; Test long double atomic exchange.
;
-; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
+; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck -check-prefixes=CHECK,HARDFP %s
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mattr=+soft-float | FileCheck -check-prefixes=CHECK,SOFTFP %s
define void @f1(ptr align 16 %ret, ptr align 16 %src, ptr align 16 %b) {
; CHECK-LABEL: f1:
-; CHECK: lg %r1, 8(%r4)
-; CHECK-NEXT: lg %r0, 0(%r4)
-; CHECK-NEXT: lg %r4, 8(%r3)
-; CHECK-NEXT: lg %r5, 0(%r3)
-; CHECK-NEXT:.LBB0_1: # %atomicrmw.start
-; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
-; CHECK-NEXT: lgr %r12, %r5
-; CHECK-NEXT: lgr %r13, %r4
-; CHECK-NEXT: cdsg %r12, %r0, 0(%r3)
-; CHECK-NEXT: lgr %r4, %r13
-; CHECK-NEXT: lgr %r5, %r12
-; CHECK-NEXT: jl .LBB0_1
-; CHECK-NEXT:# %bb.2: # %atomicrmw.end
-; CHECK-NEXT: stg %r5, 0(%r2)
-; CHECK-NEXT: stg %r4, 8(%r2)
-; CHECK-NEXT: lmg %r12, %r15, 96(%r15)
-; CHECK-NEXT: br %r14
- %val = load fp128, ptr %b, align 16
- %res = atomicrmw xchg ptr %src, fp128 %val seq_cst
- store fp128 %res, ptr %ret, align 16
- ret void
-}
-
-define void @f1_fpuse(ptr align 16 %ret, ptr align 16 %src, ptr align 16 %b) {
-; CHECK-LABEL: f1_fpuse:
; CHECK: # %bb.0:
; CHECK-NEXT: stmg %r12, %r15, 96(%r15)
; CHECK-NEXT: .cfi_offset %r12, -64
; CHECK-NEXT: .cfi_offset %r13, -56
; CHECK-NEXT: .cfi_offset %r15, -40
-; CHECK-NEXT: aghi %r15, -176
-; CHECK-NEXT: .cfi_def_cfa_offset 336
-; CHECK-NEXT: ld %f0, 0(%r4)
-; CHECK-NEXT: ld %f2, 8(%r4)
-; CHECK-NEXT: lg %r0, 8(%r3)
-; CHECK-NEXT: lg %r1, 0(%r3)
-; CHECK-NEXT: axbr %f0, %f0
-; CHECK-NEXT: lgdr %r5, %f2
-; CHECK-NEXT: lgdr %r4, %f0
-; CHECK-NEXT: .LBB1_1: # %atomicrmw.start
+; CHECK-NEXT: lg %r1, 8(%r4)
+; CHECK-NEXT: lg %r0, 0(%r4)
+; CHECK-NEXT: lg %r4, 8(%r3)
+; CHECK-NEXT: lg %r5, 0(%r3)
+; CHECK-NEXT: .LBB0_1: # %atomicrmw.start
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
-; CHECK-NEXT: lgr %r12, %r1
-; CHECK-NEXT: lgr %r13, %r0
-; CHECK-NEXT: cdsg %r12, %r4, 0(%r3)
-; CHECK-NEXT: lgr %r0, %r13
-; CHECK-NEXT: lgr %r1, %r12
-; CHECK-NEXT: jl .LBB1_1
+; CHECK-NEXT: lgr %r12, %r5
+; CHECK-NEXT: lgr %r13, %r4
+; CHECK-NEXT: cdsg %r12, %r0, 0(%r3)
+; CHECK-NEXT: lgr %r4, %r13
+; CHECK-NEXT: lgr %r5, %r12
+; CHECK-NEXT: jl .LBB0_1
; CHECK-NEXT: # %bb.2: # %atomicrmw.end
-; CHECK-NEXT: stg %r1, 160(%r15)
-; CHECK-NEXT: stg %r0, 168(%r15)
-; CHECK-NEXT: ld %f0, 160(%r15)
-; CHECK-NEXT: ld %f2, 168(%r15)
-; CHECK-NEXT: axbr %f0, %f0
-; CHECK-NEXT: std %f0, 0(%r2)
-; CHECK-NEXT: std %f2, 8(%r2)
-; CHECK-NEXT: lmg %r12, %r15, 272(%r15)
+; CHECK-NEXT: stg %r5, 0(%r2)
+; CHECK-NEXT: stg %r4, 8(%r2)
+; CHECK-NEXT: lmg %r12, %r15, 96(%r15)
; CHECK-NEXT: br %r14
+ %val = load fp128, ptr %b, align 16
+ %res = atomicrmw xchg ptr %src, fp128 %val seq_cst
+ store fp128 %res, ptr %ret, align 16
+ ret void
+}
+
+define void @f1_fpuse(ptr align 16 %ret, ptr align 16 %src, ptr align 16 %b) {
+; HARDFP-LABEL: f1_fpuse:
+; HARDFP: # %bb.0:
+; HARDFP-NEXT: stmg %r12, %r15, 96(%r15)
+; HARDFP-NEXT: .cfi_offset %r12, -64
+; HARDFP-NEXT: .cfi_offset %r13, -56
+; HARDFP-NEXT: .cfi_offset %r15, -40
+; HARDFP-NEXT: aghi %r15, -176
+; HARDFP-NEXT: .cfi_def_cfa_offset 336
+; HARDFP-NEXT: ld %f0, 0(%r4)
+; HARDFP-NEXT: ld %f2, 8(%r4)
+; HARDFP-NEXT: lg %r0, 8(%r3)
+; HARDFP-NEXT: lg %r1, 0(%r3)
+; HARDFP-NEXT: axbr %f0, %f0
+; HARDFP-NEXT: lgdr %r5, %f2
+; HARDFP-NEXT: lgdr %r4, %f0
+; HARDFP-NEXT: .LBB1_1: # %atomicrmw.start
+; HARDFP-NEXT: # =>This Inner Loop Header: Depth=1
+; HARDFP-NEXT: lgr %r12, %r1
+; HARDFP-NEXT: lgr %r13, %r0
+; HARDFP-NEXT: cdsg %r12, %r4, 0(%r3)
+; HARDFP-NEXT: lgr %r0, %r13
+; HARDFP-NEXT: lgr %r1, %r12
+; HARDFP-NEXT: jl .LBB1_1
+; HARDFP-NEXT: # %bb.2: # %atomicrmw.end
+; HARDFP-NEXT: stg %r1, 160(%r15)
+; HARDFP-NEXT: stg %r0, 168(%r15)
+; HARDFP-NEXT: ld %f0, 160(%r15)
+; HARDFP-NEXT: ld %f2, 168(%r15)
+; HARDFP-NEXT: axbr %f0, %f0
+; HARDFP-NEXT: std %f0, 0(%r2)
+; HARDFP-NEXT: std %f2, 8(%r2)
+; HARDFP-NEXT: lmg %r12, %r15, 272(%r15)
+; HARDFP-NEXT: br %r14
+;
+; SOFTFP-LABEL: f1_fpuse:
+; SOFTFP: # %bb.0:
+; SOFTFP-NEXT: stmg %r12, %r15, 96(%r15)
+; SOFTFP-NEXT: .cfi_offset %r12, -64
+; SOFTFP-NEXT: .cfi_offset %r13, -56
+; SOFTFP-NEXT: .cfi_offset %r14, -48
+; SOFTFP-NEXT: .cfi_offset %r15, -40
+; SOFTFP-NEXT: aghi %r15, -256
+; SOFTFP-NEXT: .cfi_def_cfa_offset 416
+; SOFTFP-NEXT: lg %r0, 8(%r4)
+; SOFTFP-NEXT: lg %r1, 0(%r4)
+; SOFTFP-NEXT: lgr %r12, %r3
+; SOFTFP-NEXT: lgr %r13, %r2
+; SOFTFP-NEXT: stg %r0, 216(%r15)
+; SOFTFP-NEXT: stg %r1, 208(%r15)
+; SOFTFP-NEXT: stg %r0, 232(%r15)
+; SOFTFP-NEXT: la %r2, 240(%r15)
+; SOFTFP-NEXT: la %r3, 224(%r15)
+; SOFTFP-NEXT: la %r4, 208(%r15)
+; SOFTFP-NEXT: stg %r1, 224(%r15)
+; SOFTFP-NEXT: brasl %r14, __addtf3 at PLT
+; SOFTFP-NEXT: lg %r3, 248(%r15)
+; SOFTFP-NEXT: lg %r2, 240(%r15)
+; SOFTFP-NEXT: lg %r0, 8(%r12)
+; SOFTFP-NEXT: lg %r1, 0(%r12)
+; SOFTFP-NEXT: .LBB1_1: # %atomicrmw.start
+; SOFTFP-NEXT: # =>This Inner Loop Header: Depth=1
+; SOFTFP-NEXT: lgr %r4, %r1
+; SOFTFP-NEXT: lgr %r5, %r0
+; SOFTFP-NEXT: cdsg %r4, %r2, 0(%r12)
+; SOFTFP-NEXT: lgr %r0, %r5
+; SOFTFP-NEXT: lgr %r1, %r4
+; SOFTFP-NEXT: jl .LBB1_1
+; SOFTFP-NEXT: # %bb.2: # %atomicrmw.end
+; SOFTFP-NEXT: stg %r1, 160(%r15)
+; SOFTFP-NEXT: stg %r1, 176(%r15)
+; SOFTFP-NEXT: stg %r0, 168(%r15)
+; SOFTFP-NEXT: la %r2, 192(%r15)
+; SOFTFP-NEXT: la %r3, 176(%r15)
+; SOFTFP-NEXT: la %r4, 160(%r15)
+; SOFTFP-NEXT: stg %r0, 184(%r15)
+; SOFTFP-NEXT: brasl %r14, __addtf3 at PLT
+; SOFTFP-NEXT: lg %r0, 200(%r15)
+; SOFTFP-NEXT: lg %r1, 192(%r15)
+; SOFTFP-NEXT: stg %r0, 8(%r13)
+; SOFTFP-NEXT: stg %r1, 0(%r13)
+; SOFTFP-NEXT: lmg %r12, %r15, 352(%r15)
+; SOFTFP-NEXT: br %r14
%val = load fp128, ptr %b, align 16
%add.src = fadd fp128 %val, %val
%res = atomicrmw xchg ptr %src, fp128 %add.src seq_cst
More information about the llvm-commits
mailing list