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