1// RUN: mlir-translate -no-implicit-module -test-spirv-roundtrip -split-input-file -verify-diagnostics %s | FileCheck %s 2 3spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, Linkage], []> { 4 spirv.func @linkage_attr_test_kernel() "DontInline" attributes {} { 5 %uchar_0 = spirv.Constant 0 : i8 6 %ushort_1 = spirv.Constant 1 : i16 7 %uint_0 = spirv.Constant 0 : i32 8 spirv.FunctionCall @outside.func.with.linkage(%uchar_0):(i8) -> () 9 spirv.Return 10 } 11 // CHECK: linkage_attributes = #spirv.linkage_attributes<linkage_name = "outside.func", linkage_type = <Import>> 12 spirv.func @outside.func.with.linkage(%arg0 : i8) -> () "Pure" attributes { 13 linkage_attributes=#spirv.linkage_attributes< 14 linkage_name="outside.func", 15 linkage_type=<Import> 16 > 17 } 18 spirv.func @inside.func() -> () "Pure" attributes {} {spirv.Return} 19} 20 21// ----- 22 23spirv.module PhysicalStorageBuffer64 GLSL450 requires #spirv.vce<v1.0, 24 [Shader, PhysicalStorageBufferAddresses], [SPV_KHR_physical_storage_buffer]> { 25 // CHECK-LABEL: spirv.func @func_arg_decoration_aliased(%{{.*}}: !spirv.ptr<i32, PhysicalStorageBuffer> {spirv.decoration = #spirv.decoration<Aliased>}) 26 spirv.func @func_arg_decoration_aliased( 27 %arg0 : !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Aliased> } 28 ) "None" { 29 spirv.Return 30 } 31} 32 33// ----- 34 35spirv.module PhysicalStorageBuffer64 GLSL450 requires #spirv.vce<v1.0, 36 [Shader, PhysicalStorageBufferAddresses], [SPV_KHR_physical_storage_buffer]> { 37 // CHECK-LABEL: spirv.func @func_arg_decoration_restrict(%{{.*}}: !spirv.ptr<i32, PhysicalStorageBuffer> {spirv.decoration = #spirv.decoration<Restrict>}) 38 spirv.func @func_arg_decoration_restrict( 39 %arg0 : !spirv.ptr<i32,PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Restrict> } 40 ) "None" { 41 spirv.Return 42 } 43} 44 45// ----- 46 47spirv.module PhysicalStorageBuffer64 GLSL450 requires #spirv.vce<v1.0, 48 [Shader, PhysicalStorageBufferAddresses], [SPV_KHR_physical_storage_buffer]> { 49 // CHECK-LABEL: spirv.func @func_arg_decoration_aliased_pointer(%{{.*}}: !spirv.ptr<!spirv.ptr<i32, PhysicalStorageBuffer>, Generic> {spirv.decoration = #spirv.decoration<AliasedPointer>}) 50 spirv.func @func_arg_decoration_aliased_pointer( 51 %arg0 : !spirv.ptr<!spirv.ptr<i32,PhysicalStorageBuffer>, Generic> { spirv.decoration = #spirv.decoration<AliasedPointer> } 52 ) "None" { 53 spirv.Return 54 } 55} 56 57// ----- 58 59spirv.module PhysicalStorageBuffer64 GLSL450 requires #spirv.vce<v1.0, 60 [Shader, PhysicalStorageBufferAddresses], [SPV_KHR_physical_storage_buffer]> { 61 // CHECK-LABEL: spirv.func @func_arg_decoration_restrict_pointer(%{{.*}}: !spirv.ptr<!spirv.ptr<i32, PhysicalStorageBuffer>, Generic> {spirv.decoration = #spirv.decoration<RestrictPointer>}) 62 spirv.func @func_arg_decoration_restrict_pointer( 63 %arg0 : !spirv.ptr<!spirv.ptr<i32,PhysicalStorageBuffer>, Generic> { spirv.decoration = #spirv.decoration<RestrictPointer> } 64 ) "None" { 65 spirv.Return 66 } 67} 68 69// ----- 70 71spirv.module PhysicalStorageBuffer64 GLSL450 requires #spirv.vce<v1.0, 72 [Shader, PhysicalStorageBufferAddresses], [SPV_KHR_physical_storage_buffer]> { 73 // CHECK-LABEL: spirv.func @fn1(%{{.*}}: i32, %{{.*}}: !spirv.ptr<i32, PhysicalStorageBuffer> {spirv.decoration = #spirv.decoration<Aliased>}) 74 spirv.func @fn1( 75 %arg0: i32, 76 %arg1: !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Aliased> } 77 ) "None" { 78 spirv.Return 79 } 80 81 // CHECK-LABEL: spirv.func @fn2(%{{.*}}: !spirv.ptr<i32, PhysicalStorageBuffer> {spirv.decoration = #spirv.decoration<Aliased>}, %{{.*}}: !spirv.ptr<i32, PhysicalStorageBuffer> {spirv.decoration = #spirv.decoration<Restrict>}) 82 spirv.func @fn2( 83 %arg0: !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Aliased> }, 84 %arg1: !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Restrict>} 85 ) "None" { 86 spirv.Return 87 } 88} 89