1// RUN: mlir-opt -split-input-file -verify-diagnostics %s | FileCheck %s 2 3//===----------------------------------------------------------------------===// 4// spv.SubgroupBallotKHR 5//===----------------------------------------------------------------------===// 6 7func @subgroup_ballot(%predicate: i1) -> vector<4xi32> { 8 // CHECK: %{{.*}} = spv.SubgroupBallotKHR %{{.*}} : vector<4xi32> 9 %0 = spv.SubgroupBallotKHR %predicate: vector<4xi32> 10 return %0: vector<4xi32> 11} 12 13// ----- 14 15//===----------------------------------------------------------------------===// 16// spv.GroupBroadcast 17//===----------------------------------------------------------------------===// 18 19func @group_broadcast_scalar(%value: f32, %localid: i32 ) -> f32 { 20 // CHECK: spv.GroupBroadcast Workgroup %{{.*}}, %{{.*}} : f32, i32 21 %0 = spv.GroupBroadcast Workgroup %value, %localid : f32, i32 22 return %0: f32 23} 24 25// ----- 26 27func @group_broadcast_scalar_vector(%value: f32, %localid: vector<3xi32> ) -> f32 { 28 // CHECK: spv.GroupBroadcast Workgroup %{{.*}}, %{{.*}} : f32, vector<3xi32> 29 %0 = spv.GroupBroadcast Workgroup %value, %localid : f32, vector<3xi32> 30 return %0: f32 31} 32 33// ----- 34 35func @group_broadcast_vector(%value: vector<4xf32>, %localid: vector<3xi32> ) -> vector<4xf32> { 36 // CHECK: spv.GroupBroadcast Subgroup %{{.*}}, %{{.*}} : vector<4xf32>, vector<3xi32> 37 %0 = spv.GroupBroadcast Subgroup %value, %localid : vector<4xf32>, vector<3xi32> 38 return %0: vector<4xf32> 39} 40 41// ----- 42 43func @group_broadcast_negative_scope(%value: f32, %localid: vector<3xi32> ) -> f32 { 44 // expected-error @+1 {{execution scope must be 'Workgroup' or 'Subgroup'}} 45 %0 = spv.GroupBroadcast Device %value, %localid : f32, vector<3xi32> 46 return %0: f32 47} 48 49// ----- 50 51func @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 = spv.GroupBroadcast Subgroup %value, %localid : f32, vector<3xf32> 54 return %0: f32 55} 56 57// ----- 58 59func @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 = spv.GroupBroadcast Subgroup %value, %localid : f32, vector<4xi32> 62 return %0: f32 63} 64 65// ----- 66 67//===----------------------------------------------------------------------===// 68// spv.SubgroupBallotKHR 69//===----------------------------------------------------------------------===// 70 71func @subgroup_ballot(%predicate: i1) -> vector<4xi32> { 72 %0 = spv.SubgroupBallotKHR %predicate: vector<4xi32> 73 return %0: vector<4xi32> 74} 75 76// ----- 77 78//===----------------------------------------------------------------------===// 79// spv.SubgroupBlockReadINTEL 80//===----------------------------------------------------------------------===// 81 82func @subgroup_block_read_intel(%ptr : !spv.ptr<i32, StorageBuffer>) -> i32 { 83 // CHECK: spv.SubgroupBlockReadINTEL %{{.*}} : i32 84 %0 = spv.SubgroupBlockReadINTEL "StorageBuffer" %ptr : i32 85 return %0: i32 86} 87 88// ----- 89 90func @subgroup_block_read_intel_vector(%ptr : !spv.ptr<i32, StorageBuffer>) -> vector<3xi32> { 91 // CHECK: spv.SubgroupBlockReadINTEL %{{.*}} : vector<3xi32> 92 %0 = spv.SubgroupBlockReadINTEL "StorageBuffer" %ptr : vector<3xi32> 93 return %0: vector<3xi32> 94} 95 96// ----- 97 98//===----------------------------------------------------------------------===// 99// spv.SubgroupBlockWriteINTEL 100//===----------------------------------------------------------------------===// 101 102func @subgroup_block_write_intel(%ptr : !spv.ptr<i32, StorageBuffer>, %value: i32) -> () { 103 // CHECK: spv.SubgroupBlockWriteINTEL %{{.*}}, %{{.*}} : i32 104 spv.SubgroupBlockWriteINTEL "StorageBuffer" %ptr, %value : i32 105 return 106} 107 108// ----- 109 110func @subgroup_block_write_intel_vector(%ptr : !spv.ptr<i32, StorageBuffer>, %value: vector<3xi32>) -> () { 111 // CHECK: spv.SubgroupBlockWriteINTEL %{{.*}}, %{{.*}} : vector<3xi32> 112 spv.SubgroupBlockWriteINTEL "StorageBuffer" %ptr, %value : vector<3xi32> 113 return 114} 115