1// RUN: mlir-translate -test-spirv-roundtrip -split-input-file %s | FileCheck %s
2
3spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
4  // CHECK-LABEL: @subgroup_ballot
5  spv.func @subgroup_ballot(%predicate: i1) -> vector<4xi32> "None" {
6    // CHECK: %{{.*}} = spv.SubgroupBallotKHR %{{.*}}: vector<4xi32>
7    %0 = spv.SubgroupBallotKHR %predicate: vector<4xi32>
8    spv.ReturnValue %0: vector<4xi32>
9  }
10  // CHECK-LABEL: @group_broadcast_1
11  spv.func @group_broadcast_1(%value: f32, %localid: i32 ) -> f32 "None" {
12    // CHECK: spv.GroupBroadcast "Workgroup" %{{.*}}, %{{.*}} : f32, i32
13    %0 = spv.GroupBroadcast "Workgroup" %value, %localid : f32, i32
14    spv.ReturnValue %0: f32
15  }
16  // CHECK-LABEL: @group_broadcast_2
17  spv.func @group_broadcast_2(%value: f32, %localid: vector<3xi32> ) -> f32 "None" {
18    // CHECK: spv.GroupBroadcast "Workgroup" %{{.*}}, %{{.*}} : f32, vector<3xi32>
19    %0 = spv.GroupBroadcast "Workgroup" %value, %localid : f32, vector<3xi32>
20    spv.ReturnValue %0: f32
21  }
22  // CHECK-LABEL: @subgroup_block_read_intel
23  spv.func @subgroup_block_read_intel(%ptr : !spv.ptr<i32, StorageBuffer>) -> i32 "None" {
24    // CHECK: spv.SubgroupBlockReadINTEL %{{.*}} : i32
25    %0 = spv.SubgroupBlockReadINTEL "StorageBuffer" %ptr : i32
26    spv.ReturnValue %0: i32
27  }
28  // CHECK-LABEL: @subgroup_block_read_intel_vector
29  spv.func @subgroup_block_read_intel_vector(%ptr : !spv.ptr<i32, StorageBuffer>) -> vector<3xi32> "None" {
30    // CHECK: spv.SubgroupBlockReadINTEL %{{.*}} : vector<3xi32>
31    %0 = spv.SubgroupBlockReadINTEL "StorageBuffer" %ptr : vector<3xi32>
32    spv.ReturnValue %0: vector<3xi32>
33  }
34  // CHECK-LABEL: @subgroup_block_write_intel
35  spv.func @subgroup_block_write_intel(%ptr : !spv.ptr<i32, StorageBuffer>, %value: i32) -> () "None" {
36    // CHECK: spv.SubgroupBlockWriteINTEL %{{.*}}, %{{.*}} : i32
37    spv.SubgroupBlockWriteINTEL "StorageBuffer" %ptr, %value : i32
38    spv.Return
39  }
40  // CHECK-LABEL: @subgroup_block_write_intel_vector
41  spv.func @subgroup_block_write_intel_vector(%ptr : !spv.ptr<i32, StorageBuffer>, %value: vector<3xi32>) -> () "None" {
42    // CHECK: spv.SubgroupBlockWriteINTEL %{{.*}}, %{{.*}} : vector<3xi32>
43    spv.SubgroupBlockWriteINTEL "StorageBuffer" %ptr, %value : vector<3xi32>
44    spv.Return
45  }
46}
47