249 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p1,+bf16 < %s | FileCheck %s3 4declare void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv2i64.nxv2i64(<vscale x 2 x i64>, <vscale x 1 x i1>, <vscale x 2 x i64>, i64)5declare void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv4i32.nxv2i64(<vscale x 4 x i32>, <vscale x 1 x i1>, <vscale x 2 x i64>, i64)6declare void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv8i16.nxv2i64(<vscale x 8 x i16>, <vscale x 1 x i1>, <vscale x 2 x i64>, i64)7declare void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv16i8.nxv2i64(<vscale x 16 x i8>, <vscale x 1 x i1>, <vscale x 2 x i64>, i64)8declare void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv2f64.nxv2i64(<vscale x 2 x double>, <vscale x 1 x i1>, <vscale x 2 x i64>, i64)9declare void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv4f32.nxv2i64(<vscale x 4 x float>, <vscale x 1 x i1>, <vscale x 2 x i64>, i64)10declare void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv8f16.nxv2i64(<vscale x 8 x half>, <vscale x 1 x i1>, <vscale x 2 x i64>, i64)11declare void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv8bf16.nxv2i64(<vscale x 8 x bfloat>, <vscale x 1 x i1>, <vscale x 2 x i64>, i64)12declare void @llvm.aarch64.sve.st1q.scatter.index.nxv8i16(<vscale x 8 x i16>, <vscale x 1 x i1>, ptr, <vscale x 2 x i64>)13declare void @llvm.aarch64.sve.st1q.scatter.index.nxv4i32(<vscale x 4 x i32>, <vscale x 1 x i1>, ptr, <vscale x 2 x i64>)14declare void @llvm.aarch64.sve.st1q.scatter.index.nxv2i64(<vscale x 2 x i64>, <vscale x 1 x i1>, ptr, <vscale x 2 x i64>)15declare void @llvm.aarch64.sve.st1q.scatter.index.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 1 x i1>, ptr, <vscale x 2 x i64>)16declare void @llvm.aarch64.sve.st1q.scatter.index.nxv8f16(<vscale x 8 x half>, <vscale x 1 x i1>, ptr, <vscale x 2 x i64>)17declare void @llvm.aarch64.sve.st1q.scatter.index.nxv4f32(<vscale x 4 x float>, <vscale x 1 x i1>, ptr, <vscale x 2 x i64>)18declare void @llvm.aarch64.sve.st1q.scatter.index.nxv2f64(<vscale x 2 x double>, <vscale x 1 x i1>, ptr, <vscale x 2 x i64>)19 20define void @test_svst1q_scatter_u64index_s16(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 8 x i16> %data) {21; CHECK-LABEL: test_svst1q_scatter_u64index_s16:22; CHECK: // %bb.0: // %entry23; CHECK-NEXT: lsl z0.d, z0.d, #124; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]25; CHECK-NEXT: ret26entry:27 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv8i16(<vscale x 8 x i16> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)28 ret void29}30 31define void @test_svst1q_scatter_u64index_u16(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 8 x i16> %data) {32; CHECK-LABEL: test_svst1q_scatter_u64index_u16:33; CHECK: // %bb.0: // %entry34; CHECK-NEXT: lsl z0.d, z0.d, #135; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]36; CHECK-NEXT: ret37entry:38 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv8i16(<vscale x 8 x i16> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)39 ret void40}41 42define void @test_svst1q_scatter_u64index_s32(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 4 x i32> %data) {43; CHECK-LABEL: test_svst1q_scatter_u64index_s32:44; CHECK: // %bb.0: // %entry45; CHECK-NEXT: lsl z0.d, z0.d, #246; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]47; CHECK-NEXT: ret48entry:49 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv4i32(<vscale x 4 x i32> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)50 ret void51}52 53define void @test_svst1q_scatter_u64index_u32(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 4 x i32> %data) {54; CHECK-LABEL: test_svst1q_scatter_u64index_u32:55; CHECK: // %bb.0: // %entry56; CHECK-NEXT: lsl z0.d, z0.d, #257; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]58; CHECK-NEXT: ret59entry:60 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv4i32(<vscale x 4 x i32> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)61 ret void62}63 64define void @test_svst1q_scatter_u64index_s64(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 2 x i64> %data) {65; CHECK-LABEL: test_svst1q_scatter_u64index_s64:66; CHECK: // %bb.0: // %entry67; CHECK-NEXT: lsl z0.d, z0.d, #368; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]69; CHECK-NEXT: ret70entry:71 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv2i64(<vscale x 2 x i64> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)72 ret void73}74 75define void @test_svst1q_scatter_u64index_u64(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 2 x i64> %data) {76; CHECK-LABEL: test_svst1q_scatter_u64index_u64:77; CHECK: // %bb.0: // %entry78; CHECK-NEXT: lsl z0.d, z0.d, #379; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]80; CHECK-NEXT: ret81entry:82 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv2i64(<vscale x 2 x i64> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)83 ret void84}85 86define void @test_svst1q_scatter_u64index_bf16(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 8 x bfloat> %data) {87; CHECK-LABEL: test_svst1q_scatter_u64index_bf16:88; CHECK: // %bb.0: // %entry89; CHECK-NEXT: lsl z0.d, z0.d, #190; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]91; CHECK-NEXT: ret92entry:93 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv8bf16(<vscale x 8 x bfloat> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)94 ret void95}96 97define void @test_svst1q_scatter_u64index_f16(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 8 x half> %data) {98; CHECK-LABEL: test_svst1q_scatter_u64index_f16:99; CHECK: // %bb.0: // %entry100; CHECK-NEXT: lsl z0.d, z0.d, #1101; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]102; CHECK-NEXT: ret103entry:104 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv8f16(<vscale x 8 x half> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)105 ret void106}107 108define void @test_svst1q_scatter_u64index_f32(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 4 x float> %data) {109; CHECK-LABEL: test_svst1q_scatter_u64index_f32:110; CHECK: // %bb.0: // %entry111; CHECK-NEXT: lsl z0.d, z0.d, #2112; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]113; CHECK-NEXT: ret114entry:115 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv4f32(<vscale x 4 x float> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)116 ret void117}118 119define void @test_svst1q_scatter_u64index_f64(<vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx, <vscale x 2 x double> %data) {120; CHECK-LABEL: test_svst1q_scatter_u64index_f64:121; CHECK: // %bb.0: // %entry122; CHECK-NEXT: lsl z0.d, z0.d, #3123; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x0]124; CHECK-NEXT: ret125entry:126 tail call void @llvm.aarch64.sve.st1q.scatter.index.nxv2f64(<vscale x 2 x double> %data, <vscale x 1 x i1> %pg, ptr %base, <vscale x 2 x i64> %idx)127 ret void128}129 130define void @test_svst1q_scatter_u64base_index_s16(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 8 x i16> %data) {131; CHECK-LABEL: test_svst1q_scatter_u64base_index_s16:132; CHECK: // %bb.0: // %entry133; CHECK-NEXT: lsl x8, x0, #1134; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]135; CHECK-NEXT: ret136entry:137 %0 = shl i64 %idx, 1138 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv8i16.nxv2i64(<vscale x 8 x i16> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)139 ret void140}141 142define void @test_svst1q_scatter_u64base_index_u16(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 8 x i16> %data) {143; CHECK-LABEL: test_svst1q_scatter_u64base_index_u16:144; CHECK: // %bb.0: // %entry145; CHECK-NEXT: lsl x8, x0, #1146; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]147; CHECK-NEXT: ret148entry:149 %0 = shl i64 %idx, 1150 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv8i16.nxv2i64(<vscale x 8 x i16> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)151 ret void152}153 154define void @test_svst1q_scatter_u64base_index_s32(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 4 x i32> %data) {155; CHECK-LABEL: test_svst1q_scatter_u64base_index_s32:156; CHECK: // %bb.0: // %entry157; CHECK-NEXT: lsl x8, x0, #2158; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]159; CHECK-NEXT: ret160entry:161 %0 = shl i64 %idx, 2162 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv4i32.nxv2i64(<vscale x 4 x i32> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)163 ret void164}165 166define void @test_svst1q_scatter_u64base_index_u32(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 4 x i32> %data) {167; CHECK-LABEL: test_svst1q_scatter_u64base_index_u32:168; CHECK: // %bb.0: // %entry169; CHECK-NEXT: lsl x8, x0, #2170; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]171; CHECK-NEXT: ret172entry:173 %0 = shl i64 %idx, 2174 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv4i32.nxv2i64(<vscale x 4 x i32> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)175 ret void176}177 178define void @test_svst1q_scatter_u64base_index_s64(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 2 x i64> %data) {179; CHECK-LABEL: test_svst1q_scatter_u64base_index_s64:180; CHECK: // %bb.0: // %entry181; CHECK-NEXT: lsl x8, x0, #3182; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]183; CHECK-NEXT: ret184entry:185 %0 = shl i64 %idx, 3186 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv2i64.nxv2i64(<vscale x 2 x i64> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)187 ret void188}189 190define void @test_svst1q_scatter_u64base_index_u64(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 2 x i64> %data) {191; CHECK-LABEL: test_svst1q_scatter_u64base_index_u64:192; CHECK: // %bb.0: // %entry193; CHECK-NEXT: lsl x8, x0, #3194; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]195; CHECK-NEXT: ret196entry:197 %0 = shl i64 %idx, 3198 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv2i64.nxv2i64(<vscale x 2 x i64> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)199 ret void200}201 202define void @test_svst1q_scatter_u64base_index_bf16(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 8 x bfloat> %data) {203; CHECK-LABEL: test_svst1q_scatter_u64base_index_bf16:204; CHECK: // %bb.0: // %entry205; CHECK-NEXT: lsl x8, x0, #1206; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]207; CHECK-NEXT: ret208entry:209 %0 = shl i64 %idx, 1210 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv8bf16.nxv2i64(<vscale x 8 x bfloat> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)211 ret void212}213 214define void @test_svst1q_scatter_u64base_index_f16(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 8 x half> %data) {215; CHECK-LABEL: test_svst1q_scatter_u64base_index_f16:216; CHECK: // %bb.0: // %entry217; CHECK-NEXT: lsl x8, x0, #1218; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]219; CHECK-NEXT: ret220entry:221 %0 = shl i64 %idx, 1222 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv8f16.nxv2i64(<vscale x 8 x half> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)223 ret void224}225 226define void @test_svst1q_scatter_u64base_index_f32(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 4 x float> %data) {227; CHECK-LABEL: test_svst1q_scatter_u64base_index_f32:228; CHECK: // %bb.0: // %entry229; CHECK-NEXT: lsl x8, x0, #2230; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]231; CHECK-NEXT: ret232entry:233 %0 = shl i64 %idx, 2234 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv4f32.nxv2i64(<vscale x 4 x float> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)235 ret void236}237 238define void @test_svst1q_scatter_u64base_index_f64(<vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %idx, <vscale x 2 x double> %data) {239; CHECK-LABEL: test_svst1q_scatter_u64base_index_f64:240; CHECK: // %bb.0: // %entry241; CHECK-NEXT: lsl x8, x0, #3242; CHECK-NEXT: st1q { z1.q }, p0, [z0.d, x8]243; CHECK-NEXT: ret244entry:245 %0 = shl i64 %idx, 3246 tail call void @llvm.aarch64.sve.st1q.scatter.scalar.offset.nxv2f64.nxv2i64(<vscale x 2 x double> %data, <vscale x 1 x i1> %pg, <vscale x 2 x i64> %base, i64 %0)247 ret void248}249