brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 6245417 Raw
107 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve -aarch64-enable-mgather-combine=0 < %s | FileCheck %s3; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve -aarch64-enable-mgather-combine=1 < %s | FileCheck %s4 5define <vscale x 2 x i64> @masked_gather_nxv2i16(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {6; CHECK-LABEL: masked_gather_nxv2i16:7; CHECK:       // %bb.0:8; CHECK-NEXT:    ld1h { z0.d }, p0/z, [x0, z0.d, lsl #1]9; CHECK-NEXT:    ret10  %ptrs = getelementptr i16, ptr %base, <vscale x 2 x i64> %offsets11  %vals = call <vscale x 2 x i16> @llvm.masked.gather.nxv2i16(<vscale x 2 x ptr> %ptrs, i32 2, <vscale x 2 x i1> %mask, <vscale x 2 x i16> poison)12  %vals.zext = zext <vscale x 2 x i16> %vals to <vscale x 2 x i64>13  ret <vscale x 2 x i64> %vals.zext14}15 16define <vscale x 2 x i64> @masked_gather_nxv2i32(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {17; CHECK-LABEL: masked_gather_nxv2i32:18; CHECK:       // %bb.0:19; CHECK-NEXT:    ld1w { z0.d }, p0/z, [x0, z0.d, lsl #2]20; CHECK-NEXT:    ret21  %ptrs = getelementptr i32, ptr %base, <vscale x 2 x i64> %offsets22  %vals = call <vscale x 2 x i32> @llvm.masked.gather.nxv2i32(<vscale x 2 x ptr> %ptrs, i32 4, <vscale x 2 x i1> %mask, <vscale x 2 x i32> poison)23  %vals.zext = zext <vscale x 2 x i32> %vals to <vscale x 2 x i64>24  ret <vscale x 2 x i64> %vals.zext25}26 27define <vscale x 2 x i64> @masked_gather_nxv2i64(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {28; CHECK-LABEL: masked_gather_nxv2i64:29; CHECK:       // %bb.0:30; CHECK-NEXT:    ld1d { z0.d }, p0/z, [x0, z0.d, lsl #3]31; CHECK-NEXT:    ret32  %ptrs = getelementptr i64, ptr %base, <vscale x 2 x i64> %offsets33  %vals = call <vscale x 2 x i64> @llvm.masked.gather.nxv2i64(<vscale x 2 x ptr> %ptrs, i32 8, <vscale x 2 x i1> %mask, <vscale x 2 x i64> poison)34  ret <vscale x 2 x i64> %vals35}36 37define <vscale x 2 x half> @masked_gather_nxv2f16(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {38; CHECK-LABEL: masked_gather_nxv2f16:39; CHECK:       // %bb.0:40; CHECK-NEXT:    ld1h { z0.d }, p0/z, [x0, z0.d, lsl #1]41; CHECK-NEXT:    ret42  %ptrs = getelementptr half, ptr %base, <vscale x 2 x i64> %offsets43  %vals = call <vscale x 2 x half> @llvm.masked.gather.nxv2f16(<vscale x 2 x ptr> %ptrs, i32 2, <vscale x 2 x i1> %mask, <vscale x 2 x half> poison)44  ret <vscale x 2 x half> %vals45}46 47define <vscale x 2 x bfloat> @masked_gather_nxv2bf16(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) #0 {48; CHECK-LABEL: masked_gather_nxv2bf16:49; CHECK:       // %bb.0:50; CHECK-NEXT:    ld1h { z0.d }, p0/z, [x0, z0.d, lsl #1]51; CHECK-NEXT:    ret52  %ptrs = getelementptr bfloat, ptr %base, <vscale x 2 x i64> %offsets53  %vals = call <vscale x 2 x bfloat> @llvm.masked.gather.nxv2bf16(<vscale x 2 x ptr> %ptrs, i32 2, <vscale x 2 x i1> %mask, <vscale x 2 x bfloat> poison)54  ret <vscale x 2 x bfloat> %vals55}56 57define <vscale x 2 x float> @masked_gather_nxv2f32(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {58; CHECK-LABEL: masked_gather_nxv2f32:59; CHECK:       // %bb.0:60; CHECK-NEXT:    ld1w { z0.d }, p0/z, [x0, z0.d, lsl #2]61; CHECK-NEXT:    ret62  %ptrs = getelementptr float, ptr %base, <vscale x 2 x i64> %offsets63  %vals = call <vscale x 2 x float> @llvm.masked.gather.nxv2f32(<vscale x 2 x ptr> %ptrs, i32 4, <vscale x 2 x i1> %mask, <vscale x 2 x float> poison)64  ret <vscale x 2 x float> %vals65}66 67define <vscale x 2 x double> @masked_gather_nxv2f64(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {68; CHECK-LABEL: masked_gather_nxv2f64:69; CHECK:       // %bb.0:70; CHECK-NEXT:    ld1d { z0.d }, p0/z, [x0, z0.d, lsl #3]71; CHECK-NEXT:    ret72  %ptrs = getelementptr double, ptr %base, <vscale x 2 x i64> %offsets73  %vals.sext = call <vscale x 2 x double> @llvm.masked.gather.nxv2f64(<vscale x 2 x ptr> %ptrs, i32 8, <vscale x 2 x i1> %mask, <vscale x 2 x double> poison)74  ret <vscale x 2 x double> %vals.sext75}76 77define <vscale x 2 x i64> @masked_sgather_nxv2i16(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {78; CHECK-LABEL: masked_sgather_nxv2i16:79; CHECK:       // %bb.0:80; CHECK-NEXT:    ld1sh { z0.d }, p0/z, [x0, z0.d, lsl #1]81; CHECK-NEXT:    ret82  %ptrs = getelementptr i16, ptr %base, <vscale x 2 x i64> %offsets83  %vals = call <vscale x 2 x i16> @llvm.masked.gather.nxv2i16(<vscale x 2 x ptr> %ptrs, i32 2, <vscale x 2 x i1> %mask, <vscale x 2 x i16> poison)84  %vals.sext = sext <vscale x 2 x i16> %vals to <vscale x 2 x i64>85  ret <vscale x 2 x i64> %vals.sext86}87 88define <vscale x 2 x i64> @masked_sgather_nxv2i32(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {89; CHECK-LABEL: masked_sgather_nxv2i32:90; CHECK:       // %bb.0:91; CHECK-NEXT:    ld1sw { z0.d }, p0/z, [x0, z0.d, lsl #2]92; CHECK-NEXT:    ret93  %ptrs = getelementptr i32, ptr %base, <vscale x 2 x i64> %offsets94  %vals = call <vscale x 2 x i32> @llvm.masked.gather.nxv2i32(<vscale x 2 x ptr> %ptrs, i32 4, <vscale x 2 x i1> %mask, <vscale x 2 x i32> poison)95  %vals.sext = sext <vscale x 2 x i32> %vals to <vscale x 2 x i64>96  ret <vscale x 2 x i64> %vals.sext97}98 99declare <vscale x 2 x i16> @llvm.masked.gather.nxv2i16(<vscale x 2 x ptr>, i32, <vscale x 2 x i1>, <vscale x 2 x i16>)100declare <vscale x 2 x i32> @llvm.masked.gather.nxv2i32(<vscale x 2 x ptr>, i32, <vscale x 2 x i1>, <vscale x 2 x i32>)101declare <vscale x 2 x i64> @llvm.masked.gather.nxv2i64(<vscale x 2 x ptr>, i32, <vscale x 2 x i1>, <vscale x 2 x i64>)102declare <vscale x 2 x half> @llvm.masked.gather.nxv2f16(<vscale x 2 x ptr>, i32, <vscale x 2 x i1>, <vscale x 2 x half>)103declare <vscale x 2 x bfloat> @llvm.masked.gather.nxv2bf16(<vscale x 2 x ptr>, i32, <vscale x 2 x i1>, <vscale x 2 x bfloat>)104declare <vscale x 2 x float> @llvm.masked.gather.nxv2f32(<vscale x 2 x ptr>, i32, <vscale x 2 x i1>, <vscale x 2 x float>)105declare <vscale x 2 x double> @llvm.masked.gather.nxv2f64(<vscale x 2 x ptr>, i32, <vscale x 2 x i1>, <vscale x 2 x double>)106attributes #0 = { "target-features"="+sve,+bf16" }107