brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.3 KiB · 7dab87f Raw
256 lines · plain
1// RUN: mlir-opt -spirv-update-vce %s | FileCheck %s2 3//===----------------------------------------------------------------------===//4// Version5//===----------------------------------------------------------------------===//6 7// Test deducing minimal version.8// spirv.IAdd is available from v1.0.9 10// CHECK: requires #spirv.vce<v1.0, [Shader, Matrix], []>11spirv.module Logical GLSL450 attributes {12  spirv.target_env = #spirv.target_env<13    #spirv.vce<v1.5, [Shader], []>, #spirv.resource_limits<>>14} {15  spirv.func @iadd(%val : i32) -> i32 "None" {16    %0 = spirv.IAdd %val, %val: i3217    spirv.ReturnValue %0: i3218  }19}20 21// Test deducing minimal version.22// spirv.GroupNonUniformBallot is available since v1.3.23 24// CHECK: requires #spirv.vce<v1.3, [GroupNonUniformBallot, Shader, GroupNonUniform, Matrix], []>25spirv.module Logical GLSL450 attributes {26  spirv.target_env = #spirv.target_env<27    #spirv.vce<v1.5, [Shader, GroupNonUniformBallot], []>, #spirv.resource_limits<>>28} {29  spirv.func @group_non_uniform_ballot(%predicate : i1) -> vector<4xi32> "None" {30    %0 = spirv.GroupNonUniformBallot <Workgroup> %predicate : vector<4xi32>31    spirv.ReturnValue %0: vector<4xi32>32  }33}34 35// CHECK: requires #spirv.vce<v1.4, [Shader, Matrix], []>36spirv.module Logical GLSL450 attributes {37  spirv.target_env = #spirv.target_env<#spirv.vce<v1.6, [Shader], []>, #spirv.resource_limits<>>38} {39  spirv.func @select_with_scalar_condition(%predicate : i1, %a: vector<2xf32>, %b: vector<2xf32>) -> vector<2xf32> "None" {40    %0 = spirv.Select %predicate, %a, %b : i1, vector<2xf32>41    spirv.ReturnValue %0: vector<2xf32>42  }43}44 45//===----------------------------------------------------------------------===//46// Capability47//===----------------------------------------------------------------------===//48 49// Test minimal capabilities.50 51// CHECK: requires #spirv.vce<v1.0, [Shader, Matrix], []>52spirv.module Logical GLSL450 attributes {53  spirv.target_env = #spirv.target_env<54    #spirv.vce<v1.0, [Shader, Float16, Float64, Int16, Int64, VariablePointers], []>, #spirv.resource_limits<>>55} {56  spirv.func @iadd(%val : i32) -> i32 "None" {57    %0 = spirv.IAdd %val, %val: i3258    spirv.ReturnValue %0: i3259  }60}61 62// Test Physical Storage Buffers are deduced correctly.63 64// CHECK: spirv.module PhysicalStorageBuffer64 GLSL450 requires #spirv.vce<v1.0, [PhysicalStorageBufferAddresses, Shader, Matrix], [SPV_EXT_physical_storage_buffer]>65spirv.module PhysicalStorageBuffer64 GLSL450 attributes {66  spirv.target_env = #spirv.target_env<67    #spirv.vce<v1.0, [PhysicalStorageBufferAddresses], [SPV_EXT_physical_storage_buffer]>, #spirv.resource_limits<>>68} {69  spirv.func @physical_ptr(%val : !spirv.ptr<f32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Aliased> }) "None" {70    spirv.Return71  }72}73 74// Test deducing implied capability.75// AtomicStorage implies Shader.76 77// CHECK: requires #spirv.vce<v1.0, [Shader, Matrix], []>78spirv.module Logical GLSL450 attributes {79  spirv.target_env = #spirv.target_env<80    #spirv.vce<v1.0, [AtomicStorage], []>, #spirv.resource_limits<>>81} {82  spirv.func @iadd(%val : i32) -> i32 "None" {83    %0 = spirv.IAdd %val, %val: i3284    spirv.ReturnValue %0: i3285  }86}87 88// Test selecting the capability available in the target environment.89// spirv.GroupNonUniform op itself can be enabled via any of90// * GroupNonUniformArithmetic91// * GroupNonUniformClustered92// * GroupNonUniformPartitionedNV93// Its 'Reduce' group operation can be enabled via any of94// * Kernel95// * GroupNonUniformArithmetic96// * GroupNonUniformBallot97 98// CHECK: requires #spirv.vce<v1.3, [GroupNonUniformArithmetic, Shader, GroupNonUniform, Matrix], []>99spirv.module Logical GLSL450 attributes {100  spirv.target_env = #spirv.target_env<101    #spirv.vce<v1.3, [Shader, GroupNonUniformArithmetic], []>, #spirv.resource_limits<>>102} {103  spirv.func @group_non_uniform_iadd(%val : i32) -> i32 "None" {104    %0 = spirv.GroupNonUniformIAdd <Subgroup> <Reduce> %val : i32 -> i32105    spirv.ReturnValue %0: i32106  }107}108 109// CHECK: requires #spirv.vce<v1.3, [GroupNonUniformClustered, GroupNonUniformBallot, Shader, GroupNonUniform, Matrix], []>110spirv.module Logical GLSL450 attributes {111  spirv.target_env = #spirv.target_env<112    #spirv.vce<v1.3, [Shader, GroupNonUniformClustered, GroupNonUniformBallot], []>, #spirv.resource_limits<>>113} {114  spirv.func @group_non_uniform_iadd(%val : i32) -> i32 "None" {115    %0 = spirv.GroupNonUniformIAdd <Subgroup> <Reduce> %val : i32 -> i32116    spirv.ReturnValue %0: i32117  }118}119 120// Test type required capabilities121 122// Using 8-bit integers in non-interface storage class requires Int8.123// CHECK: requires #spirv.vce<v1.0, [Int8, Shader, Matrix], []>124spirv.module Logical GLSL450 attributes {125  spirv.target_env = #spirv.target_env<126    #spirv.vce<v1.3, [Shader, Int8], []>, #spirv.resource_limits<>>127} {128  spirv.func @iadd_function(%val : i8) -> i8 "None" {129    %0 = spirv.IAdd %val, %val : i8130    spirv.ReturnValue %0: i8131  }132}133 134// Using 16-bit floats in non-interface storage class requires Float16.135// CHECK: requires #spirv.vce<v1.0, [Float16, Shader, Matrix], []>136spirv.module Logical GLSL450 attributes {137  spirv.target_env = #spirv.target_env<138    #spirv.vce<v1.3, [Shader, Float16], []>, #spirv.resource_limits<>>139} {140  spirv.func @fadd_function(%val : f16) -> f16 "None" {141    %0 = spirv.FAdd %val, %val : f16142    spirv.ReturnValue %0: f16143  }144}145 146// Using 16-element vectors requires Vector16.147// CHECK: requires #spirv.vce<v1.0, [Vector16, Shader, Kernel, Matrix], []>148spirv.module Logical GLSL450 attributes {149  spirv.target_env = #spirv.target_env<150    #spirv.vce<v1.3, [Shader, Vector16], []>, #spirv.resource_limits<>>151} {152  spirv.func @iadd_v16_function(%val : vector<16xi32>) -> vector<16xi32> "None" {153    %0 = spirv.IAdd %val, %val : vector<16xi32>154    spirv.ReturnValue %0: vector<16xi32>155  }156}157 158//===----------------------------------------------------------------------===//159// Extension160//===----------------------------------------------------------------------===//161 162// Test deducing minimal extensions.163// spirv.KHR.SubgroupBallot requires the SPV_KHR_shader_ballot extension.164 165// CHECK: requires #spirv.vce<v1.0, [SubgroupBallotKHR, Shader, Matrix], [SPV_KHR_shader_ballot]>166spirv.module Logical GLSL450 attributes {167  spirv.target_env = #spirv.target_env<168    #spirv.vce<v1.0, [Shader, SubgroupBallotKHR],169             [SPV_KHR_shader_ballot, SPV_KHR_shader_clock, SPV_KHR_variable_pointers]>, #spirv.resource_limits<>>170} {171  spirv.func @subgroup_ballot(%predicate : i1) -> vector<4xi32> "None" {172    %0 = spirv.KHR.SubgroupBallot %predicate: vector<4xi32>173    spirv.ReturnValue %0: vector<4xi32>174  }175}176 177// Test deducing implied extension.178// Vulkan memory model requires SPV_KHR_vulkan_memory_model, which is enabled179// implicitly by v1.5.180 181// CHECK: requires #spirv.vce<v1.5, [VulkanMemoryModel], [SPV_KHR_vulkan_memory_model]>182spirv.module Logical Vulkan attributes {183  spirv.target_env = #spirv.target_env<184    #spirv.vce<v1.5, [Shader, VulkanMemoryModel], []>, #spirv.resource_limits<>>185} {186  spirv.func @iadd(%val : i32) -> i32 "None" {187    %0 = spirv.IAdd %val, %val: i32188    spirv.ReturnValue %0: i32189  }190}191 192// Test type required extensions193 194// Using 8-bit integers in interface storage class requires additional195// extensions and capabilities.196// CHECK: requires #spirv.vce<v1.0, [StorageBuffer16BitAccess, Shader, Int16, Matrix], [SPV_KHR_16bit_storage, SPV_KHR_storage_buffer_storage_class]>197spirv.module Logical GLSL450 attributes {198  spirv.target_env = #spirv.target_env<199    #spirv.vce<v1.3, [Shader, StorageBuffer16BitAccess, Int16], []>, #spirv.resource_limits<>>200} {201  spirv.func @iadd_storage_buffer(%ptr : !spirv.ptr<i16, StorageBuffer>) -> i16 "None" {202    %0 = spirv.Load "StorageBuffer" %ptr : i16203    %1 = spirv.IAdd %0, %0 : i16204    spirv.ReturnValue %1: i16205  }206}207 208// Complicated nested types209// * Buffer requires ImageBuffer or SampledBuffer.210// * Rg32f requires StorageImageExtendedFormats.211// CHECK: requires #spirv.vce<v1.0, [UniformAndStorageBuffer8BitAccess, StorageUniform16, Int64, Shader, ImageBuffer, StorageImageExtendedFormats, StorageBuffer8BitAccess, StorageBuffer16BitAccess, Matrix, SampledBuffer], [SPV_KHR_8bit_storage, SPV_KHR_16bit_storage]>212spirv.module Logical GLSL450 attributes {213  spirv.target_env = #spirv.target_env<214    #spirv.vce<v1.5, [Shader, UniformAndStorageBuffer8BitAccess, StorageBuffer16BitAccess, StorageUniform16, Int16, Int64, ImageBuffer, StorageImageExtendedFormats], []>,215    #spirv.resource_limits<>>216} {217  spirv.GlobalVariable @data : !spirv.ptr<!spirv.struct<(i8 [0], f16 [2], i64 [4])>, Uniform>218  spirv.GlobalVariable @img  : !spirv.ptr<!spirv.image<f32, Buffer, NoDepth, NonArrayed, SingleSampled, SamplerUnknown, Rg32f>, UniformConstant>219}220 221// Using bfloat16 requires BFloat16TypeKHR capability and SPV_KHR_bfloat16 extension.222// CHECK: requires #spirv.vce<v1.0, [StorageBuffer16BitAccess, Shader, BFloat16TypeKHR, Matrix], [SPV_KHR_bfloat16, SPV_KHR_16bit_storage, SPV_KHR_storage_buffer_storage_class]>223spirv.module Logical GLSL450 attributes {224  spirv.target_env = #spirv.target_env<225    #spirv.vce<v1.0, [Shader, StorageBuffer16BitAccess, BFloat16TypeKHR], [SPV_KHR_bfloat16, SPV_KHR_16bit_storage, SPV_KHR_storage_buffer_storage_class]>,226    #spirv.resource_limits<>227  >228} {229  spirv.func @load_bf16(%ptr : !spirv.ptr<bf16, StorageBuffer>) -> bf16 "None" {230    %val = spirv.Load "StorageBuffer" %ptr : bf16231    spirv.ReturnValue %val : bf16232  }233}234 235// CHECK: requires #spirv.vce<v1.5, [GraphARM, Int8, TensorsARM, Float16, VulkanMemoryModel], [SPV_ARM_graph, SPV_ARM_tensors, SPV_KHR_vulkan_memory_model]>236spirv.module Logical Vulkan attributes {237  spirv.target_env = #spirv.target_env<238    #spirv.vce<v1.5, [VulkanMemoryModel, GraphARM, TensorsARM, Float16], [SPV_ARM_tensors, SPV_ARM_graph]>,239    #spirv.resource_limits<>>240} {241  spirv.ARM.Graph @argmax(%arg0: !spirv.arm.tensor<14x19xi8>, %arg1 : !spirv.arm.tensor<1xf16>) -> !spirv.arm.tensor<14x19xi8> {242      spirv.ARM.GraphOutputs %arg0 : !spirv.arm.tensor<14x19xi8>243  }244}245 246// Check that extension and capability queries handle recursive types.247// CHECK: requires #spirv.vce<v1.0, [Shader, Addresses, Matrix], [SPV_KHR_storage_buffer_storage_class]>248spirv.module Physical64 GLSL450 attributes {249  spirv.target_env = #spirv.target_env<250    #spirv.vce<v1.6, [Shader, Addresses], [SPV_KHR_storage_buffer_storage_class]>,251    #spirv.resource_limits<>>252} {253  spirv.GlobalVariable @recursive:254    !spirv.ptr<!spirv.struct<rec, (!spirv.ptr<!spirv.struct<rec>, StorageBuffer>)>, StorageBuffer>255}256