xref: /llvm-project/llvm/test/CodeGen/ARM/fp16-load-store.ll (revision bed1c7f061aa12417aa081e334afdba45767b938)
1; RUN: llc < %s -mtriple armv8a--none-eabi -mattr=+fullfp16 | FileCheck %s
2
3define void @load_zero(ptr %in, ptr %out) {
4entry:
5; CHECK-LABEL: load_zero:
6; CHECK: vldr.16 {{s[0-9]+}}, [r0]
7  %load = load half, ptr %in, align 2
8  store half %load, ptr %out
9  ret void
10}
11
12define void @load_255(ptr %in, ptr %out) {
13entry:
14; CHECK-LABEL: load_255:
15; CHECK: vldr.16 {{s[0-9]+}}, [r0, #510]
16  %arrayidx = getelementptr inbounds half, ptr %in, i32 255
17  %load = load half, ptr %arrayidx, align 2
18  store half %load, ptr %out
19  ret void
20}
21
22define void @load_256(ptr %in, ptr %out) {
23entry:
24; CHECK-LABEL: load_256:
25; CHECK: add     [[ADDR:r[0-9]+]], r0, #512
26; CHECK: vldr.16 {{s[0-9]+}}, [[[ADDR]]]
27  %arrayidx = getelementptr inbounds half, ptr %in, i32 256
28  %load = load half, ptr %arrayidx, align 2
29  store half %load, ptr %out
30  ret void
31}
32
33define void @load_neg_255(ptr %in, ptr %out) {
34entry:
35; CHECK-LABEL: load_neg_255:
36; CHECK: vldr.16 {{s[0-9]+}}, [r0, #-510]
37  %arrayidx = getelementptr inbounds half, ptr %in, i32 -255
38  %load = load half, ptr %arrayidx, align 2
39  store half %load, ptr %out
40  ret void
41}
42
43define void @load_neg_256(ptr %in, ptr %out) {
44entry:
45; CHECK-LABEL: load_neg_256:
46; CHECK: sub     [[ADDR:r[0-9]+]], r0, #512
47; CHECK: vldr.16 {{s[0-9]+}}, [[[ADDR]]]
48  %arrayidx = getelementptr inbounds half, ptr %in, i32 -256
49  %load = load half, ptr %arrayidx, align 2
50  store half %load, ptr %out
51  ret void
52}
53
54define void @store_zero(ptr %in, ptr %out) {
55entry:
56; CHECK-LABEL: store_zero:
57  %load = load half, ptr %in, align 2
58; CHECK: vstr.16 {{s[0-9]+}}, [r1]
59  store half %load, ptr %out
60  ret void
61}
62
63define void @store_255(ptr %in, ptr %out) {
64entry:
65; CHECK-LABEL: store_255:
66  %load = load half, ptr %in, align 2
67; CHECK: vstr.16 {{s[0-9]+}}, [r1, #510]
68  %arrayidx = getelementptr inbounds half, ptr %out, i32 255
69  store half %load, ptr %arrayidx
70  ret void
71}
72
73define void @store_256(ptr %in, ptr %out) {
74entry:
75; CHECK-LABEL: store_256:
76  %load = load half, ptr %in, align 2
77; CHECK: add     [[ADDR:r[0-9]+]], r1, #512
78; CHECK: vstr.16 {{s[0-9]+}}, [[[ADDR]]]
79  %arrayidx = getelementptr inbounds half, ptr %out, i32 256
80  store half %load, ptr %arrayidx
81  ret void
82}
83
84define void @store_neg_255(ptr %in, ptr %out) {
85entry:
86; CHECK-LABEL: store_neg_255:
87  %load = load half, ptr %in, align 2
88; CHECK: vstr.16 {{s[0-9]+}}, [r1, #-510]
89  %arrayidx = getelementptr inbounds half, ptr %out, i32 -255
90  store half %load, ptr %arrayidx
91  ret void
92}
93
94define void @store_neg_256(ptr %in, ptr %out) {
95entry:
96; CHECK-LABEL: store_neg_256:
97  %load = load half, ptr %in, align 2
98; CHECK: sub     [[ADDR:r[0-9]+]], r1, #512
99; CHECK: vstr.16 {{s[0-9]+}}, [[[ADDR]]]
100  %arrayidx = getelementptr inbounds half, ptr %out, i32 -256
101  store half %load, ptr %arrayidx
102  ret void
103}
104