1// RUN: mlir-translate -no-implicit-module -split-input-file -test-spirv-roundtrip -verify-diagnostics %s | FileCheck %s 2 3spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 4 // CHECK: location = 0 : i32 5 spirv.GlobalVariable @var {location = 0 : i32} : !spirv.ptr<vector<4xf32>, Input> 6} 7 8// ----- 9 10spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 11 // CHECK: no_perspective 12 spirv.GlobalVariable @var {no_perspective} : !spirv.ptr<vector<4xf32>, Input> 13} 14 15// ----- 16 17spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 18 // CHECK: flat 19 spirv.GlobalVariable @var {flat} : !spirv.ptr<si32, Input> 20} 21 22// ----- 23 24spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 25 // CHECK: aliased 26 // CHECK: aliased 27 spirv.GlobalVariable @var1 bind(0, 0) {aliased} : !spirv.ptr<!spirv.struct<(!spirv.array<4xf32, stride=4>[0])>, StorageBuffer> 28 spirv.GlobalVariable @var2 bind(0, 0) {aliased} : !spirv.ptr<!spirv.struct<(vector<4xf32>[0])>, StorageBuffer> 29} 30 31// ----- 32 33spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 34 // CHECK: non_readable 35 spirv.GlobalVariable @var bind(0, 0) {non_readable} : !spirv.ptr<!spirv.struct<(!spirv.array<4xf32, stride=4>[0])>, StorageBuffer> 36} 37 38// ----- 39 40spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 41 // CHECK: non_writable 42 spirv.GlobalVariable @var bind(0, 0) {non_writable} : !spirv.ptr<!spirv.struct<(!spirv.array<4xf32, stride=4>[0])>, StorageBuffer> 43} 44 45// ----- 46 47spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 48 // CHECK: restrict 49 spirv.GlobalVariable @var bind(0, 0) {restrict} : !spirv.ptr<!spirv.struct<(!spirv.array<4xf32, stride=4>[0])>, StorageBuffer> 50} 51 52// ----- 53 54spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 55 // CHECK: relaxed_precision 56 spirv.GlobalVariable @var {location = 0 : i32, relaxed_precision} : !spirv.ptr<vector<4xf32>, Output> 57} 58 59// ----- 60 61spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, Linkage], []> { 62 // CHECK: linkage_attributes = #spirv.linkage_attributes<linkage_name = "outSideGlobalVar1", linkage_type = <Import>> 63 spirv.GlobalVariable @var1 { 64 linkage_attributes=#spirv.linkage_attributes< 65 linkage_name="outSideGlobalVar1", 66 linkage_type=<Import> 67 > 68 } : !spirv.ptr<f32, Private> 69} 70 71// ----- 72 73spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Kernel], []> { 74spirv.func @iadd_decorations(%arg: i32) -> i32 "None" { 75 // CHECK: spirv.IAdd %{{.*}}, %{{.*}} {no_signed_wrap, no_unsigned_wrap} 76 %0 = spirv.IAdd %arg, %arg {no_signed_wrap, no_unsigned_wrap} : i32 77 spirv.ReturnValue %0 : i32 78} 79} 80 81// ----- 82 83spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Kernel], []> { 84spirv.func @fadd_decorations(%arg: f32) -> f32 "None" { 85 // CHECK: spirv.FAdd %{{.*}}, %{{.*}} {fp_fast_math_mode = #spirv.fastmath_mode<NotNaN|NotInf|NSZ>} 86 %0 = spirv.FAdd %arg, %arg {fp_fast_math_mode = #spirv.fastmath_mode<NotNaN|NotInf|NSZ>} : f32 87 spirv.ReturnValue %0 : f32 88} 89} 90 91// ----- 92 93spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Kernel], []> { 94spirv.func @fmul_decorations(%arg: f32) -> f32 "None" { 95 // CHECK: spirv.FMul %{{.*}}, %{{.*}} {no_contraction} 96 %0 = spirv.FMul %arg, %arg {no_contraction} : f32 97 spirv.ReturnValue %0 : f32 98} 99} 100 101// ----- 102 103spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Kernel, Float16], []> { 104spirv.func @fp_rounding_mode(%arg: f32) -> f16 "None" { 105 // CHECK: spirv.FConvert %arg0 {fp_rounding_mode = #spirv.fp_rounding_mode<RTN>} : f32 to f16 106 %0 = spirv.FConvert %arg {fp_rounding_mode = #spirv.fp_rounding_mode<RTN>} : f32 to f16 107 spirv.ReturnValue %0 : f16 108} 109} 110 111// ----- 112 113// CHECK-LABEL: spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [CacheControlsINTEL], [SPV_INTEL_cache_controls]> { 114 115spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [CacheControlsINTEL], [SPV_INTEL_cache_controls]> { 116 spirv.func @cache_controls() "None" { 117 // CHECK: spirv.Variable {cache_control_load_intel = [#spirv.cache_control_load_intel<cache_level = 0, load_cache_control = Uncached>, #spirv.cache_control_load_intel<cache_level = 1, load_cache_control = Cached>, #spirv.cache_control_load_intel<cache_level = 2, load_cache_control = InvalidateAfterR>]} : !spirv.ptr<f32, Function> 118 %0 = spirv.Variable {cache_control_load_intel = [#spirv.cache_control_load_intel<cache_level = 0, load_cache_control = Uncached>, #spirv.cache_control_load_intel<cache_level = 1, load_cache_control = Cached>, #spirv.cache_control_load_intel<cache_level = 2, load_cache_control = InvalidateAfterR>]} : !spirv.ptr<f32, Function> 119 // CHECK: spirv.Variable {cache_control_store_intel = [#spirv.cache_control_store_intel<cache_level = 0, store_cache_control = Uncached>, #spirv.cache_control_store_intel<cache_level = 1, store_cache_control = WriteThrough>, #spirv.cache_control_store_intel<cache_level = 2, store_cache_control = WriteBack>]} : !spirv.ptr<f32, Function> 120 %1 = spirv.Variable {cache_control_store_intel = [#spirv.cache_control_store_intel<cache_level = 0, store_cache_control = Uncached>, #spirv.cache_control_store_intel<cache_level = 1, store_cache_control = WriteThrough>, #spirv.cache_control_store_intel<cache_level = 2, store_cache_control = WriteBack>]} : !spirv.ptr<f32, Function> 121 spirv.Return 122 } 123} 124 125// ----- 126 127spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [CacheControlsINTEL], [SPV_INTEL_cache_controls]> { 128 spirv.func @cache_controls_invalid_type() "None" { 129 // expected-error@below {{expecting array attribute of CacheControlLoadINTEL for CacheControlLoadINTEL}} 130 %0 = spirv.Variable {cache_control_load_intel = #spirv.cache_control_load_intel<cache_level = 0, load_cache_control = Uncached>} : !spirv.ptr<f32, Function> 131 spirv.Return 132 } 133} 134 135// ----- 136 137spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [CacheControlsINTEL], [SPV_INTEL_cache_controls]> { 138 spirv.func @cache_controls_invalid_type() "None" { 139 // expected-error@below {{expecting array attribute of CacheControlStoreINTEL for CacheControlStoreINTEL}} 140 %0 = spirv.Variable {cache_control_store_intel = [#spirv.cache_control_store_intel<cache_level = 0, store_cache_control = Uncached>, 0 : i32]} : !spirv.ptr<f32, Function> 141 spirv.Return 142 } 143} 144 145// ----- 146 147spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [CacheControlsINTEL], [SPV_INTEL_cache_controls]> { 148 spirv.func @cache_controls_invalid_type() "None" { 149 // expected-error@below {{expecting non-empty array attribute of CacheControlStoreINTEL for CacheControlStoreINTEL}} 150 %0 = spirv.Variable {cache_control_store_intel = []} : !spirv.ptr<f32, Function> 151 spirv.Return 152 } 153} 154