brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 71b883f Raw
142 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s3 4; ST1B5 6define void @st1b_lower_bound(<vscale x 16 x i8> %data, ptr %a) {7; CHECK-LABEL: st1b_lower_bound:8; CHECK:       // %bb.0:9; CHECK-NEXT:    str z0, [x0, #-8, mul vl]10; CHECK-NEXT:    ret11  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 -812  store <vscale x 16 x i8> %data, ptr %base13  ret void14}15 16define void @st1b_inbound(<vscale x 16 x i8> %data, ptr %a) {17; CHECK-LABEL: st1b_inbound:18; CHECK:       // %bb.0:19; CHECK-NEXT:    str z0, [x0, #1, mul vl]20; CHECK-NEXT:    ret21  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 122  store <vscale x 16 x i8> %data, ptr %base23  ret void24}25 26define void @st1b_upper_bound(<vscale x 16 x i8> %data, ptr %a) {27; CHECK-LABEL: st1b_upper_bound:28; CHECK:       // %bb.0:29; CHECK-NEXT:    str z0, [x0, #7, mul vl]30; CHECK-NEXT:    ret31  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 732  store <vscale x 16 x i8> %data, ptr %base33  ret void34}35 36define void @st1b_out_of_upper_bound(<vscale x 16 x i8> %data, ptr %a) {37; CHECK-LABEL: st1b_out_of_upper_bound:38; CHECK:       // %bb.0:39; CHECK-NEXT:    str z0, [x0, #8, mul vl]40; CHECK-NEXT:    ret41  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 842  store <vscale x 16 x i8> %data, ptr %base43  ret void44}45 46define void @st1b_out_of_lower_bound(<vscale x 16 x i8> %data, ptr %a) {47; CHECK-LABEL: st1b_out_of_lower_bound:48; CHECK:       // %bb.0:49; CHECK-NEXT:    str z0, [x0, #-9, mul vl]50; CHECK-NEXT:    ret51  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 -952  store <vscale x 16 x i8> %data, ptr %base53  ret void54}55 56; ST1H57 58define void @st1h_inbound(<vscale x 8 x i16> %data, ptr %a) {59; CHECK-LABEL: st1h_inbound:60; CHECK:       // %bb.0:61; CHECK-NEXT:    str z0, [x0, #-6, mul vl]62; CHECK-NEXT:    ret63  %base = getelementptr <vscale x 8 x i16>, ptr %a, i64 -664  store <vscale x 8 x i16> %data, ptr %base65  ret void66}67 68; ST1W69 70define void @st1w_inbound(<vscale x 4 x i32> %data, ptr %a) {71; CHECK-LABEL: st1w_inbound:72; CHECK:       // %bb.0:73; CHECK-NEXT:    str z0, [x0, #2, mul vl]74; CHECK-NEXT:    ret75  %base = getelementptr <vscale x 4 x i32>, ptr %a, i64 276  store <vscale x 4 x i32> %data, ptr %base77  ret void78}79 80; ST1D81 82define void @st1d_inbound(<vscale x 2 x i64> %data, ptr %a) {83; CHECK-LABEL: st1d_inbound:84; CHECK:       // %bb.0:85; CHECK-NEXT:    str z0, [x0, #5, mul vl]86; CHECK-NEXT:    ret87  %base = getelementptr <vscale x 2 x i64>, ptr %a, i64 588  store <vscale x 2 x i64> %data, ptr %base89  ret void90}91 92 93; Splat stores of unpacked FP scalable vectors94 95define void @store_nxv2f32(ptr %out) {96; CHECK-LABEL: store_nxv2f32:97; CHECK:       // %bb.0:98; CHECK-NEXT:    fmov z0.s, #1.0000000099; CHECK-NEXT:    ptrue p0.d100; CHECK-NEXT:    st1w { z0.d }, p0, [x0]101; CHECK-NEXT:    ret102  store <vscale x 2 x float> splat(float 1.0), ptr %out103  ret void104}105 106define void @store_nxv4f16(ptr %out) {107; CHECK-LABEL: store_nxv4f16:108; CHECK:       // %bb.0:109; CHECK-NEXT:    fmov z0.h, #1.00000000110; CHECK-NEXT:    ptrue p0.s111; CHECK-NEXT:    st1h { z0.s }, p0, [x0]112; CHECK-NEXT:    ret113  store <vscale x 4 x half> splat(half 1.0), ptr %out114  ret void115}116 117; Splat stores of unusual FP scalable vector types118 119define void @store_nxv6f32(ptr %out) {120; CHECK-LABEL: store_nxv6f32:121; CHECK:       // %bb.0:122; CHECK-NEXT:    fmov z0.s, #1.00000000123; CHECK-NEXT:    ptrue p0.d124; CHECK-NEXT:    st1w { z0.d }, p0, [x0, #2, mul vl]125; CHECK-NEXT:    str z0, [x0]126; CHECK-NEXT:    ret127  store <vscale x 6 x float> splat(float 1.0), ptr %out128  ret void129}130 131define void @store_nxv12f16(ptr %out) {132; CHECK-LABEL: store_nxv12f16:133; CHECK:       // %bb.0:134; CHECK-NEXT:    fmov z0.h, #1.00000000135; CHECK-NEXT:    ptrue p0.s136; CHECK-NEXT:    st1h { z0.s }, p0, [x0, #2, mul vl]137; CHECK-NEXT:    str z0, [x0]138; CHECK-NEXT:    ret139  store <vscale x 12 x half> splat(half 1.0), ptr %out140  ret void141}142