139 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s3 4%struct.s_int8_t = type { [16 x i8], [16 x i8] }5%struct.s_int16_t = type { [8 x i16], [8 x i16] }6%struct.s_int32_t = type { [4 x i32], [4 x i32] }7%struct.s_float16_t = type { [8 x half], [8 x half] }8%struct.s_float32_t = type { [4 x float], [4 x float] }9 10define hidden void @fwd_int8_t(ptr noalias %v) local_unnamed_addr #0 {11; CHECK-LABEL: fwd_int8_t:12; CHECK: @ %bb.0: @ %entry13; CHECK-NEXT: vldrb.u8 q0, [r0]14; CHECK-NEXT: vstrb.8 q0, [r0, #16]15; CHECK-NEXT: bx lr16entry:17 %arrayidx3 = getelementptr inbounds %struct.s_int8_t, ptr %v, i32 0, i32 1, i32 018 %0 = load <16 x i8>, ptr %v, align 119 store <16 x i8> %0, ptr %arrayidx3, align 120 ret void21}22 23define hidden void @fwd_int16_t(ptr noalias nocapture %v) local_unnamed_addr #0 {24; CHECK-LABEL: fwd_int16_t:25; CHECK: @ %bb.0: @ %entry26; CHECK-NEXT: vldrh.u16 q0, [r0]27; CHECK-NEXT: vstrh.16 q0, [r0, #16]28; CHECK-NEXT: bx lr29entry:30 %arrayidx3 = getelementptr inbounds %struct.s_int16_t, ptr %v, i32 0, i32 1, i32 031 %0 = load <8 x i16>, ptr %v, align 232 store <8 x i16> %0, ptr %arrayidx3, align 233 ret void34}35 36define hidden void @fwd_int32_t(ptr noalias nocapture %v) local_unnamed_addr #0 {37; CHECK-LABEL: fwd_int32_t:38; CHECK: @ %bb.0: @ %entry39; CHECK-NEXT: vldrw.u32 q0, [r0]40; CHECK-NEXT: vstrw.32 q0, [r0, #16]41; CHECK-NEXT: bx lr42entry:43 %arrayidx3 = getelementptr inbounds %struct.s_int32_t, ptr %v, i32 0, i32 1, i32 044 %0 = load <4 x i32>, ptr %v, align 445 store <4 x i32> %0, ptr %arrayidx3, align 446 ret void47}48 49define hidden void @fwd_float16_t(ptr noalias nocapture %v) local_unnamed_addr #0 {50; CHECK-LABEL: fwd_float16_t:51; CHECK: @ %bb.0: @ %entry52; CHECK-NEXT: vldrh.u16 q0, [r0], #1653; CHECK-NEXT: vstrh.16 q0, [r0]54; CHECK-NEXT: bx lr55entry:56 %arrayidx3 = getelementptr inbounds %struct.s_float16_t, ptr %v, i32 0, i32 1, i32 057 %0 = load <8 x half>, ptr %v, align 258 store <8 x half> %0, ptr %arrayidx3, align 259 ret void60}61 62define hidden void @fwd_float32_t(ptr noalias nocapture %v) local_unnamed_addr #0 {63; CHECK-LABEL: fwd_float32_t:64; CHECK: @ %bb.0: @ %entry65; CHECK-NEXT: vldrw.u32 q0, [r0]66; CHECK-NEXT: vstrw.32 q0, [r0, #16]67; CHECK-NEXT: bx lr68entry:69 %d = getelementptr inbounds %struct.s_float32_t, ptr %v, i32 0, i32 170 %0 = load <4 x i32>, ptr %v, align 471 store <4 x i32> %0, ptr %d, align 472 ret void73}74 75define hidden void @bwd_int8_t(ptr noalias %v) local_unnamed_addr #0 {76; CHECK-LABEL: bwd_int8_t:77; CHECK: @ %bb.0: @ %for.end78; CHECK-NEXT: vldrb.u8 q0, [r0]79; CHECK-NEXT: vstrb.8 q0, [r0, #-16]80; CHECK-NEXT: bx lr81for.end:82 %0 = load <16 x i8>, ptr %v, align 183 %arrayidx3 = getelementptr inbounds %struct.s_int8_t, ptr %v, i32 -1, i32 1, i32 084 store <16 x i8> %0, ptr %arrayidx3, align 185 ret void86}87 88define hidden void @bwd_int16_t(ptr noalias nocapture %v) local_unnamed_addr #0 {89; CHECK-LABEL: bwd_int16_t:90; CHECK: @ %bb.0: @ %for.end91; CHECK-NEXT: vldrh.u16 q0, [r0]92; CHECK-NEXT: vstrh.16 q0, [r0, #-16]93; CHECK-NEXT: bx lr94for.end:95 %0 = load <8 x i16>, ptr %v, align 296 %arrayidx3 = getelementptr inbounds %struct.s_int16_t, ptr %v, i32 -1, i32 1, i32 097 store <8 x i16> %0, ptr %arrayidx3, align 298 ret void99}100 101define hidden void @bwd_int32_t(ptr noalias nocapture %v) local_unnamed_addr #0 {102; CHECK-LABEL: bwd_int32_t:103; CHECK: @ %bb.0: @ %for.end104; CHECK-NEXT: vldrw.u32 q0, [r0]105; CHECK-NEXT: vstrw.32 q0, [r0, #-16]106; CHECK-NEXT: bx lr107for.end:108 %0 = load <4 x i32>, ptr %v, align 4109 %arrayidx3 = getelementptr inbounds %struct.s_int32_t, ptr %v, i32 -1, i32 1, i32 0110 store <4 x i32> %0, ptr %arrayidx3, align 4111 ret void112}113 114define hidden void @bwd_float16_t(ptr noalias nocapture %v) local_unnamed_addr #0 {115; CHECK-LABEL: bwd_float16_t:116; CHECK: @ %bb.0: @ %for.end117; CHECK-NEXT: vldrh.u16 q0, [r0], #-16118; CHECK-NEXT: vstrh.16 q0, [r0]119; CHECK-NEXT: bx lr120for.end:121 %0 = load <8 x half>, ptr %v, align 2122 %arrayidx3 = getelementptr inbounds %struct.s_float16_t, ptr %v, i32 -1, i32 1, i32 0123 store <8 x half> %0, ptr %arrayidx3, align 2124 ret void125}126 127define hidden void @bwd_float32_t(ptr noalias nocapture %v) local_unnamed_addr #0 {128; CHECK-LABEL: bwd_float32_t:129; CHECK: @ %bb.0: @ %for.end130; CHECK-NEXT: vldrw.u32 q0, [r0]131; CHECK-NEXT: vstrw.32 q0, [r0, #-16]132; CHECK-NEXT: bx lr133for.end:134 %0 = load <4 x i32>, ptr %v, align 4135 %d = getelementptr inbounds %struct.s_float32_t, ptr %v, i32 -1, i32 1136 store <4 x i32> %0, ptr %d, align 4137 ret void138}139