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