[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / CodeGen / ARM / fp16-load-store.ll
blob01297ef22561a4dea0322af06dbeb309b3614e4b
1 ; RUN: llc < %s -mtriple armv8a--none-eabi -mattr=+fullfp16 | FileCheck %s
3 define void @load_zero(ptr %in, ptr %out) {
4 entry:
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
12 define void @load_255(ptr %in, ptr %out) {
13 entry:
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
22 define void @load_256(ptr %in, ptr %out) {
23 entry:
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
33 define void @load_neg_255(ptr %in, ptr %out) {
34 entry:
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
43 define void @load_neg_256(ptr %in, ptr %out) {
44 entry:
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
54 define void @store_zero(ptr %in, ptr %out) {
55 entry:
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
63 define void @store_255(ptr %in, ptr %out) {
64 entry:
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
73 define void @store_256(ptr %in, ptr %out) {
74 entry:
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
84 define void @store_neg_255(ptr %in, ptr %out) {
85 entry:
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
94 define void @store_neg_256(ptr %in, ptr %out) {
95 entry:
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