151 lines · plain
1// RUN: mlir-translate -no-implicit-module -test-spirv-roundtrip -split-input-file %s | FileCheck %s2 3// RUN: %if spirv-tools %{ rm -rf %t %}4// RUN: %if spirv-tools %{ mkdir %t %}5// RUN: %if spirv-tools %{ mlir-translate --no-implicit-module --serialize-spirv --split-input-file --spirv-save-validation-files-with-prefix=%t/module %s %}6// RUN: %if spirv-tools %{ spirv-val %t %}7 8spirv.module Logical GLSL450 requires #spirv.vce<v1.3, [Shader, Linkage, GroupNonUniformBallot, GroupNonUniformArithmetic, GroupNonUniformClustered, GroupNonUniformShuffle, GroupNonUniformShuffleRelative, GroupNonUniformVote], []> {9 // CHECK-LABEL: @group_non_uniform_ballot10 spirv.func @group_non_uniform_ballot(%predicate: i1) -> vector<4xi32> "None" {11 // CHECK: %{{.*}} = spirv.GroupNonUniformBallot <Workgroup> %{{.*}}: vector<4xi32>12 %0 = spirv.GroupNonUniformBallot <Workgroup> %predicate : vector<4xi32>13 spirv.ReturnValue %0: vector<4xi32>14 }15 16 // CHECK-LABEL: @group_non_uniform_broadcast17 spirv.func @group_non_uniform_broadcast(%value: f32) -> f32 "None" {18 %one = spirv.Constant 1 : i3219 // CHECK: spirv.GroupNonUniformBroadcast <Subgroup> %{{.*}}, %{{.*}} : f32, i3220 %0 = spirv.GroupNonUniformBroadcast <Subgroup> %value, %one : f32, i3221 spirv.ReturnValue %0: f3222 }23 24 // CHECK-LABEL: @group_non_uniform_elect25 spirv.func @group_non_uniform_elect() -> i1 "None" {26 // CHECK: %{{.+}} = spirv.GroupNonUniformElect <Workgroup> : i127 %0 = spirv.GroupNonUniformElect <Workgroup> : i128 spirv.ReturnValue %0: i129 }30 31 // CHECK-LABEL: @group_non_uniform_fadd_reduce32 spirv.func @group_non_uniform_fadd_reduce(%val: f32) -> f32 "None" {33 // CHECK: %{{.+}} = spirv.GroupNonUniformFAdd <Workgroup> <Reduce> %{{.+}} : f32 -> f3234 %0 = spirv.GroupNonUniformFAdd <Workgroup> <Reduce> %val : f32 -> f3235 spirv.ReturnValue %0: f3236 }37 38 // CHECK-LABEL: @group_non_uniform_fmax_reduce39 spirv.func @group_non_uniform_fmax_reduce(%val: f32) -> f32 "None" {40 // CHECK: %{{.+}} = spirv.GroupNonUniformFMax <Workgroup> <Reduce> %{{.+}} : f32 -> f3241 %0 = spirv.GroupNonUniformFMax <Workgroup> <Reduce> %val : f32 -> f3242 spirv.ReturnValue %0: f3243 }44 45 // CHECK-LABEL: @group_non_uniform_fmin_reduce46 spirv.func @group_non_uniform_fmin_reduce(%val: f32) -> f32 "None" {47 // CHECK: %{{.+}} = spirv.GroupNonUniformFMin <Workgroup> <Reduce> %{{.+}} : f32 -> f3248 %0 = spirv.GroupNonUniformFMin <Workgroup> <Reduce> %val : f32 -> f3249 spirv.ReturnValue %0: f3250 }51 52 // CHECK-LABEL: @group_non_uniform_fmul_reduce53 spirv.func @group_non_uniform_fmul_reduce(%val: f32) -> f32 "None" {54 // CHECK: %{{.+}} = spirv.GroupNonUniformFMul <Workgroup> <Reduce> %{{.+}} : f32 -> f3255 %0 = spirv.GroupNonUniformFMul <Workgroup> <Reduce> %val : f32 -> f3256 spirv.ReturnValue %0: f3257 }58 59 // CHECK-LABEL: @group_non_uniform_iadd_reduce60 spirv.func @group_non_uniform_iadd_reduce(%val: i32) -> i32 "None" {61 // CHECK: %{{.+}} = spirv.GroupNonUniformIAdd <Workgroup> <Reduce> %{{.+}} : i32 -> i3262 %0 = spirv.GroupNonUniformIAdd <Workgroup> <Reduce> %val : i32 -> i3263 spirv.ReturnValue %0: i3264 }65 66 // CHECK-LABEL: @group_non_uniform_iadd_clustered_reduce67 spirv.func @group_non_uniform_iadd_clustered_reduce(%val: vector<2xi32>) -> vector<2xi32> "None" {68 %four = spirv.Constant 4 : i3269 // CHECK: %{{.+}} = spirv.GroupNonUniformIAdd <Workgroup> <ClusteredReduce> %{{.+}} cluster_size(%{{.+}}) : vector<2xi32>, i32 -> vector<2xi32>70 %0 = spirv.GroupNonUniformIAdd <Workgroup> <ClusteredReduce> %val cluster_size(%four) : vector<2xi32>, i32 -> vector<2xi32>71 spirv.ReturnValue %0: vector<2xi32>72 }73 74 // CHECK-LABEL: @group_non_uniform_imul_reduce75 spirv.func @group_non_uniform_imul_reduce(%val: i32) -> i32 "None" {76 // CHECK: %{{.+}} = spirv.GroupNonUniformIMul <Workgroup> <Reduce> %{{.+}} : i32 -> i3277 %0 = spirv.GroupNonUniformIMul <Workgroup> <Reduce> %val : i32 -> i3278 spirv.ReturnValue %0: i3279 }80 81 // CHECK-LABEL: @group_non_uniform_smax_reduce82 spirv.func @group_non_uniform_smax_reduce(%val: i32) -> i32 "None" {83 // CHECK: %{{.+}} = spirv.GroupNonUniformSMax <Workgroup> <Reduce> %{{.+}} : i32 -> i3284 %0 = spirv.GroupNonUniformSMax <Workgroup> <Reduce> %val : i32 -> i3285 spirv.ReturnValue %0: i3286 }87 88 // CHECK-LABEL: @group_non_uniform_smin_reduce89 spirv.func @group_non_uniform_smin_reduce(%val: i32) -> i32 "None" {90 // CHECK: %{{.+}} = spirv.GroupNonUniformSMin <Workgroup> <Reduce> %{{.+}} : i32 -> i3291 %0 = spirv.GroupNonUniformSMin <Workgroup> <Reduce> %val : i32 -> i3292 spirv.ReturnValue %0: i3293 }94 95 // CHECK-LABEL: @group_non_uniform_umax_reduce96 spirv.func @group_non_uniform_umax_reduce(%val: i32) -> i32 "None" {97 // CHECK: %{{.+}} = spirv.GroupNonUniformUMax <Workgroup> <Reduce> %{{.+}} : i32 -> i3298 %0 = spirv.GroupNonUniformUMax <Workgroup> <Reduce> %val : i32 -> i3299 spirv.ReturnValue %0: i32100 }101 102 // CHECK-LABEL: @group_non_uniform_umin_reduce103 spirv.func @group_non_uniform_umin_reduce(%val: i32) -> i32 "None" {104 // CHECK: %{{.+}} = spirv.GroupNonUniformUMin <Workgroup> <Reduce> %{{.+}} : i32 -> i32105 %0 = spirv.GroupNonUniformUMin <Workgroup> <Reduce> %val : i32 -> i32106 spirv.ReturnValue %0: i32107 }108 109 spirv.func @group_non_uniform_shuffle(%val: f32, %id: i32) -> f32 "None" {110 // CHECK: %{{.+}} = spirv.GroupNonUniformShuffle <Subgroup> %{{.+}}, %{{.+}} : f32, i32111 %0 = spirv.GroupNonUniformShuffle <Subgroup> %val, %id : f32, i32112 spirv.ReturnValue %0: f32113 }114 115 spirv.func @group_non_uniform_shuffle_up(%val: f32, %id: i32) -> f32 "None" {116 // CHECK: %{{.+}} = spirv.GroupNonUniformShuffleUp <Subgroup> %{{.+}}, %{{.+}} : f32, i32117 %0 = spirv.GroupNonUniformShuffleUp <Subgroup> %val, %id : f32, i32118 spirv.ReturnValue %0: f32119 }120 121 spirv.func @group_non_uniform_shuffle_down(%val: f32, %id: i32) -> f32 "None" {122 // CHECK: %{{.+}} = spirv.GroupNonUniformShuffleDown <Subgroup> %{{.+}}, %{{.+}} : f32, i32123 %0 = spirv.GroupNonUniformShuffleDown <Subgroup> %val, %id : f32, i32124 spirv.ReturnValue %0: f32125 }126 127 spirv.func @group_non_uniform_shuffle_xor(%val: f32, %id: i32) -> f32 "None" {128 // CHECK: %{{.+}} = spirv.GroupNonUniformShuffleXor <Subgroup> %{{.+}}, %{{.+}} : f32, i32129 %0 = spirv.GroupNonUniformShuffleXor <Subgroup> %val, %id : f32, i32130 spirv.ReturnValue %0: f32131 }132 133 spirv.func @group_non_uniform_all(%pred: i1) -> i1 "None" {134 // CHECK: %{{.+}} = spirv.GroupNonUniformAll <Subgroup> %{{.+}} : i1135 %0 = spirv.GroupNonUniformAll <Subgroup> %pred : i1136 spirv.ReturnValue %0: i1137 }138 139 spirv.func @group_non_uniform_any(%pred: i1) -> i1 "None" {140 // CHECK: %{{.+}} = spirv.GroupNonUniformAny <Subgroup> %{{.+}} : i1141 %0 = spirv.GroupNonUniformAny <Subgroup> %pred : i1142 spirv.ReturnValue %0: i1143 }144 145 spirv.func @group_non_uniform_all_equal(%val: vector<4xi32>) -> i1 "None" {146 // CHECK: %{{.+}} = spirv.GroupNonUniformAllEqual <Subgroup> %{{.+}} : vector<4xi32>, i1147 %0 = spirv.GroupNonUniformAllEqual <Subgroup> %val : vector<4xi32>, i1148 spirv.ReturnValue %0: i1149 }150}151