xref: /llvm-project/mlir/test/Target/SPIRV/function-decorations.mlir (revision e5332482c6009699d7b66393617a389d8ae62710)
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