brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.8 KiB · d7a4a6d Raw
259 lines · plain
1// RUN: mlir-opt -split-input-file -verify-diagnostics %s | FileCheck %s2 3//===----------------------------------------------------------------------===//4// spirv.KHR.SubgroupBallot5//===----------------------------------------------------------------------===//6 7func.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>11}12 13// -----14 15//===----------------------------------------------------------------------===//16// spirv.GroupBroadcast17//===----------------------------------------------------------------------===//18 19func.func @group_broadcast_scalar(%value: f32, %localid: i32 ) -> f32 {20  // CHECK: spirv.GroupBroadcast <Workgroup> %{{.*}}, %{{.*}} : f32, i3221  %0 = spirv.GroupBroadcast <Workgroup> %value, %localid : f32, i3222  return %0: f3223}24 25// -----26 27func.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: f3231}32 33// -----34 35func.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>39}40 41// -----42 43func.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: f3247}48 49// -----50 51func.func @group_broadcast_negative_locid_dtype(%value: f32, %localid: vector<3xf32> ) -> f32 {52  // expected-error @+1 {{op operand #1 must be 8/16/32/64-bit integer or fixed-length vector of 8/16/32/64-bit integer values}}53  %0 = spirv.GroupBroadcast <Subgroup> %value, %localid : f32, vector<3xf32>54  return %0: f3255}56 57// -----58 59func.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: f3263}64 65// -----66 67//===----------------------------------------------------------------------===//68// spirv.KHR.SubgroupBallot69//===----------------------------------------------------------------------===//70 71func.func @subgroup_ballot(%predicate: i1) -> vector<4xi32> {72  %0 = spirv.KHR.SubgroupBallot %predicate: vector<4xi32>73  return %0: vector<4xi32>74}75 76// -----77 78//===----------------------------------------------------------------------===//79// spirv.INTEL.SubgroupBlockRead80//===----------------------------------------------------------------------===//81 82func.func @subgroup_block_read_intel(%ptr : !spirv.ptr<i32, StorageBuffer>) -> i32 {83  // CHECK: spirv.INTEL.SubgroupBlockRead %{{.*}} : !spirv.ptr<i32, StorageBuffer> -> i3284  %0 = spirv.INTEL.SubgroupBlockRead %ptr : !spirv.ptr<i32, StorageBuffer> -> i3285  return %0: i3286}87 88// -----89 90func.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>94}95 96// -----97 98//===----------------------------------------------------------------------===//99// spirv.INTEL.SubgroupBlockWrite100//===----------------------------------------------------------------------===//101 102func.func @subgroup_block_write_intel(%ptr : !spirv.ptr<i32, StorageBuffer>, %value: i32) -> () {103  // CHECK: spirv.INTEL.SubgroupBlockWrite %{{.*}}, %{{.*}} : i32104  spirv.INTEL.SubgroupBlockWrite "StorageBuffer" %ptr, %value : i32105  return106}107 108// -----109 110func.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  return114}115 116// -----117 118//===----------------------------------------------------------------------===//119// Group ops120//===----------------------------------------------------------------------===//121 122func.func @group_iadd(%value: i32) -> i32 {123  // CHECK: spirv.GroupIAdd <Workgroup> <Reduce> %{{.*}} : i32124  %0 = spirv.GroupIAdd <Workgroup> <Reduce> %value : i32125  return %0: i32126}127 128// -----129 130func.func @group_fadd(%value: f32) -> f32 {131  // CHECK: spirv.GroupFAdd <Workgroup> <Reduce> %{{.*}} : f32132  %0 = spirv.GroupFAdd <Workgroup> <Reduce> %value : f32133  return %0: f32134}135 136// -----137 138func.func @group_fmin(%value: f32) -> f32 {139  // CHECK: spirv.GroupFMin <Workgroup> <Reduce> %{{.*}} : f32140  %0 = spirv.GroupFMin <Workgroup> <Reduce> %value : f32141  return %0: f32142}143 144// -----145 146func.func @group_umin(%value: i32) -> i32 {147  // CHECK: spirv.GroupUMin <Workgroup> <Reduce> %{{.*}} : i32148  %0 = spirv.GroupUMin <Workgroup> <Reduce> %value : i32149  return %0: i32150}151 152// -----153 154func.func @group_smin(%value: i32) -> i32 {155  // CHECK: spirv.GroupSMin <Workgroup> <Reduce> %{{.*}} : i32156  %0 = spirv.GroupSMin <Workgroup> <Reduce> %value : i32157  return %0: i32158}159 160// -----161 162func.func @group_fmax(%value: f32) -> f32 {163  // CHECK: spirv.GroupFMax <Workgroup> <Reduce> %{{.*}} : f32164  %0 = spirv.GroupFMax <Workgroup> <Reduce> %value : f32165  return %0: f32166}167 168// -----169 170func.func @group_umax(%value: i32) -> i32 {171  // CHECK: spirv.GroupUMax <Workgroup> <Reduce> %{{.*}} : i32172  %0 = spirv.GroupUMax <Workgroup> <Reduce> %value : i32173  return %0: i32174}175 176// -----177 178func.func @group_smax(%value: i32) -> i32 {179  // CHECK: spirv.GroupSMax <Workgroup> <Reduce> %{{.*}} : i32180  %0 = spirv.GroupSMax <Workgroup> <Reduce> %value : i32181  return %0: i32182}183 184// -----185 186func.func @group_imul(%value: i32) -> i32 {187  // CHECK: spirv.KHR.GroupIMul <Workgroup> <Reduce> %{{.*}} : i32188  %0 = spirv.KHR.GroupIMul <Workgroup> <Reduce> %value : i32189  return %0: i32190}191 192// -----193 194func.func @group_fmul(%value: f32) -> f32 {195  // CHECK: spirv.KHR.GroupFMul <Workgroup> <Reduce> %{{.*}} : f32196  %0 = spirv.KHR.GroupFMul <Workgroup> <Reduce> %value : f32197  return %0: f32198}199 200// -----201 202//===----------------------------------------------------------------------===//203// spirv.GroupNonUniformBallotBitCount 204//===----------------------------------------------------------------------===//205 206func.func @group_non_uniform_ballot_bit_count(%value: vector<4xi32>) -> i32 {207  // CHECK: {{%.*}} = spirv.GroupNonUniformBallotBitCount <Subgroup> <Reduce> {{%.*}} : vector<4xi32> -> i32208  %0 = spirv.GroupNonUniformBallotBitCount <Subgroup> <Reduce> %value : vector<4xi32> -> i32209  return %0: i32210}211 212// -----213 214func.func @group_non_uniform_ballot_bit_count_wrong_scope(%value: vector<4xi32>) -> i32 {215  // expected-error @+1 {{execution_scope must be Scope of value Subgroup}}216  %0 = spirv.GroupNonUniformBallotBitCount <Workgroup> <Reduce> %value : vector<4xi32> -> i32217  return %0: i32218}219 220// -----221 222func.func @group_non_uniform_ballot_bit_count_wrong_value_len(%value: vector<3xi32>) -> i32 {223  // expected-error @+1 {{operand #0 must be vector of 32-bit signless/unsigned integer values of length 4, but got 'vector<3xi32>'}}224  %0 = spirv.GroupNonUniformBallotBitCount <Subgroup> <InclusiveScan> %value : vector<3xi32> -> i32225  return %0: i32226}227 228// -----229 230func.func @group_non_uniform_ballot_bit_count_wrong_value_type(%value: vector<4xi8>) -> i32 {231  // expected-error @+1 {{operand #0 must be vector of 32-bit signless/unsigned integer values of length 4, but got 'vector<4xi8>'}}232  %0 = spirv.GroupNonUniformBallotBitCount <Subgroup> <InclusiveScan> %value : vector<4xi8> -> i32233  return %0: i32234}235 236// -----237 238func.func @group_non_uniform_ballot_bit_count_value_sign(%value: vector<4xsi32>) -> i32 {239  // expected-error @+1 {{operand #0 must be vector of 32-bit signless/unsigned integer values of length 4, but got 'vector<4xsi32>'}}240  %0 = spirv.GroupNonUniformBallotBitCount <Subgroup> <InclusiveScan> %value : vector<4xsi32> -> i32241  return %0: i32242}243 244// -----245 246func.func @group_non_uniform_ballot_bit_count_wrong_result_type(%value: vector<4xi32>) -> f32 {247  // expected-error @+1 {{result #0 must be 8/16/32/64-bit signless/unsigned integer, but got 'f32'}}248  %0 = spirv.GroupNonUniformBallotBitCount <Subgroup> <InclusiveScan> %value : vector<4xi32> -> f32249  return %0: f32250}251 252// -----253 254func.func @group_non_uniform_ballot_bit_count_wrong_result_sign(%value: vector<4xi32>) -> si32 {255  // expected-error @+1 {{result #0 must be 8/16/32/64-bit signless/unsigned integer, but got 'si32'}}256  %0 = spirv.GroupNonUniformBallotBitCount <Subgroup> <InclusiveScan> %value : vector<4xi32> -> si32257  return %0: si32258}259