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