brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.2 KiB · 8c83172 Raw
291 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5; scaled unpacked 32-bit offsets6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7 8define void @masked_scatter_nxv2i16_sext(<vscale x 2 x i16> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {9; CHECK-LABEL: masked_scatter_nxv2i16_sext:10; CHECK:       // %bb.0:11; CHECK-NEXT:    st1h { z0.d }, p0, [x0, z1.d, sxtw #1]12; CHECK-NEXT:    ret13  %ext = sext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>14  %ptrs = getelementptr i16, ptr %base, <vscale x 2 x i64> %ext15  call void @llvm.masked.scatter.nxv2i16(<vscale x 2 x i16> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)16  ret void17}18 19define void @masked_scatter_nxv2i32_sext(<vscale x 2 x i32> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {20; CHECK-LABEL: masked_scatter_nxv2i32_sext:21; CHECK:       // %bb.0:22; CHECK-NEXT:    st1w { z0.d }, p0, [x0, z1.d, sxtw #2]23; CHECK-NEXT:    ret24  %ext = sext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>25  %ptrs = getelementptr i32, ptr %base, <vscale x 2 x i64> %ext26  call void @llvm.masked.scatter.nxv2i32(<vscale x 2 x i32> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)27  ret void28}29 30define void @masked_scatter_nxv2i64_sext(<vscale x 2 x i64> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {31; CHECK-LABEL: masked_scatter_nxv2i64_sext:32; CHECK:       // %bb.0:33; CHECK-NEXT:    st1d { z0.d }, p0, [x0, z1.d, sxtw #3]34; CHECK-NEXT:    ret35  %ext = sext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>36  %ptrs = getelementptr i64, ptr %base, <vscale x 2 x i64> %ext37  call void @llvm.masked.scatter.nxv2i64(<vscale x 2 x i64> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)38  ret void39}40 41define void @masked_scatter_nxv2f16_sext(<vscale x 2 x half> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {42; CHECK-LABEL: masked_scatter_nxv2f16_sext:43; CHECK:       // %bb.0:44; CHECK-NEXT:    st1h { z0.d }, p0, [x0, z1.d, sxtw #1]45; CHECK-NEXT:    ret46  %ext = sext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>47  %ptrs = getelementptr half, ptr %base, <vscale x 2 x i64> %ext48  call void @llvm.masked.scatter.nxv2f16(<vscale x 2 x half> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)49  ret void50}51 52define void @masked_scatter_nxv2bf16_sext(<vscale x 2 x bfloat> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind #0 {53; CHECK-LABEL: masked_scatter_nxv2bf16_sext:54; CHECK:       // %bb.0:55; CHECK-NEXT:    st1h { z0.d }, p0, [x0, z1.d, sxtw #1]56; CHECK-NEXT:    ret57  %ext = sext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>58  %ptrs = getelementptr bfloat, ptr %base, <vscale x 2 x i64> %ext59  call void @llvm.masked.scatter.nxv2bf16(<vscale x 2 x bfloat> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)60  ret void61}62 63define void @masked_scatter_nxv2f32_sext(<vscale x 2 x float> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {64; CHECK-LABEL: masked_scatter_nxv2f32_sext:65; CHECK:       // %bb.0:66; CHECK-NEXT:    st1w { z0.d }, p0, [x0, z1.d, sxtw #2]67; CHECK-NEXT:    ret68  %ext = sext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>69  %ptrs = getelementptr float, ptr %base, <vscale x 2 x i64> %ext70  call void @llvm.masked.scatter.nxv2f32(<vscale x 2 x float> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)71  ret void72}73 74define void @masked_scatter_nxv2f64_sext(<vscale x 2 x double> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {75; CHECK-LABEL: masked_scatter_nxv2f64_sext:76; CHECK:       // %bb.0:77; CHECK-NEXT:    st1d { z0.d }, p0, [x0, z1.d, sxtw #3]78; CHECK-NEXT:    ret79  %ext = sext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>80  %ptrs = getelementptr double, ptr %base, <vscale x 2 x i64> %ext81  call void @llvm.masked.scatter.nxv2f64(<vscale x 2 x double> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)82  ret void83}84 85define void @masked_scatter_nxv2i16_zext(<vscale x 2 x i16> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {86; CHECK-LABEL: masked_scatter_nxv2i16_zext:87; CHECK:       // %bb.0:88; CHECK-NEXT:    st1h { z0.d }, p0, [x0, z1.d, uxtw #1]89; CHECK-NEXT:    ret90  %ext = zext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>91  %ptrs = getelementptr i16, ptr %base, <vscale x 2 x i64> %ext92  call void @llvm.masked.scatter.nxv2i16(<vscale x 2 x i16> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)93  ret void94}95 96define void @masked_scatter_nxv2i32_zext(<vscale x 2 x i32> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {97; CHECK-LABEL: masked_scatter_nxv2i32_zext:98; CHECK:       // %bb.0:99; CHECK-NEXT:    st1w { z0.d }, p0, [x0, z1.d, uxtw #2]100; CHECK-NEXT:    ret101  %ext = zext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>102  %ptrs = getelementptr i32, ptr %base, <vscale x 2 x i64> %ext103  call void @llvm.masked.scatter.nxv2i32(<vscale x 2 x i32> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)104  ret void105}106 107define void @masked_scatter_nxv2i64_zext(<vscale x 2 x i64> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {108; CHECK-LABEL: masked_scatter_nxv2i64_zext:109; CHECK:       // %bb.0:110; CHECK-NEXT:    st1d { z0.d }, p0, [x0, z1.d, uxtw #3]111; CHECK-NEXT:    ret112  %ext = zext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>113  %ptrs = getelementptr i64, ptr %base, <vscale x 2 x i64> %ext114  call void @llvm.masked.scatter.nxv2i64(<vscale x 2 x i64> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)115  ret void116}117 118define void @masked_scatter_nxv2f16_zext(<vscale x 2 x half> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {119; CHECK-LABEL: masked_scatter_nxv2f16_zext:120; CHECK:       // %bb.0:121; CHECK-NEXT:    st1h { z0.d }, p0, [x0, z1.d, uxtw #1]122; CHECK-NEXT:    ret123  %ext = zext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>124  %ptrs = getelementptr half, ptr %base, <vscale x 2 x i64> %ext125  call void @llvm.masked.scatter.nxv2f16(<vscale x 2 x half> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)126  ret void127}128 129define void @masked_scatter_nxv2bf16_zext(<vscale x 2 x bfloat> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind #0 {130; CHECK-LABEL: masked_scatter_nxv2bf16_zext:131; CHECK:       // %bb.0:132; CHECK-NEXT:    st1h { z0.d }, p0, [x0, z1.d, uxtw #1]133; CHECK-NEXT:    ret134  %ext = zext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>135  %ptrs = getelementptr bfloat, ptr %base, <vscale x 2 x i64> %ext136  call void @llvm.masked.scatter.nxv2bf16(<vscale x 2 x bfloat> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)137  ret void138}139 140define void @masked_scatter_nxv2f32_zext(<vscale x 2 x float> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {141; CHECK-LABEL: masked_scatter_nxv2f32_zext:142; CHECK:       // %bb.0:143; CHECK-NEXT:    st1w { z0.d }, p0, [x0, z1.d, uxtw #2]144; CHECK-NEXT:    ret145  %ext = zext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>146  %ptrs = getelementptr float, ptr %base, <vscale x 2 x i64> %ext147  call void @llvm.masked.scatter.nxv2f32(<vscale x 2 x float> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)148  ret void149}150 151define void @masked_scatter_nxv2f64_zext(<vscale x 2 x double> %data, ptr %base, <vscale x 2 x i32> %indexes, <vscale x 2 x i1> %masks) nounwind {152; CHECK-LABEL: masked_scatter_nxv2f64_zext:153; CHECK:       // %bb.0:154; CHECK-NEXT:    st1d { z0.d }, p0, [x0, z1.d, uxtw #3]155; CHECK-NEXT:    ret156  %ext = zext <vscale x 2 x i32> %indexes to <vscale x 2 x i64>157  %ptrs = getelementptr double, ptr %base, <vscale x 2 x i64> %ext158  call void @llvm.masked.scatter.nxv2f64(<vscale x 2 x double> %data, <vscale x 2 x ptr> %ptrs, i32 0, <vscale x 2 x i1> %masks)159  ret void160}161 162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;163; scaled packed 32-bit offset164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;165 166define void @masked_scatter_nxv4i16_sext(<vscale x 4 x i16> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind {167; CHECK-LABEL: masked_scatter_nxv4i16_sext:168; CHECK:       // %bb.0:169; CHECK-NEXT:    st1h { z0.s }, p0, [x0, z1.s, sxtw #1]170; CHECK-NEXT:    ret171  %ext = sext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>172  %ptrs = getelementptr i16, ptr %base, <vscale x 4 x i64> %ext173  call void @llvm.masked.scatter.nxv4i16(<vscale x 4 x i16> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)174  ret void175}176 177define void @masked_scatter_nxv4i32_sext(<vscale x 4 x i32> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind {178; CHECK-LABEL: masked_scatter_nxv4i32_sext:179; CHECK:       // %bb.0:180; CHECK-NEXT:    st1w { z0.s }, p0, [x0, z1.s, sxtw #2]181; CHECK-NEXT:    ret182  %ext = sext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>183  %ptrs = getelementptr i32, ptr %base, <vscale x 4 x i64> %ext184  call void @llvm.masked.scatter.nxv4i32(<vscale x 4 x i32> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)185  ret void186}187 188define void @masked_scatter_nxv4f16_sext(<vscale x 4 x half> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind {189; CHECK-LABEL: masked_scatter_nxv4f16_sext:190; CHECK:       // %bb.0:191; CHECK-NEXT:    st1h { z0.s }, p0, [x0, z1.s, sxtw #1]192; CHECK-NEXT:    ret193  %ext = sext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>194  %ptrs = getelementptr half, ptr %base, <vscale x 4 x i64> %ext195  call void @llvm.masked.scatter.nxv4f16(<vscale x 4 x half> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)196  ret void197}198 199define void @masked_scatter_nxv4bf16_sext(<vscale x 4 x bfloat> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind #0 {200; CHECK-LABEL: masked_scatter_nxv4bf16_sext:201; CHECK:       // %bb.0:202; CHECK-NEXT:    st1h { z0.s }, p0, [x0, z1.s, sxtw #1]203; CHECK-NEXT:    ret204  %ext = sext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>205  %ptrs = getelementptr bfloat, ptr %base, <vscale x 4 x i64> %ext206  call void @llvm.masked.scatter.nxv4bf16(<vscale x 4 x bfloat> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)207  ret void208}209 210define void @masked_scatter_nxv4f32_sext(<vscale x 4 x float> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind #0 {211; CHECK-LABEL: masked_scatter_nxv4f32_sext:212; CHECK:       // %bb.0:213; CHECK-NEXT:    st1w { z0.s }, p0, [x0, z1.s, sxtw #2]214; CHECK-NEXT:    ret215  %ext = sext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>216  %ptrs = getelementptr float, ptr %base, <vscale x 4 x i64> %ext217  call void @llvm.masked.scatter.nxv4f32(<vscale x 4 x float> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)218  ret void219}220 221define void @masked_scatter_nxv4i16_zext(<vscale x 4 x i16> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind {222; CHECK-LABEL: masked_scatter_nxv4i16_zext:223; CHECK:       // %bb.0:224; CHECK-NEXT:    st1h { z0.s }, p0, [x0, z1.s, uxtw #1]225; CHECK-NEXT:    ret226  %ext = zext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>227  %ptrs = getelementptr i16, ptr %base, <vscale x 4 x i64> %ext228  call void @llvm.masked.scatter.nxv4i16(<vscale x 4 x i16> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)229  ret void230}231 232define void @masked_scatter_nxv4i32_zext(<vscale x 4 x i32> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind {233; CHECK-LABEL: masked_scatter_nxv4i32_zext:234; CHECK:       // %bb.0:235; CHECK-NEXT:    st1w { z0.s }, p0, [x0, z1.s, uxtw #2]236; CHECK-NEXT:    ret237  %ext = zext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>238  %ptrs = getelementptr i32, ptr %base, <vscale x 4 x i64> %ext239  call void @llvm.masked.scatter.nxv4i32(<vscale x 4 x i32> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)240  ret void241}242 243define void @masked_scatter_nxv4f16_zext(<vscale x 4 x half> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind {244; CHECK-LABEL: masked_scatter_nxv4f16_zext:245; CHECK:       // %bb.0:246; CHECK-NEXT:    st1h { z0.s }, p0, [x0, z1.s, uxtw #1]247; CHECK-NEXT:    ret248  %ext = zext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>249  %ptrs = getelementptr half, ptr %base, <vscale x 4 x i64> %ext250  call void @llvm.masked.scatter.nxv4f16(<vscale x 4 x half> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)251  ret void252}253 254define void @masked_scatter_nxv4bf16_zext(<vscale x 4 x bfloat> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind #0 {255; CHECK-LABEL: masked_scatter_nxv4bf16_zext:256; CHECK:       // %bb.0:257; CHECK-NEXT:    st1h { z0.s }, p0, [x0, z1.s, uxtw #1]258; CHECK-NEXT:    ret259  %ext = zext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>260  %ptrs = getelementptr bfloat, ptr %base, <vscale x 4 x i64> %ext261  call void @llvm.masked.scatter.nxv4bf16(<vscale x 4 x bfloat> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)262  ret void263}264 265define void @masked_scatter_nxv4f32_zext(<vscale x 4 x float> %data, ptr %base, <vscale x 4 x i32> %indexes, <vscale x 4 x i1> %masks) nounwind #0 {266; CHECK-LABEL: masked_scatter_nxv4f32_zext:267; CHECK:       // %bb.0:268; CHECK-NEXT:    st1w { z0.s }, p0, [x0, z1.s, uxtw #2]269; CHECK-NEXT:    ret270  %ext = zext <vscale x 4 x i32> %indexes to <vscale x 4 x i64>271  %ptrs = getelementptr float, ptr %base, <vscale x 4 x i64> %ext272  call void @llvm.masked.scatter.nxv4f32(<vscale x 4 x float> %data, <vscale x 4 x ptr> %ptrs, i32 0, <vscale x 4 x i1> %masks)273  ret void274}275 276declare void @llvm.masked.scatter.nxv2f16(<vscale x 2 x half>, <vscale x 2 x ptr>, i32, <vscale x 2 x i1>)277declare void @llvm.masked.scatter.nxv4f16(<vscale x 4 x half>, <vscale x 4 x ptr>, i32, <vscale x 4 x i1>)278declare void @llvm.masked.scatter.nxv4bf16(<vscale x 4 x bfloat>, <vscale x 4 x ptr>, i32, <vscale x 4 x i1>)279declare void @llvm.masked.scatter.nxv4f32(<vscale x 4 x float>, <vscale x 4 x ptr>, i32, <vscale x 4 x i1>)280declare void @llvm.masked.scatter.nxv2bf16(<vscale x 2 x bfloat>, <vscale x 2 x ptr>, i32, <vscale x 2 x i1>)281declare void @llvm.masked.scatter.nxv2f32(<vscale x 2 x float>, <vscale x 2 x ptr>, i32, <vscale x 2 x i1>)282declare void @llvm.masked.scatter.nxv2f64(<vscale x 2 x double>, <vscale x 2 x ptr>, i32, <vscale x 2 x i1>)283declare void @llvm.masked.scatter.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x ptr>, i32, <vscale x 2 x i1>)284declare void @llvm.masked.scatter.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x ptr>, i32, <vscale x 2 x i1>)285declare void @llvm.masked.scatter.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x ptr>, i32, <vscale x 2 x i1>)286declare void @llvm.masked.scatter.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x ptr>, i32, <vscale x 2 x i1>)287declare void @llvm.masked.scatter.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x ptr>, i32, <vscale x 4 x i1>)288declare void @llvm.masked.scatter.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x ptr>, i32, <vscale x 4 x i1>)289declare void @llvm.masked.scatter.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x ptr>, i32, <vscale x 4 x i1>)290attributes #0 = { "target-features"="+sve,+bf16" }291