brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.8 KiB · 4ef242b Raw
326 lines · plain
1// RUN: mlir-opt -mlir-disable-threading -test-spirv-op-availability %s | FileCheck %s2 3// CHECK-LABEL: iadd4func.func @iadd(%arg: i32) -> i32 {5  // CHECK: min version: v1.06  // CHECK: max version: v1.67  // CHECK: extensions: [ ]8  // CHECK: capabilities: [ ]9  %0 = spirv.IAdd %arg, %arg: i3210  return %0: i3211}12 13// CHECK: atomic_compare_exchange_weak14func.func @atomic_compare_exchange_weak(%ptr: !spirv.ptr<i32, Workgroup>, %value: i32, %comparator: i32) -> i32 {15  // CHECK: min version: v1.016  // CHECK: max version: v1.317  // CHECK: extensions: [ ]18  // CHECK: capabilities: [ [Kernel] ]19  %0 = spirv.AtomicCompareExchangeWeak <Workgroup> <Release> <Acquire> %ptr, %value, %comparator: !spirv.ptr<i32, Workgroup>20  return %0: i3221}22 23// CHECK-LABEL: subgroup_ballot24func.func @subgroup_ballot(%predicate: i1) -> vector<4xi32> {25  // CHECK: min version: v1.326  // CHECK: max version: v1.627  // CHECK: extensions: [ ]28  // CHECK: capabilities: [ [GroupNonUniformBallot] ]29  %0 = spirv.GroupNonUniformBallot <Workgroup> %predicate : vector<4xi32>30  return %0: vector<4xi32>31}32 33// CHECK-LABEL: module_logical_glsl45034func.func @module_logical_glsl450() {35  // CHECK: spirv.module min version: v1.036  // CHECK: spirv.module max version: v1.637  // CHECK: spirv.module extensions: [ ]38  // CHECK: spirv.module capabilities: [ [Shader] ]39  spirv.module Logical GLSL450 { }40  return41}42 43// CHECK-LABEL: module_physical_storage_buffer64_vulkan44func.func @module_physical_storage_buffer64_vulkan() {45  // CHECK: spirv.module min version: v1.046  // CHECK: spirv.module max version: v1.647  // CHECK: spirv.module extensions: [ [SPV_EXT_physical_storage_buffer, SPV_KHR_physical_storage_buffer] [SPV_KHR_vulkan_memory_model] ]48  // CHECK: spirv.module capabilities: [ [PhysicalStorageBufferAddresses] [VulkanMemoryModel] ]49  spirv.module PhysicalStorageBuffer64 Vulkan { }50  return51}52 53//===----------------------------------------------------------------------===//54// Integer Dot Product ops55//===----------------------------------------------------------------------===//56 57// CHECK-LABEL: sdot_scalar_i32_i3258func.func @sdot_scalar_i32_i32(%a: i32) -> i32 {59  // CHECK: min version: v1.060  // CHECK: max version: v1.661  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]62  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8BitPacked] ]63  %r = spirv.SDot %a, %a, <PackedVectorFormat4x8Bit>: i32 -> i3264  return %r: i3265}66 67// CHECK-LABEL: sdot_vector_4xi8_i6468func.func @sdot_vector_4xi8_i64(%a: vector<4xi8>) -> i64 {69  // CHECK: min version: v1.070  // CHECK: max version: v1.671  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]72  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8Bit] ]73  %r = spirv.SDot %a, %a: vector<4xi8> -> i6474  return %r: i6475}76 77// CHECK-LABEL: sdot_vector_4xi16_i6478func.func @sdot_vector_4xi16_i64(%a: vector<4xi16>) -> i64 {79  // CHECK: min version: v1.080  // CHECK: max version: v1.681  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]82  // CHECK: capabilities: [ [DotProduct] [DotProductInputAll] ]83  %r = spirv.SDot %a, %a: vector<4xi16> -> i6484  return %r: i6485}86 87// CHECK-LABEL: sudot_scalar_i32_i3288func.func @sudot_scalar_i32_i32(%a: i32) -> i32 {89  // CHECK: min version: v1.090  // CHECK: max version: v1.691  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]92  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8BitPacked] ]93  %r = spirv.SUDot %a, %a, <PackedVectorFormat4x8Bit>: i32 -> i3294  return %r: i3295}96 97// CHECK-LABEL: sudot_vector_4xi8_i6498func.func @sudot_vector_4xi8_i64(%a: vector<4xi8>) -> i64 {99  // CHECK: min version: v1.0100  // CHECK: max version: v1.6101  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]102  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8Bit] ]103  %r = spirv.SUDot %a, %a: vector<4xi8> -> i64104  return %r: i64105}106 107// CHECK-LABEL: sudot_vector_4xi16_i64108func.func @sudot_vector_4xi16_i64(%a: vector<4xi16>) -> i64 {109  // CHECK: min version: v1.0110  // CHECK: max version: v1.6111  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]112  // CHECK: capabilities: [ [DotProduct] [DotProductInputAll] ]113  %r = spirv.SUDot %a, %a: vector<4xi16> -> i64114  return %r: i64115}116 117// CHECK-LABEL: udot_scalar_i32_i32118func.func @udot_scalar_i32_i32(%a: i32) -> i32 {119  // CHECK: min version: v1.0120  // CHECK: max version: v1.6121  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]122  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8BitPacked] ]123  %r = spirv.UDot %a, %a, <PackedVectorFormat4x8Bit>: i32 -> i32124  return %r: i32125}126 127// CHECK-LABEL: udot_vector_4xi8_i64128func.func @udot_vector_4xi8_i64(%a: vector<4xi8>) -> i64 {129  // CHECK: min version: v1.0130  // CHECK: max version: v1.6131  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]132  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8Bit] ]133  %r = spirv.UDot %a, %a: vector<4xi8> -> i64134  return %r: i64135}136 137// CHECK-LABEL: udot_vector_4xi16_i64138func.func @udot_vector_4xi16_i64(%a: vector<4xi16>) -> i64 {139  // CHECK: min version: v1.0140  // CHECK: max version: v1.6141  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]142  // CHECK: capabilities: [ [DotProduct] [DotProductInputAll] ]143  %r = spirv.UDot %a, %a: vector<4xi16> -> i64144  return %r: i64145}146 147// CHECK-LABEL: sdot_acc_sat_scalar_i32_i32148func.func @sdot_acc_sat_scalar_i32_i32(%a: i32) -> i32 {149  // CHECK: min version: v1.0150  // CHECK: max version: v1.6151  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]152  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8BitPacked] ]153  %r = spirv.SDotAccSat %a, %a, %a, <PackedVectorFormat4x8Bit>: i32 -> i32154  return %r: i32155}156 157// CHECK-LABEL: sdot_acc_sat_vector_4xi8_i64158func.func @sdot_acc_sat_vector_4xi8_i64(%a: vector<4xi8>, %acc: i64) -> i64 {159  // CHECK: min version: v1.0160  // CHECK: max version: v1.6161  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]162  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8Bit] ]163  %r = spirv.SDotAccSat %a, %a, %acc: vector<4xi8> -> i64164  return %r: i64165}166 167// CHECK-LABEL: sdot_acc_sat_vector_4xi16_i64168func.func @sdot_acc_sat_vector_4xi16_i64(%a: vector<4xi16>, %acc: i64) -> i64 {169  // CHECK: min version: v1.0170  // CHECK: max version: v1.6171  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]172  // CHECK: capabilities: [ [DotProduct] [DotProductInputAll] ]173  %r = spirv.SDotAccSat %a, %a, %acc: vector<4xi16> -> i64174  return %r: i64175}176 177// CHECK-LABEL: sudot_acc_sat_scalar_i32_i32178func.func @sudot_acc_sat_scalar_i32_i32(%a: i32) -> i32 {179  // CHECK: min version: v1.0180  // CHECK: max version: v1.6181  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]182  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8BitPacked] ]183  %r = spirv.SUDotAccSat %a, %a, %a, <PackedVectorFormat4x8Bit>: i32 -> i32184  return %r: i32185}186 187// CHECK-LABEL: sudot_acc_sat_vector_4xi8_i64188func.func @sudot_acc_sat_vector_4xi8_i64(%a: vector<4xi8>, %acc: i64) -> i64 {189  // CHECK: min version: v1.0190  // CHECK: max version: v1.6191  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]192  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8Bit] ]193  %r = spirv.SUDotAccSat %a, %a, %acc: vector<4xi8> -> i64194  return %r: i64195}196 197// CHECK-LABEL: sudot_acc_sat_vector_4xi16_i64198func.func @sudot_acc_sat_vector_4xi16_i64(%a: vector<4xi16>, %acc: i64) -> i64 {199  // CHECK: min version: v1.0200  // CHECK: max version: v1.6201  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]202  // CHECK: capabilities: [ [DotProduct] [DotProductInputAll] ]203  %r = spirv.SUDotAccSat %a, %a, %acc: vector<4xi16> -> i64204  return %r: i64205}206 207// CHECK-LABEL: udot_acc_sat_scalar_i32_i32208func.func @udot_acc_sat_scalar_i32_i32(%a: i32) -> i32 {209  // CHECK: min version: v1.0210  // CHECK: max version: v1.6211  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]212  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8BitPacked] ]213  %r = spirv.UDotAccSat %a, %a, %a, <PackedVectorFormat4x8Bit>: i32 -> i32214  return %r: i32215}216 217// CHECK-LABEL: udot_acc_sat_vector_4xi8_i64218func.func @udot_acc_sat_vector_4xi8_i64(%a: vector<4xi8>, %acc: i64) -> i64 {219  // CHECK: min version: v1.0220  // CHECK: max version: v1.6221  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]222  // CHECK: capabilities: [ [DotProduct] [DotProductInput4x8Bit] ]223  %r = spirv.UDotAccSat %a, %a, %acc: vector<4xi8> -> i64224  return %r: i64225}226 227// CHECK-LABEL: udot_acc_sat_vector_4xi16_i64228func.func @udot_acc_sat_vector_4xi16_i64(%a: vector<4xi16>, %acc: i64) -> i64 {229  // CHECK: min version: v1.0230  // CHECK: max version: v1.6231  // CHECK: extensions: [ [SPV_KHR_integer_dot_product] ]232  // CHECK: capabilities: [ [DotProduct] [DotProductInputAll] ]233  %r = spirv.UDotAccSat %a, %a, %acc: vector<4xi16> -> i64234  return %r: i64235}236 237//===----------------------------------------------------------------------===//238// Dot Product op with bfloat16239//===----------------------------------------------------------------------===//240 241// CHECK-LABEL: dot_vector_4xbf16_bf16242func.func @dot_vector_4xbf16_bf16(%a: vector<4xbf16>, %b: vector<4xbf16>) -> bf16 {243  // CHECK: min version: v1.0244  // CHECK: max version: v1.6245  // CHECK: extensions: [ [SPV_KHR_bfloat16] ]246  // CHECK: capabilities: [ [BFloat16DotProductKHR] ]247  %r = spirv.Dot %a, %a: vector<4xbf16> -> bf16248  return %r: bf16249}250 251//===----------------------------------------------------------------------===//252// Primitive ops253//===----------------------------------------------------------------------===//254 255// CHECK-LABEL: emit_vertex256func.func @emit_vertex() -> () {257  // CHECK: min version: v1.0258  // CHECK: max version: v1.6259  // CHECK: capabilities: [ [Geometry] ]260  spirv.EmitVertex261  return262}263 264// CHECK-LABEL: end_primitive265func.func @end_primitive() -> () {266  // CHECK: min version: v1.0267  // CHECK: max version: v1.6268  // CHECK: capabilities: [ [Geometry] ]269  spirv.EndPrimitive270  return271}272 273//===----------------------------------------------------------------------===//274// Mesh ops275//===----------------------------------------------------------------------===//276 277// CHECK-LABEL: emit_mesh_tasks278func.func @emit_mesh_tasks(%0 : i32) -> () {279  // CHECK: min version: v1.4280  // CHECK: max version: v1.6281  // CHECK: extensions: [ [SPV_EXT_mesh_shader] ]282  // CHECK: capabilities: [ [MeshShadingEXT] ]283  spirv.EXT.EmitMeshTasks %0, %0, %0 : i32, i32, i32284}285 286// CHECK-LABEL: set_mesh_outputs287func.func @set_mesh_outputs(%0 : i32, %1 : i32) -> () {288  // CHECK: min version: v1.4289  // CHECK: max version: v1.6290  // CHECK: extensions: [ [SPV_EXT_mesh_shader] ]291  // CHECK: capabilities: [ [MeshShadingEXT] ]292  spirv.EXT.SetMeshOutputs %0, %1 : i32, i32293  spirv.Return294}295 296//===----------------------------------------------------------------------===//297// Replicated Composite Constant op298//===----------------------------------------------------------------------===//299 300// CHECK-LABEL: constant_composite_replicate301func.func @constant_composite_replicate() -> () {302  // CHECK: min version: v1.0303  // CHECK: max version: v1.6304  // CHECK: extensions: [ [SPV_EXT_replicated_composites] ]305  // CHECK: capabilities: [ [ReplicatedCompositesEXT] ]306  %0 = spirv.EXT.ConstantCompositeReplicate [1 : i32] : vector<2xi32>307  spirv.Return308}309 310//===----------------------------------------------------------------------===//311// GraphARM ops312//===----------------------------------------------------------------------===//313 314// CHECK-LABEL: graph_arm315spirv.ARM.Graph @graph_arm(%arg0: !spirv.arm.tensor<1x16x16x16xi8>) -> !spirv.arm.tensor<1x16x16x16xi8> {316  // CHECK: spirv.ARM.GraphOutputs min version: v1.0317  // CHECK: spirv.ARM.GraphOutputs max version: v1.6318  // CHECK: spirv.ARM.GraphOutputs extensions: [ [SPV_ARM_graph, SPV_ARM_tensors] ]319  // CHECK: spirv.ARM.GraphOutputs capabilities: [ [GraphARM] ]320  spirv.ARM.GraphOutputs %arg0 : !spirv.arm.tensor<1x16x16x16xi8>321// CHECK: spirv.ARM.Graph min version: v1.0322// CHECK: spirv.ARM.Graph max version: v1.6323// CHECK: spirv.ARM.Graph extensions: [ [SPV_ARM_graph, SPV_ARM_tensors] ]324// CHECK: spirv.ARM.Graph capabilities: [ [GraphARM] ]325}326