brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · f09767a Raw
93 lines · plain
1// RUN: mlir-opt -split-input-file -verify-diagnostics %s | FileCheck %s2 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 : i86        %ushort_1 = spirv.Constant 1 : i167        %uint_0 = spirv.Constant 0 : i328        spirv.FunctionCall @outside.func.with.linkage(%uchar_0):(i8) -> ()9        spirv.Return10    }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 23// CHECK: spirv.func @arg_decoration_pointer(%{{.+}}: !spirv.ptr<i32, PhysicalStorageBuffer> {spirv.decoration = #spirv.decoration<Aliased>}) "None"24spirv.func @arg_decoration_pointer(%arg0: !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Aliased> }) "None" {25  spirv.Return26}27 28// -----29 30// CHECK: spirv.func @arg_decoration_pointer(%{{.+}}: !spirv.ptr<i32, PhysicalStorageBuffer> {spirv.decoration = #spirv.decoration<Restrict>}) "None"31spirv.func @arg_decoration_pointer(%arg0: !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Restrict> }) "None" {32  spirv.Return33}34 35// -----36 37// CHECK: spirv.func @arg_decoration_pointer(%{{.+}}: !spirv.ptr<!spirv.ptr<i32, PhysicalStorageBuffer>, Generic> {spirv.decoration = #spirv.decoration<AliasedPointer>}) "None"38spirv.func @arg_decoration_pointer(%arg0: !spirv.ptr<!spirv.ptr<i32, PhysicalStorageBuffer>, Generic> { spirv.decoration = #spirv.decoration<AliasedPointer> }) "None" {39  spirv.Return40}41 42// -----43 44// CHECK: spirv.func @arg_decoration_pointer(%{{.+}}: !spirv.ptr<!spirv.ptr<i32, PhysicalStorageBuffer>, Generic> {spirv.decoration = #spirv.decoration<RestrictPointer>}) "None"45spirv.func @arg_decoration_pointer(%arg0: !spirv.ptr<!spirv.ptr<i32, PhysicalStorageBuffer>, Generic> { spirv.decoration = #spirv.decoration<RestrictPointer> }) "None" {46  spirv.Return47}48 49// -----50 51// expected-error @+1 {{'spirv.func' op with physical buffer pointer must be decorated either 'Aliased' or 'Restrict'}}52spirv.func @no_arg_decoration_pointer(%arg0: !spirv.ptr<i32, PhysicalStorageBuffer>) "None" {53  spirv.Return54}55 56// -----57 58// expected-error @+1 {{'spirv.func' op with a pointer points to a physical buffer pointer must be decorated either 'AliasedPointer' or 'RestrictPointer'}}59spirv.func @no_arg_decoration_pointer(%arg0: !spirv.ptr<!spirv.ptr<i32, PhysicalStorageBuffer>, Function>) "None" {60  spirv.Return61}62 63// -----64 65// expected-error @+1 {{'spirv.func' op with physical buffer pointer must be decorated either 'Aliased' or 'Restrict'}}66spirv.func @no_decoration_name_attr(%arg0 : !spirv.ptr<i32, PhysicalStorageBuffer> { random_attr = #spirv.decoration<Aliased> }) "None" {67  spirv.Return68}69 70// -----71 72// expected-error @+1 {{'spirv.func' op arguments may only have dialect attributes}}73spirv.func @no_decoration_name_attr(%arg0 : !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Restrict>, random_attr = #spirv.decoration<Aliased> }) "None" {74  spirv.Return75}76 77// -----78 79// expected-error @+1 {{'spirv.func' op entry block must have 1 arguments to match function signature}}80spirv.func @f(f32) "None" {81  %c0 = arith.constant 0 : index82  spirv.Return83}84 85// -----86 87// expected-error @+1 {{'spirv.func' op type of entry block argument #0('f64') must match the type of the corresponding argument in function signature('f32')}}88spirv.func @f(f32) "None" {89  ^bb0(%arg0: f64):90  %c0 = arith.constant 0 : index91  spirv.Return92}93