brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · 0ed4dd1 Raw
139 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_nxv2i8(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {6; CHECK-LABEL: masked_gather_nxv2i8:7; CHECK:       // %bb.0:8; CHECK-NEXT:    ld1b { z0.d }, p0/z, [x0, z0.d]9; CHECK-NEXT:    ret10  %ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets11  %vals = call <vscale x 2 x i8> @llvm.masked.gather.nxv2i8(<vscale x 2 x ptr> %ptrs, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i8> poison)12  %vals.zext = zext <vscale x 2 x i8> %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_nxv2i16(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {17; CHECK-LABEL: masked_gather_nxv2i16:18; CHECK:       // %bb.0:19; CHECK-NEXT:    ld1h { z0.d }, p0/z, [x0, z0.d]20; CHECK-NEXT:    ret21  %byte_ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets22  %ptrs = bitcast <vscale x 2 x ptr> %byte_ptrs to <vscale x 2 x ptr>23  %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)24  %vals.zext = zext <vscale x 2 x i16> %vals to <vscale x 2 x i64>25  ret <vscale x 2 x i64> %vals.zext26}27 28define <vscale x 2 x i64> @masked_gather_nxv2i32(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {29; CHECK-LABEL: masked_gather_nxv2i32:30; CHECK:       // %bb.0:31; CHECK-NEXT:    ld1w { z0.d }, p0/z, [x0, z0.d]32; CHECK-NEXT:    ret33  %byte_ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets34  %ptrs = bitcast <vscale x 2 x ptr> %byte_ptrs to <vscale x 2 x ptr>35  %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)36  %vals.zext = zext <vscale x 2 x i32> %vals to <vscale x 2 x i64>37  ret <vscale x 2 x i64> %vals.zext38}39 40define <vscale x 2 x i64> @masked_gather_nxv2i64(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {41; CHECK-LABEL: masked_gather_nxv2i64:42; CHECK:       // %bb.0:43; CHECK-NEXT:    ld1d { z0.d }, p0/z, [x0, z0.d]44; CHECK-NEXT:    ret45  %byte_ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets46  %ptrs = bitcast <vscale x 2 x ptr> %byte_ptrs to <vscale x 2 x ptr>47  %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)48  ret <vscale x 2 x i64> %vals49}50 51define <vscale x 2 x half> @masked_gather_nxv2f16(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {52; CHECK-LABEL: masked_gather_nxv2f16:53; CHECK:       // %bb.0:54; CHECK-NEXT:    ld1h { z0.d }, p0/z, [x0, z0.d]55; CHECK-NEXT:    ret56  %byte_ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets57  %ptrs = bitcast <vscale x 2 x ptr> %byte_ptrs to <vscale x 2 x ptr>58  %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)59  ret <vscale x 2 x half> %vals60}61 62define <vscale x 2 x bfloat> @masked_gather_nxv2bf16(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) #0 {63; CHECK-LABEL: masked_gather_nxv2bf16:64; CHECK:       // %bb.0:65; CHECK-NEXT:    ld1h { z0.d }, p0/z, [x0, z0.d]66; CHECK-NEXT:    ret67  %byte_ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets68  %ptrs = bitcast <vscale x 2 x ptr> %byte_ptrs to <vscale x 2 x ptr>69  %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)70  ret <vscale x 2 x bfloat> %vals71}72 73define <vscale x 2 x float> @masked_gather_nxv2f32(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {74; CHECK-LABEL: masked_gather_nxv2f32:75; CHECK:       // %bb.0:76; CHECK-NEXT:    ld1w { z0.d }, p0/z, [x0, z0.d]77; CHECK-NEXT:    ret78  %byte_ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets79  %ptrs = bitcast <vscale x 2 x ptr> %byte_ptrs to <vscale x 2 x ptr>80  %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)81  ret <vscale x 2 x float> %vals82}83 84define <vscale x 2 x double> @masked_gather_nxv2f64(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {85; CHECK-LABEL: masked_gather_nxv2f64:86; CHECK:       // %bb.0:87; CHECK-NEXT:    ld1d { z0.d }, p0/z, [x0, z0.d]88; CHECK-NEXT:    ret89  %byte_ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets90  %ptrs = bitcast <vscale x 2 x ptr> %byte_ptrs to <vscale x 2 x ptr>91  %vals = 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)92  ret <vscale x 2 x double> %vals93}94 95define <vscale x 2 x i64> @masked_sgather_nxv2i8(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {96; CHECK-LABEL: masked_sgather_nxv2i8:97; CHECK:       // %bb.0:98; CHECK-NEXT:    ld1sb { z0.d }, p0/z, [x0, z0.d]99; CHECK-NEXT:    ret100  %ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets101  %vals = call <vscale x 2 x i8> @llvm.masked.gather.nxv2i8(<vscale x 2 x ptr> %ptrs, i32 1, <vscale x 2 x i1> %mask, <vscale x 2 x i8> poison)102  %vals.sext = sext <vscale x 2 x i8> %vals to <vscale x 2 x i64>103  ret <vscale x 2 x i64> %vals.sext104}105 106define <vscale x 2 x i64> @masked_sgather_nxv2i16(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {107; CHECK-LABEL: masked_sgather_nxv2i16:108; CHECK:       // %bb.0:109; CHECK-NEXT:    ld1sh { z0.d }, p0/z, [x0, z0.d]110; CHECK-NEXT:    ret111  %byte_ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets112  %ptrs = bitcast <vscale x 2 x ptr> %byte_ptrs to <vscale x 2 x ptr>113  %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)114  %vals.sext = sext <vscale x 2 x i16> %vals to <vscale x 2 x i64>115  ret <vscale x 2 x i64> %vals.sext116}117 118define <vscale x 2 x i64> @masked_sgather_nxv2i32(ptr %base, <vscale x 2 x i64> %offsets, <vscale x 2 x i1> %mask) {119; CHECK-LABEL: masked_sgather_nxv2i32:120; CHECK:       // %bb.0:121; CHECK-NEXT:    ld1sw { z0.d }, p0/z, [x0, z0.d]122; CHECK-NEXT:    ret123  %byte_ptrs = getelementptr i8, ptr %base, <vscale x 2 x i64> %offsets124  %ptrs = bitcast <vscale x 2 x ptr> %byte_ptrs to <vscale x 2 x ptr>125  %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)126  %vals.sext = sext <vscale x 2 x i32> %vals to <vscale x 2 x i64>127  ret <vscale x 2 x i64> %vals.sext128}129 130declare <vscale x 2 x i8> @llvm.masked.gather.nxv2i8(<vscale x 2 x ptr>, i32, <vscale x 2 x i1>, <vscale x 2 x i8>)131declare <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>)132declare <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>)133declare <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>)134declare <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>)135declare <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>)136declare <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>)137declare <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>)138attributes #0 = { "target-features"="+sve,+bf16" }139