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