brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.8 KiB · 153821c Raw
247 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; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -force-streaming < %s | FileCheck %s4 5;6; ST1B7;8 9define void @st1b_upper_bound(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %a) {10; CHECK-LABEL: st1b_upper_bound:11; CHECK:       // %bb.0:12; CHECK-NEXT:    st1b { z0.b }, p0, [x0, #7, mul vl]13; CHECK-NEXT:    ret14  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 715  %base_scalar = bitcast ptr %base to ptr16  call void @llvm.aarch64.sve.st1.nxv16i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %base_scalar)17  ret void18}19 20define void @st1b_inbound(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %a) {21; CHECK-LABEL: st1b_inbound:22; CHECK:       // %bb.0:23; CHECK-NEXT:    st1b { z0.b }, p0, [x0, #1, mul vl]24; CHECK-NEXT:    ret25  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 126  %base_scalar = bitcast ptr %base to ptr27  call void @llvm.aarch64.sve.st1.nxv16i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %base_scalar)28  ret void29}30 31define void @st1b_lower_bound(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %a) {32; CHECK-LABEL: st1b_lower_bound:33; CHECK:       // %bb.0:34; CHECK-NEXT:    st1b { z0.b }, p0, [x0, #-8, mul vl]35; CHECK-NEXT:    ret36  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 -837  %base_scalar = bitcast ptr %base to ptr38  call void @llvm.aarch64.sve.st1.nxv16i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %base_scalar)39  ret void40}41 42define void @st1b_out_of_upper_bound(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %a) {43; CHECK-LABEL: st1b_out_of_upper_bound:44; CHECK:       // %bb.0:45; CHECK-NEXT:    rdvl x8, #846; CHECK-NEXT:    st1b { z0.b }, p0, [x0, x8]47; CHECK-NEXT:    ret48  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 849  %base_scalar = bitcast ptr %base to ptr50  call void @llvm.aarch64.sve.st1.nxv16i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %base_scalar)51  ret void52}53 54define void @st1b_out_of_lower_bound(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %a) {55; CHECK-LABEL: st1b_out_of_lower_bound:56; CHECK:       // %bb.0:57; CHECK-NEXT:    rdvl x8, #-958; CHECK-NEXT:    st1b { z0.b }, p0, [x0, x8]59; CHECK-NEXT:    ret60  %base = getelementptr <vscale x 16 x i8>, ptr %a, i64 -961  %base_scalar = bitcast ptr %base to ptr62  call void @llvm.aarch64.sve.st1.nxv16i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pg, ptr %base_scalar)63  ret void64}65 66define void @st1b_s_inbound(<vscale x 4 x i32> %data, <vscale x 4 x i1> %pg, ptr %a) {67; CHECK-LABEL: st1b_s_inbound:68; CHECK:       // %bb.0:69; CHECK-NEXT:    st1b { z0.s }, p0, [x0, #7, mul vl]70; CHECK-NEXT:    ret71  %base = getelementptr <vscale x 4 x i8>, ptr %a, i64 772  %base_scalar = bitcast ptr %base to ptr73  %trunc = trunc <vscale x 4 x i32> %data to <vscale x 4 x i8>74  call void @llvm.aarch64.sve.st1.nxv4i8(<vscale x 4 x i8> %trunc, <vscale x 4 x i1> %pg, ptr %base_scalar)75  ret void76}77 78define void @st1b_h_inbound(<vscale x 8 x i16> %data, <vscale x 8 x i1> %pg, ptr %a) {79; CHECK-LABEL: st1b_h_inbound:80; CHECK:       // %bb.0:81; CHECK-NEXT:    st1b { z0.h }, p0, [x0, #1, mul vl]82; CHECK-NEXT:    ret83  %base = getelementptr <vscale x 8 x i8>, ptr %a, i64 184  %base_scalar = bitcast ptr %base to ptr85  %trunc = trunc <vscale x 8 x i16> %data to <vscale x 8 x i8>86  call void @llvm.aarch64.sve.st1.nxv8i8(<vscale x 8 x i8> %trunc, <vscale x 8 x i1> %pg, ptr %base_scalar)87  ret void88}89 90define void @st1b_d_inbound(<vscale x 2 x i64> %data, <vscale x 2 x i1> %pg, ptr %a) {91; CHECK-LABEL: st1b_d_inbound:92; CHECK:       // %bb.0:93; CHECK-NEXT:    st1b { z0.d }, p0, [x0, #-7, mul vl]94; CHECK-NEXT:    ret95  %base = getelementptr <vscale x 2 x i8>, ptr %a, i64 -796  %base_scalar = bitcast ptr %base to ptr97  %trunc = trunc <vscale x 2 x i64> %data to <vscale x 2 x i8>98  call void @llvm.aarch64.sve.st1.nxv2i8(<vscale x 2 x i8> %trunc, <vscale x 2 x i1> %pg, ptr %base_scalar)99  ret void100}101 102;103; ST1H104;105 106define void @st1h_inbound(<vscale x 8 x i16> %data, <vscale x 8 x i1> %pg, ptr %a) {107; CHECK-LABEL: st1h_inbound:108; CHECK:       // %bb.0:109; CHECK-NEXT:    st1h { z0.h }, p0, [x0, #-1, mul vl]110; CHECK-NEXT:    ret111  %base = getelementptr <vscale x 8 x i16>, ptr %a, i64 -1112  %base_scalar = bitcast ptr %base to ptr113  call void @llvm.aarch64.sve.st1.nxv8i16(<vscale x 8 x i16> %data, <vscale x 8 x i1> %pg, ptr %base_scalar)114  ret void115}116 117define void @st1h_f16_inbound(<vscale x 8 x half> %data, <vscale x 8 x i1> %pg, ptr %a) {118; CHECK-LABEL: st1h_f16_inbound:119; CHECK:       // %bb.0:120; CHECK-NEXT:    st1h { z0.h }, p0, [x0, #-5, mul vl]121; CHECK-NEXT:    ret122  %base = getelementptr <vscale x 8 x half>, ptr %a, i64 -5123  %base_scalar = bitcast ptr %base to ptr124  call void @llvm.aarch64.sve.st1.nxv8f16(<vscale x 8 x half> %data, <vscale x 8 x i1> %pg, ptr %base_scalar)125  ret void126}127 128define void @st1h_bf16_inbound(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %pg, ptr %a) #0 {129; CHECK-LABEL: st1h_bf16_inbound:130; CHECK:       // %bb.0:131; CHECK-NEXT:    st1h { z0.h }, p0, [x0, #-5, mul vl]132; CHECK-NEXT:    ret133  %base = getelementptr <vscale x 8 x bfloat>, ptr %a, i64 -5134  %base_scalar = bitcast ptr %base to ptr135  call void @llvm.aarch64.sve.st1.nxv8bf16(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %pg, ptr %base_scalar)136  ret void137}138 139define void @st1h_s_inbound(<vscale x 4 x i32> %data, <vscale x 4 x i1> %pg, ptr %a) {140; CHECK-LABEL: st1h_s_inbound:141; CHECK:       // %bb.0:142; CHECK-NEXT:    st1h { z0.s }, p0, [x0, #2, mul vl]143; CHECK-NEXT:    ret144  %base = getelementptr <vscale x 4 x i16>, ptr %a, i64 2145  %base_scalar = bitcast ptr %base to ptr146  %trunc = trunc <vscale x 4 x i32> %data to <vscale x 4 x i16>147  call void @llvm.aarch64.sve.st1.nxv4i16(<vscale x 4 x i16> %trunc, <vscale x 4 x i1> %pg, ptr %base_scalar)148  ret void149}150 151define void @st1h_d_inbound(<vscale x 2 x i64> %data, <vscale x 2 x i1> %pg, ptr %a) {152; CHECK-LABEL: st1h_d_inbound:153; CHECK:       // %bb.0:154; CHECK-NEXT:    st1h { z0.d }, p0, [x0, #-4, mul vl]155; CHECK-NEXT:    ret156  %base = getelementptr <vscale x 2 x i16>, ptr %a, i64 -4157  %base_scalar = bitcast ptr %base to ptr158  %trunc = trunc <vscale x 2 x i64> %data to <vscale x 2 x i16>159  call void @llvm.aarch64.sve.st1.nxv2i16(<vscale x 2 x i16> %trunc, <vscale x 2 x i1> %pg, ptr %base_scalar)160  ret void161}162 163;164; ST1W165;166 167define void @st1w_inbound(<vscale x 4 x i32> %data, <vscale x 4 x i1> %pg, ptr %a) {168; CHECK-LABEL: st1w_inbound:169; CHECK:       // %bb.0:170; CHECK-NEXT:    st1w { z0.s }, p0, [x0, #6, mul vl]171; CHECK-NEXT:    ret172  %base = getelementptr <vscale x 4 x i32>, ptr %a, i64 6173  %base_scalar = bitcast ptr %base to ptr174  call void @llvm.aarch64.sve.st1.nxv4i32(<vscale x 4 x i32> %data, <vscale x 4 x i1> %pg, ptr %base_scalar)175  ret void176}177 178define void @st1w_f32_inbound(<vscale x 4 x float> %data, <vscale x 4 x i1> %pg, ptr %a) {179; CHECK-LABEL: st1w_f32_inbound:180; CHECK:       // %bb.0:181; CHECK-NEXT:    st1w { z0.s }, p0, [x0, #-1, mul vl]182; CHECK-NEXT:    ret183  %base = getelementptr <vscale x 4 x float>, ptr %a, i64 -1184  %base_scalar = bitcast ptr %base to ptr185  call void @llvm.aarch64.sve.st1.nxv4f32(<vscale x 4 x float> %data, <vscale x 4 x i1> %pg, ptr %base_scalar)186  ret void187}188 189define void @st1w_d_inbound(<vscale x 2 x i64> %data, <vscale x 2 x i1> %pg, ptr %a) {190; CHECK-LABEL: st1w_d_inbound:191; CHECK:       // %bb.0:192; CHECK-NEXT:    st1w { z0.d }, p0, [x0, #1, mul vl]193; CHECK-NEXT:    ret194  %base = getelementptr <vscale x 2 x i32>, ptr %a, i64 1195  %base_scalar = bitcast ptr %base to ptr196  %trunc = trunc <vscale x 2 x i64> %data to <vscale x 2 x i32>197  call void @llvm.aarch64.sve.st1.nxv2i32(<vscale x 2 x i32> %trunc, <vscale x 2 x i1> %pg, ptr %base_scalar)198  ret void199}200 201;202; ST1D203;204 205define void @st1d_inbound(<vscale x 2 x i64> %data, <vscale x 2 x i1> %pg, ptr %a) {206; CHECK-LABEL: st1d_inbound:207; CHECK:       // %bb.0:208; CHECK-NEXT:    st1d { z0.d }, p0, [x0, #5, mul vl]209; CHECK-NEXT:    ret210  %base = getelementptr <vscale x 2 x i64>, ptr %a, i64 5211  %base_scalar = bitcast ptr %base to ptr212  call void @llvm.aarch64.sve.st1.nxv2i64(<vscale x 2 x i64> %data, <vscale x 2 x i1> %pg, ptr %base_scalar)213  ret void214}215 216define void @st1d_f64_inbound(<vscale x 2 x double> %data, <vscale x 2 x i1> %pg, ptr %a) {217; CHECK-LABEL: st1d_f64_inbound:218; CHECK:       // %bb.0:219; CHECK-NEXT:    st1d { z0.d }, p0, [x0, #-8, mul vl]220; CHECK-NEXT:    ret221  %base = getelementptr <vscale x 2 x double>, ptr %a, i64 -8222  %base_scalar = bitcast ptr %base to ptr223  call void @llvm.aarch64.sve.st1.nxv2f64(<vscale x 2 x double> %data, <vscale x 2 x i1> %pg, ptr %base_scalar)224  ret void225}226 227declare void @llvm.aarch64.sve.st1.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i1>, ptr)228 229declare void @llvm.aarch64.sve.st1.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i1>, ptr)230declare void @llvm.aarch64.sve.st1.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i1>, ptr)231declare void @llvm.aarch64.sve.st1.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, ptr)232declare void @llvm.aarch64.sve.st1.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x i1>, ptr)233 234declare void @llvm.aarch64.sve.st1.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i1>, ptr)235declare void @llvm.aarch64.sve.st1.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i1>, ptr)236declare void @llvm.aarch64.sve.st1.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, ptr)237declare void @llvm.aarch64.sve.st1.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, ptr)238 239declare void @llvm.aarch64.sve.st1.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, ptr)240declare void @llvm.aarch64.sve.st1.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, ptr)241declare void @llvm.aarch64.sve.st1.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, ptr)242declare void @llvm.aarch64.sve.st1.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, ptr)243declare void @llvm.aarch64.sve.st1.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, ptr)244 245; +bf16 is required for the bfloat version.246attributes #0 = { "target-features"="+bf16" }247