[clang-tidy][NFC]remove deps of clang in clang tidy test (#116588)
[llvm-project.git] / mlir / test / Dialect / SPIRV / IR / group-ops.mlir
blobc879b901311f2122ef44ef93c79f57f4c4f96199
1 // RUN: mlir-opt -split-input-file -verify-diagnostics %s | FileCheck %s
3 //===----------------------------------------------------------------------===//
4 // spirv.KHR.SubgroupBallot
5 //===----------------------------------------------------------------------===//
7 func.func @subgroup_ballot(%predicate: i1) -> vector<4xi32> {
8   // CHECK: %{{.*}} = spirv.KHR.SubgroupBallot %{{.*}} : vector<4xi32>
9   %0 = spirv.KHR.SubgroupBallot %predicate: vector<4xi32>
10   return %0: vector<4xi32>
13 // -----
15 //===----------------------------------------------------------------------===//
16 // spirv.GroupBroadcast
17 //===----------------------------------------------------------------------===//
19 func.func @group_broadcast_scalar(%value: f32, %localid: i32 ) -> f32 {
20   // CHECK: spirv.GroupBroadcast <Workgroup> %{{.*}}, %{{.*}} : f32, i32
21   %0 = spirv.GroupBroadcast <Workgroup> %value, %localid : f32, i32
22   return %0: f32
25 // -----
27 func.func @group_broadcast_scalar_vector(%value: f32, %localid: vector<3xi32> ) -> f32 {
28   // CHECK: spirv.GroupBroadcast <Workgroup> %{{.*}}, %{{.*}} : f32, vector<3xi32>
29   %0 = spirv.GroupBroadcast <Workgroup> %value, %localid : f32, vector<3xi32>
30   return %0: f32
33 // -----
35 func.func @group_broadcast_vector(%value: vector<4xf32>, %localid: vector<3xi32> ) -> vector<4xf32> {
36   // CHECK: spirv.GroupBroadcast <Subgroup> %{{.*}}, %{{.*}} : vector<4xf32>, vector<3xi32>
37   %0 = spirv.GroupBroadcast <Subgroup> %value, %localid : vector<4xf32>, vector<3xi32>
38   return %0: vector<4xf32>
41 // -----
43 func.func @group_broadcast_negative_scope(%value: f32, %localid: vector<3xi32> ) -> f32 {
44   // expected-error @+1 {{execution scope must be 'Workgroup' or 'Subgroup'}}
45   %0 = spirv.GroupBroadcast <Device> %value, %localid : f32, vector<3xi32>
46   return %0: f32
49 // -----
51 func.func @group_broadcast_negative_locid_dtype(%value: f32, %localid: vector<3xf32> ) -> f32 {
52   // expected-error @+1 {{operand #1 must be 8/16/32/64-bit integer or vector of 8/16/32/64-bit integer values}}
53   %0 = spirv.GroupBroadcast <Subgroup> %value, %localid : f32, vector<3xf32>
54   return %0: f32
57 // -----
59 func.func @group_broadcast_negative_locid_vec4(%value: f32, %localid: vector<4xi32> ) -> f32 {
60   // expected-error @+1 {{localid is a vector and can be with only  2 or 3 components, actual number is 4}}
61   %0 = spirv.GroupBroadcast <Subgroup> %value, %localid : f32, vector<4xi32>
62   return %0: f32
65 // -----
67 //===----------------------------------------------------------------------===//
68 // spirv.KHR.SubgroupBallot
69 //===----------------------------------------------------------------------===//
71 func.func @subgroup_ballot(%predicate: i1) -> vector<4xi32> {
72   %0 = spirv.KHR.SubgroupBallot %predicate: vector<4xi32>
73   return %0: vector<4xi32>
76 // -----
78 //===----------------------------------------------------------------------===//
79 // spirv.INTEL.SubgroupBlockRead
80 //===----------------------------------------------------------------------===//
82 func.func @subgroup_block_read_intel(%ptr : !spirv.ptr<i32, StorageBuffer>) -> i32 {
83   // CHECK: spirv.INTEL.SubgroupBlockRead %{{.*}} : !spirv.ptr<i32, StorageBuffer> -> i32
84   %0 = spirv.INTEL.SubgroupBlockRead %ptr : !spirv.ptr<i32, StorageBuffer> -> i32
85   return %0: i32
88 // -----
90 func.func @subgroup_block_read_intel_vector(%ptr : !spirv.ptr<i32, StorageBuffer>) -> vector<3xi32> {
91   // CHECK: spirv.INTEL.SubgroupBlockRead %{{.*}} : !spirv.ptr<i32, StorageBuffer> -> vector<3xi32>
92   %0 = spirv.INTEL.SubgroupBlockRead %ptr : !spirv.ptr<i32, StorageBuffer> -> vector<3xi32>
93   return %0: vector<3xi32>
96 // -----
98 //===----------------------------------------------------------------------===//
99 // spirv.INTEL.SubgroupBlockWrite
100 //===----------------------------------------------------------------------===//
102 func.func @subgroup_block_write_intel(%ptr : !spirv.ptr<i32, StorageBuffer>, %value: i32) -> () {
103   // CHECK: spirv.INTEL.SubgroupBlockWrite %{{.*}}, %{{.*}} : i32
104   spirv.INTEL.SubgroupBlockWrite "StorageBuffer" %ptr, %value : i32
105   return
108 // -----
110 func.func @subgroup_block_write_intel_vector(%ptr : !spirv.ptr<i32, StorageBuffer>, %value: vector<3xi32>) -> () {
111   // CHECK: spirv.INTEL.SubgroupBlockWrite %{{.*}}, %{{.*}} : vector<3xi32>
112   spirv.INTEL.SubgroupBlockWrite "StorageBuffer" %ptr, %value : vector<3xi32>
113   return
116 // -----
118 //===----------------------------------------------------------------------===//
119 // Group ops
120 //===----------------------------------------------------------------------===//
122 func.func @group_iadd(%value: i32) -> i32 {
123   // CHECK: spirv.GroupIAdd <Workgroup> <Reduce> %{{.*}} : i32
124   %0 = spirv.GroupIAdd <Workgroup> <Reduce> %value : i32
125   return %0: i32
128 // -----
130 func.func @group_fadd(%value: f32) -> f32 {
131   // CHECK: spirv.GroupFAdd <Workgroup> <Reduce> %{{.*}} : f32
132   %0 = spirv.GroupFAdd <Workgroup> <Reduce> %value : f32
133   return %0: f32
136 // -----
138 func.func @group_fmin(%value: f32) -> f32 {
139   // CHECK: spirv.GroupFMin <Workgroup> <Reduce> %{{.*}} : f32
140   %0 = spirv.GroupFMin <Workgroup> <Reduce> %value : f32
141   return %0: f32
144 // -----
146 func.func @group_umin(%value: i32) -> i32 {
147   // CHECK: spirv.GroupUMin <Workgroup> <Reduce> %{{.*}} : i32
148   %0 = spirv.GroupUMin <Workgroup> <Reduce> %value : i32
149   return %0: i32
152 // -----
154 func.func @group_smin(%value: i32) -> i32 {
155   // CHECK: spirv.GroupSMin <Workgroup> <Reduce> %{{.*}} : i32
156   %0 = spirv.GroupSMin <Workgroup> <Reduce> %value : i32
157   return %0: i32
160 // -----
162 func.func @group_fmax(%value: f32) -> f32 {
163   // CHECK: spirv.GroupFMax <Workgroup> <Reduce> %{{.*}} : f32
164   %0 = spirv.GroupFMax <Workgroup> <Reduce> %value : f32
165   return %0: f32
168 // -----
170 func.func @group_umax(%value: i32) -> i32 {
171   // CHECK: spirv.GroupUMax <Workgroup> <Reduce> %{{.*}} : i32
172   %0 = spirv.GroupUMax <Workgroup> <Reduce> %value : i32
173   return %0: i32
176 // -----
178 func.func @group_smax(%value: i32) -> i32 {
179   // CHECK: spirv.GroupSMax <Workgroup> <Reduce> %{{.*}} : i32
180   %0 = spirv.GroupSMax <Workgroup> <Reduce> %value : i32
181   return %0: i32
184 // -----
186 func.func @group_imul(%value: i32) -> i32 {
187   // CHECK: spirv.KHR.GroupIMul <Workgroup> <Reduce> %{{.*}} : i32
188   %0 = spirv.KHR.GroupIMul <Workgroup> <Reduce> %value : i32
189   return %0: i32
192 // -----
194 func.func @group_fmul(%value: f32) -> f32 {
195   // CHECK: spirv.KHR.GroupFMul <Workgroup> <Reduce> %{{.*}} : f32
196   %0 = spirv.KHR.GroupFMul <Workgroup> <Reduce> %value : f32
197   return %0: f32