Skip to content

Commit 67d010f

Browse files
committed
Updates
1 parent 4827177 commit 67d010f

File tree

4 files changed

+143
-2
lines changed

4 files changed

+143
-2
lines changed

compiler-rt/lib/builtins/trunctfhf2.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#define QUAD_PRECISION
1111
#include "fp_lib.h"
1212

13-
#if defined(CRT_HAS_TF_MODE)
13+
#if defined(CRT_HAS_TF_MODE) && defined(COMPILER_RT_HAS_FLOAT16)
1414
#define SRC_QUAD
1515
#define DST_HALF
1616
#include "fp_trunc_impl.inc"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; Test atomic half addition. Expect a compare-and-swap loop.
3+
;
4+
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5+
6+
define half @f1(ptr %src, half %b) {
7+
; CHECK-LABEL: f1:
8+
; CHECK: # %bb.0:
9+
; CHECK-NEXT: stmg %r11, %r15, 88(%r15)
10+
; CHECK-NEXT: .cfi_offset %r11, -72
11+
; CHECK-NEXT: .cfi_offset %r12, -64
12+
; CHECK-NEXT: .cfi_offset %r13, -56
13+
; CHECK-NEXT: .cfi_offset %r14, -48
14+
; CHECK-NEXT: .cfi_offset %r15, -40
15+
; CHECK-NEXT: aghi %r15, -184
16+
; CHECK-NEXT: .cfi_def_cfa_offset 344
17+
; CHECK-NEXT: std %f8, 176(%r15) # 8-byte Folded Spill
18+
; CHECK-NEXT: std %f9, 168(%r15) # 8-byte Folded Spill
19+
; CHECK-NEXT: std %f10, 160(%r15) # 8-byte Folded Spill
20+
; CHECK-NEXT: .cfi_offset %f8, -168
21+
; CHECK-NEXT: .cfi_offset %f9, -176
22+
; CHECK-NEXT: .cfi_offset %f10, -184
23+
; CHECK-NEXT: lgr %r13, %r2
24+
; CHECK-NEXT: lgh %r0, 0(%r2)
25+
; CHECK-NEXT: ler %f8, %f0
26+
; CHECK-NEXT: sllg %r0, %r0, 48
27+
; CHECK-NEXT: ldgr %f9, %r0
28+
; CHECK-NEXT: risbg %r12, %r2, 0, 189, 0
29+
; CHECK-NEXT: sll %r13, 3
30+
; CHECK-NEXT: lcr %r11, %r13
31+
; CHECK-NEXT: j .LBB0_2
32+
; CHECK-NEXT: .LBB0_1: # %atomicrmw.start
33+
; CHECK-NEXT: # in Loop: Header=BB0_2 Depth=1
34+
; CHECK-NEXT: sllg %r0, %r3, 48
35+
; CHECK-NEXT: ldgr %f9, %r0
36+
; CHECK-NEXT: je .LBB0_5
37+
; CHECK-NEXT: .LBB0_2: # %atomicrmw.start
38+
; CHECK-NEXT: # =>This Loop Header: Depth=1
39+
; CHECK-NEXT: # Child Loop BB0_3 Depth 2
40+
; CHECK-NEXT: ler %f0, %f8
41+
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
42+
; CHECK-NEXT: ler %f10, %f0
43+
; CHECK-NEXT: ler %f0, %f9
44+
; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT
45+
; CHECK-NEXT: aebr %f0, %f10
46+
; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT
47+
; CHECK-NEXT: # kill: def $f0h killed $f0h def $f0d
48+
; CHECK-NEXT: lgdr %r1, %f0
49+
; CHECK-NEXT: l %r0, 0(%r12)
50+
; CHECK-NEXT: srlg %r1, %r1, 48
51+
; CHECK-NEXT: lgdr %r2, %f9
52+
; CHECK-NEXT: srlg %r2, %r2, 48
53+
; CHECK-NEXT: .LBB0_3: # %atomicrmw.start
54+
; CHECK-NEXT: # Parent Loop BB0_2 Depth=1
55+
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
56+
; CHECK-NEXT: rll %r3, %r0, 16(%r13)
57+
; CHECK-NEXT: risbg %r1, %r3, 32, 47, 0
58+
; CHECK-NEXT: llhr %r3, %r3
59+
; CHECK-NEXT: cr %r3, %r2
60+
; CHECK-NEXT: jlh .LBB0_1
61+
; CHECK-NEXT: # %bb.4: # %atomicrmw.start
62+
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=2
63+
; CHECK-NEXT: rll %r4, %r1, -16(%r11)
64+
; CHECK-NEXT: cs %r0, %r4, 0(%r12)
65+
; CHECK-NEXT: jl .LBB0_3
66+
; CHECK-NEXT: j .LBB0_1
67+
; CHECK-NEXT: .LBB0_5: # %atomicrmw.end
68+
; CHECK-NEXT: ler %f0, %f9
69+
; CHECK-NEXT: ld %f8, 176(%r15) # 8-byte Folded Reload
70+
; CHECK-NEXT: ld %f9, 168(%r15) # 8-byte Folded Reload
71+
; CHECK-NEXT: ld %f10, 160(%r15) # 8-byte Folded Reload
72+
; CHECK-NEXT: lmg %r11, %r15, 272(%r15)
73+
; CHECK-NEXT: br %r14
74+
%res = atomicrmw fadd ptr %src, half %b seq_cst
75+
ret half %res
76+
}

llvm/test/CodeGen/SystemZ/fp-half-cmp.ll

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z16 -verify-machineinstrs \
33
; RUN: | FileCheck %s
44
;
5-
; Various tests comparaisons and uses involving 16-bit floating point (half).
5+
; Some tests with comparisons and their uses involving 16-bit floating point.
66

77
; fcmp half; select half
88
define half @fun0(half %Arg0, half %Arg1) {
+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=zEC12 -verify-machineinstrs \
3+
; RUN: | FileCheck %s --check-prefix=NOVEC
4+
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z16 -verify-machineinstrs \
5+
; RUN: | FileCheck %s --check-prefix=VECTOR
6+
7+
declare void @foo(ptr)
8+
9+
; Test an alloca.
10+
define half @f1() {
11+
; NOVEC-LABEL: f1:
12+
; NOVEC: # %bb.0:
13+
; NOVEC-NEXT: stmg %r14, %r15, 112(%r15)
14+
; NOVEC-NEXT: .cfi_offset %r14, -48
15+
; NOVEC-NEXT: .cfi_offset %r15, -40
16+
; NOVEC-NEXT: aghi %r15, -168
17+
; NOVEC-NEXT: .cfi_def_cfa_offset 328
18+
; NOVEC-NEXT: la %r2, 166(%r15)
19+
; NOVEC-NEXT: brasl %r14, foo@PLT
20+
; NOVEC-NEXT: lh %r0, 166(%r15)
21+
; NOVEC-NEXT: sll %r0, 16
22+
; NOVEC-NEXT: risbhg %r0, %r0, 0, 159, 32
23+
; NOVEC-NEXT: ldgr %f0, %r0
24+
; NOVEC-NEXT: # kill: def $f0h killed $f0h killed $f0d
25+
; NOVEC-NEXT: lmg %r14, %r15, 280(%r15)
26+
; NOVEC-NEXT: br %r14
27+
;
28+
; VECTOR-LABEL: f1:
29+
; VECTOR: # %bb.0:
30+
; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)
31+
; VECTOR-NEXT: .cfi_offset %r14, -48
32+
; VECTOR-NEXT: .cfi_offset %r15, -40
33+
; VECTOR-NEXT: aghi %r15, -168
34+
; VECTOR-NEXT: .cfi_def_cfa_offset 328
35+
; VECTOR-NEXT: la %r2, 166(%r15)
36+
; VECTOR-NEXT: brasl %r14, foo@PLT
37+
; VECTOR-NEXT: vlreph %v0, 166(%r15)
38+
; VECTOR-NEXT: lmg %r14, %r15, 280(%r15)
39+
; VECTOR-NEXT: br %r14
40+
%ptr = alloca half
41+
call void @foo(ptr %ptr)
42+
%orig = load half, ptr %ptr
43+
ret half %orig
44+
}
45+
46+
; Test accessing a half element of an aggregate type.
47+
%s.half = type { half, half, half, half, half }
48+
define half @f2(ptr %P) {
49+
; NOVEC-LABEL: f2:
50+
; NOVEC: # %bb.0:
51+
; NOVEC-NEXT: lh %r0, 6(%r2)
52+
; NOVEC-NEXT: sll %r0, 16
53+
; NOVEC-NEXT: risbhg %r0, %r0, 0, 159, 32
54+
; NOVEC-NEXT: ldgr %f0, %r0
55+
; NOVEC-NEXT: # kill: def $f0h killed $f0h killed $f0d
56+
; NOVEC-NEXT: br %r14
57+
;
58+
; VECTOR-LABEL: f2:
59+
; VECTOR: # %bb.0:
60+
; VECTOR-NEXT: vlreph %v0, 6(%r2)
61+
; VECTOR-NEXT: br %r14
62+
%gep = getelementptr inbounds %s.half, ptr %P, i64 0, i32 3
63+
%res = load half, ptr %gep
64+
ret half %res
65+
}

0 commit comments

Comments
 (0)