brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.4 KiB · 74ae242 Raw
253 lines · plain
1// RUN: mlir-opt %s --convert-vector-to-llvm="enable-x86vector" --convert-to-llvm -reconcile-unrealized-casts \2// RUN: | mlir-translate --mlir-to-llvmir \3// RUN: | FileCheck %s4 5// CHECK-LABEL: define <16 x float> @LLVM_x86_avx512_mask_ps_5126func.func @LLVM_x86_avx512_mask_ps_512(7    %src: vector<16xf32>, %a: vector<16xf32>, %b: vector<16xf32>,8    %imm: i16, %scale_k: i16)9  -> (vector<16xf32>)10{11  %rnd_k = arith.constant 15 : i3212  %rnd = arith.constant 42 : i3213  // CHECK: call <16 x float> @llvm.x86.avx512.mask.rndscale.ps.512(<16 x float>14  %0 = x86vector.avx512.mask.rndscale %src, %rnd_k, %a, %imm, %rnd : vector<16xf32>15  // CHECK: call <16 x float> @llvm.x86.avx512.mask.scalef.ps.512(<16 x float>16  %1 = x86vector.avx512.mask.scalef %0, %a, %b, %scale_k, %rnd : vector<16xf32>17  return %1 : vector<16xf32>18}19 20// CHECK-LABEL: define <8 x double> @LLVM_x86_avx512_mask_pd_51221func.func @LLVM_x86_avx512_mask_pd_512(22    %src: vector<8xf64>, %a: vector<8xf64>, %b: vector<8xf64>,23    %imm: i8, %scale_k: i8)24  -> (vector<8xf64>)25{26  %rnd_k = arith.constant 15 : i3227  %rnd = arith.constant 42 : i3228  // CHECK: call <8 x double> @llvm.x86.avx512.mask.rndscale.pd.512(<8 x double>29  %0 = x86vector.avx512.mask.rndscale %src, %rnd_k, %a, %imm, %rnd : vector<8xf64>30  // CHECK: call <8 x double> @llvm.x86.avx512.mask.scalef.pd.512(<8 x double>31  %1 = x86vector.avx512.mask.scalef %0, %a, %b, %scale_k, %rnd : vector<8xf64>32  return %1 : vector<8xf64>33}34 35// CHECK-LABEL: define <16 x float> @LLVM_x86_mask_compress36func.func @LLVM_x86_mask_compress(%k: vector<16xi1>, %a: vector<16xf32>)37  -> vector<16xf32>38{39  // CHECK: call <16 x float> @llvm.x86.avx512.mask.compress.v16f32(40  %0 = x86vector.avx512.mask.compress %k, %a, %a : vector<16xf32>, vector<16xf32>41  return %0 : vector<16xf32>42}43 44// CHECK-LABEL: define { <16 x i1>, <16 x i1> } @LLVM_x86_vp2intersect_d_51245func.func @LLVM_x86_vp2intersect_d_512(%a: vector<16xi32>, %b: vector<16xi32>)46  -> (vector<16xi1>, vector<16xi1>)47{48  // CHECK: call { <16 x i1>, <16 x i1> } @llvm.x86.avx512.vp2intersect.d.512(<16 x i32>49  %0, %1 = x86vector.avx512.vp2intersect %a, %b : vector<16xi32>50  return %0, %1 : vector<16xi1>, vector<16xi1>51}52 53// CHECK-LABEL: define { <8 x i1>, <8 x i1> } @LLVM_x86_vp2intersect_q_51254func.func @LLVM_x86_vp2intersect_q_512(%a: vector<8xi64>, %b: vector<8xi64>)55  -> (vector<8 x i1>, vector<8 x i1>)56{57  // CHECK: call { <8 x i1>, <8 x i1> } @llvm.x86.avx512.vp2intersect.q.512(<8 x i64>58  %0, %1 = x86vector.avx512.vp2intersect %a, %b : vector<8xi64>59  return %0, %1 : vector<8 x i1>, vector<8 x i1>60}61 62// CHECK-LABEL: define <4 x float> @LLVM_x86_avx512bf16_dpbf16ps_12863func.func @LLVM_x86_avx512bf16_dpbf16ps_128(64    %src: vector<4xf32>, %a: vector<8xbf16>, %b: vector<8xbf16>65  ) -> vector<4xf32>66{67  // CHECK: call <4 x float> @llvm.x86.avx512bf16.dpbf16ps.128(68  %0 = x86vector.avx512.dot %src, %a, %b : vector<8xbf16> -> vector<4xf32>69  return %0 : vector<4xf32>70}71 72// CHECK-LABEL: define <8 x float> @LLVM_x86_avx512bf16_dpbf16ps_25673func.func @LLVM_x86_avx512bf16_dpbf16ps_256(74    %src: vector<8xf32>, %a: vector<16xbf16>, %b: vector<16xbf16>75  ) -> vector<8xf32>76{77  // CHECK: call <8 x float> @llvm.x86.avx512bf16.dpbf16ps.256(78  %0 = x86vector.avx512.dot %src, %a, %b : vector<16xbf16> -> vector<8xf32>79  return %0 : vector<8xf32>80}81 82// CHECK-LABEL: define <16 x float> @LLVM_x86_avx512bf16_dpbf16ps_51283func.func @LLVM_x86_avx512bf16_dpbf16ps_512(84    %src: vector<16xf32>, %a: vector<32xbf16>, %b: vector<32xbf16>85  ) -> vector<16xf32>86{87  // CHECK: call <16 x float> @llvm.x86.avx512bf16.dpbf16ps.512(88  %0 = x86vector.avx512.dot %src, %a, %b : vector<32xbf16> -> vector<16xf32>89  return %0 : vector<16xf32>90}91 92// CHECK-LABEL: define <8 x bfloat> @LLVM_x86_avx512bf16_cvtneps2bf16_25693func.func @LLVM_x86_avx512bf16_cvtneps2bf16_256(94  %a: vector<8xf32>) -> vector<8xbf16>95{96  // CHECK: call <8 x bfloat> @llvm.x86.avx512bf16.cvtneps2bf16.256(97  %0 = x86vector.avx512.cvt.packed.f32_to_bf16 %a98    : vector<8xf32> -> vector<8xbf16>99  return %0 : vector<8xbf16>100}101 102// CHECK-LABEL: define <16 x bfloat> @LLVM_x86_avx512bf16_cvtneps2bf16_512103func.func @LLVM_x86_avx512bf16_cvtneps2bf16_512(104  %a: vector<16xf32>) -> vector<16xbf16>105{106  // CHECK: call <16 x bfloat> @llvm.x86.avx512bf16.cvtneps2bf16.512(107  %0 = x86vector.avx512.cvt.packed.f32_to_bf16 %a108    : vector<16xf32> -> vector<16xbf16>109  return %0 : vector<16xbf16>110}111 112// CHECK-LABEL: define <4 x float> @LLVM_x86_avxbf16_vcvtneebf162ps128113func.func @LLVM_x86_avxbf16_vcvtneebf162ps128(114  %a: memref<8xbf16>) -> vector<4xf32>115{116  // CHECK: call <4 x float> @llvm.x86.vcvtneebf162ps128(117  %0 = x86vector.avx.cvt.packed.even.indexed_to_f32 %a : memref<8xbf16> -> vector<4xf32>118  return %0 : vector<4xf32>119}120 121// CHECK-LABEL: define <8 x float> @LLVM_x86_avxbf16_vcvtneebf162ps256122func.func @LLVM_x86_avxbf16_vcvtneebf162ps256(123  %a: memref<16xbf16>) -> vector<8xf32>124{125  // CHECK: call <8 x float> @llvm.x86.vcvtneebf162ps256(126  %0 = x86vector.avx.cvt.packed.even.indexed_to_f32 %a : memref<16xbf16> -> vector<8xf32>127  return %0 : vector<8xf32>128}129 130// CHECK-LABEL: define <4 x float> @LLVM_x86_avxbf16_vcvtneobf162ps128131func.func @LLVM_x86_avxbf16_vcvtneobf162ps128(132  %a: memref<8xbf16>) -> vector<4xf32>133{134  // CHECK: call <4 x float> @llvm.x86.vcvtneobf162ps128(135  %0 = x86vector.avx.cvt.packed.odd.indexed_to_f32 %a : memref<8xbf16> -> vector<4xf32>136  return %0 : vector<4xf32>137}138 139// CHECK-LABEL: define <8 x float> @LLVM_x86_avxbf16_vcvtneobf162ps256140func.func @LLVM_x86_avxbf16_vcvtneobf162ps256(141  %a: memref<16xbf16>) -> vector<8xf32>142{143  // CHECK: call <8 x float> @llvm.x86.vcvtneobf162ps256(144  %0 = x86vector.avx.cvt.packed.odd.indexed_to_f32 %a : memref<16xbf16> -> vector<8xf32>145  return %0 : vector<8xf32>146}147 148// CHECK-LABEL: define <4 x float> @LLVM_x86_avxbf16_vbcstnebf162ps128149func.func @LLVM_x86_avxbf16_vbcstnebf162ps128(150  %a: memref<1xbf16>) -> vector<4xf32>151{152  // CHECK: call <4 x float> @llvm.x86.vbcstnebf162ps128(153  %0 = x86vector.avx.bcst_to_f32.packed %a : memref<1xbf16> -> vector<4xf32>154  return %0 : vector<4xf32>155}156 157// CHECK-LABEL: define <8 x float> @LLVM_x86_avxbf16_vbcstnebf162ps256158func.func @LLVM_x86_avxbf16_vbcstnebf162ps256(159  %a: memref<1xbf16>) -> vector<8xf32>160{161  // CHECK: call <8 x float> @llvm.x86.vbcstnebf162ps256(162  %0 = x86vector.avx.bcst_to_f32.packed %a : memref<1xbf16> -> vector<8xf32>163  return %0 : vector<8xf32>164}165 166// CHECK-LABEL: define <4 x float> @LLVM_x86_avxf16_vcvtneeph2ps128167func.func @LLVM_x86_avxf16_vcvtneeph2ps128(168  %a: memref<8xf16>) -> vector<4xf32>169{170  // CHECK: call <4 x float> @llvm.x86.vcvtneeph2ps128(171  %0 = x86vector.avx.cvt.packed.even.indexed_to_f32 %a : memref<8xf16> -> vector<4xf32>172  return %0 : vector<4xf32>173}174 175// CHECK-LABEL: define <8 x float> @LLVM_x86_avxf16_vcvtneeph2ps256176func.func @LLVM_x86_avxf16_vcvtneeph2ps256(177  %a: memref<16xf16>) -> vector<8xf32>178{179  // CHECK: call <8 x float> @llvm.x86.vcvtneeph2ps256(180  %0 = x86vector.avx.cvt.packed.even.indexed_to_f32 %a : memref<16xf16> -> vector<8xf32>181  return %0 : vector<8xf32>182}183 184// CHECK-LABEL: define <4 x float> @LLVM_x86_avxf16_vcvtneoph2ps128185func.func @LLVM_x86_avxf16_vcvtneoph2ps128(186  %a: memref<8xf16>) -> vector<4xf32>187{188  // CHECK: call <4 x float> @llvm.x86.vcvtneoph2ps128(189  %0 = x86vector.avx.cvt.packed.odd.indexed_to_f32 %a : memref<8xf16> -> vector<4xf32>190  return %0 : vector<4xf32>191}192 193// CHECK-LABEL: define <8 x float> @LLVM_x86_avxf16_vcvtneoph2ps256194func.func @LLVM_x86_avxf16_vcvtneoph2ps256(195  %a: memref<16xf16>) -> vector<8xf32>196{197  // CHECK: call <8 x float> @llvm.x86.vcvtneoph2ps256(198  %0 = x86vector.avx.cvt.packed.odd.indexed_to_f32 %a : memref<16xf16> -> vector<8xf32>199  return %0 : vector<8xf32>200}201 202// CHECK-LABEL: define <4 x float> @LLVM_x86_avxf16_vbcstnesh2ps128203func.func @LLVM_x86_avxf16_vbcstnesh2ps128(204  %a: memref<1xf16>) -> vector<4xf32>205{206  // CHECK: call <4 x float> @llvm.x86.vbcstnesh2ps128(207  %0 = x86vector.avx.bcst_to_f32.packed %a : memref<1xf16> -> vector<4xf32>208  return %0 : vector<4xf32>209}210 211// CHECK-LABEL: define <8 x float> @LLVM_x86_avxf16_vbcstnesh2ps256212func.func @LLVM_x86_avxf16_vbcstnesh2ps256(213  %a: memref<1xf16>) -> vector<8xf32>214{215  // CHECK: call <8 x float> @llvm.x86.vbcstnesh2ps256(216  %0 = x86vector.avx.bcst_to_f32.packed %a : memref<1xf16> -> vector<8xf32>217  return %0 : vector<8xf32>218}219 220// CHECK-LABEL: define <8 x float> @LLVM_x86_avx_rsqrt_ps_256221func.func @LLVM_x86_avx_rsqrt_ps_256(%a: vector <8xf32>) -> vector<8xf32>222{223  // CHECK: call <8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float>224  %0 = x86vector.avx.rsqrt %a : vector<8xf32>225  return %0 : vector<8xf32>226}227 228// CHECK-LABEL: define <8 x float> @LLVM_x86_avx_dp_ps_256229func.func @LLVM_x86_avx_dp_ps_256(230    %a: vector<8xf32>, %b: vector<8xf32>231  ) -> vector<8xf32>232{233  // CHECK: call <8 x float> @llvm.x86.avx.dp.ps.256(234  %0 = x86vector.avx.intr.dot %a, %b : vector<8xf32>235  return %0 : vector<8xf32>236}237 238// CHECK-LABEL: define <4 x i32> @LLVM_x86_avx2_vpdpbssd_128239func.func @LLVM_x86_avx2_vpdpbssd_128(%w: vector<4xi32>, %a: vector<16xi8>,240    %b: vector<16xi8>) -> vector<4xi32> {241  // CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbssd.128(242  %0 = x86vector.avx.dot.i8 %w, %a, %b : vector<16xi8> -> vector<4xi32>243  return %0 : vector<4xi32>244}245 246// CHECK-LABEL: define <8 x i32> @LLVM_x86_avx2_vpdpbssd_256247func.func @LLVM_x86_avx2_vpdpbssd_256(%w: vector<8xi32>, %a: vector<32xi8>,248    %b: vector<32xi8>) -> vector<8xi32> {249  // CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbssd.256(250  %0 = x86vector.avx.dot.i8 %w, %a, %b : vector<32xi8> -> vector<8xi32>251  return %0 : vector<8xi32>252}253