This commits changes the definition of spv.module to use the #spv.vce attribute for specifying (version, capabilities, extensions) triple so that we can have better API and custom assembly form. Since now we have proper modelling of the triple, (de)serialization is wired up to use them. With the new UpdateVCEPass, we don't need to manually specify the required extensions and capabilities anymore when creating a spv.module. One just need to call UpdateVCEPass before serialization to get the needed version/extensions/capabilities. Differential Revision: https://reviews.llvm.org/D75872
52 lines
1.8 KiB
MLIR
52 lines
1.8 KiB
MLIR
// RUN: mlir-opt -disable-pass-threading -test-spirv-op-availability %s | FileCheck %s
|
|
|
|
// CHECK-LABEL: iadd
|
|
func @iadd(%arg: i32) -> i32 {
|
|
// CHECK: min version: v1.0
|
|
// CHECK: max version: v1.5
|
|
// CHECK: extensions: [ ]
|
|
// CHECK: capabilities: [ ]
|
|
%0 = spv.IAdd %arg, %arg: i32
|
|
return %0: i32
|
|
}
|
|
|
|
// CHECK: atomic_compare_exchange_weak
|
|
func @atomic_compare_exchange_weak(%ptr: !spv.ptr<i32, Workgroup>, %value: i32, %comparator: i32) -> i32 {
|
|
// CHECK: min version: v1.0
|
|
// CHECK: max version: v1.3
|
|
// CHECK: extensions: [ ]
|
|
// CHECK: capabilities: [ [Kernel] ]
|
|
%0 = spv.AtomicCompareExchangeWeak "Workgroup" "Release" "Acquire" %ptr, %value, %comparator: !spv.ptr<i32, Workgroup>
|
|
return %0: i32
|
|
}
|
|
|
|
// CHECK-LABEL: subgroup_ballot
|
|
func @subgroup_ballot(%predicate: i1) -> vector<4xi32> {
|
|
// CHECK: min version: v1.3
|
|
// CHECK: max version: v1.5
|
|
// CHECK: extensions: [ ]
|
|
// CHECK: capabilities: [ [GroupNonUniformBallot] ]
|
|
%0 = spv.GroupNonUniformBallot "Workgroup" %predicate : vector<4xi32>
|
|
return %0: vector<4xi32>
|
|
}
|
|
|
|
// CHECK-LABEL: module_logical_glsl450
|
|
func @module_logical_glsl450() {
|
|
// CHECK: spv.module min version: v1.0
|
|
// CHECK: spv.module max version: v1.5
|
|
// CHECK: spv.module extensions: [ ]
|
|
// CHECK: spv.module capabilities: [ [Shader] ]
|
|
spv.module Logical GLSL450 { }
|
|
return
|
|
}
|
|
|
|
// CHECK-LABEL: module_physical_storage_buffer64_vulkan
|
|
func @module_physical_storage_buffer64_vulkan() {
|
|
// CHECK: spv.module min version: v1.0
|
|
// CHECK: spv.module max version: v1.5
|
|
// CHECK: spv.module extensions: [ [SPV_EXT_physical_storage_buffer, SPV_KHR_physical_storage_buffer] [SPV_KHR_vulkan_memory_model] ]
|
|
// CHECK: spv.module capabilities: [ [PhysicalStorageBufferAddresses] [VulkanMemoryModel] ]
|
|
spv.module PhysicalStorageBuffer64 Vulkan { }
|
|
return
|
|
}
|