brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.8 KiB · b04e560 Raw
301 lines · plain
1// RUN: mlir-opt -split-input-file -verify-diagnostics %s | FileCheck %s2 3// This test covers the Integer Dot Product ops defined in the4// SPV_KHR_integer_dot_product extension.5 6//===----------------------------------------------------------------------===//7// spirv.SDot8//===----------------------------------------------------------------------===//9 10// CHECK: @sdot_scalar_i3211func.func @sdot_scalar_i32(%a: i32, %b: i32) -> i32 {12  // CHECK-NEXT: spirv.SDot13  %r = spirv.SDot %a, %b, <PackedVectorFormat4x8Bit> : i32 -> i3214  return %r : i3215}16 17// CHECK: @sdot_scalar_i6418func.func @sdot_scalar_i64(%a: i32, %b: i32) -> i64 {19  // CHECK-NEXT: spirv.SDot20  %r = spirv.SDot %a, %b, <PackedVectorFormat4x8Bit> : i32 -> i6421  return %r : i6422}23 24// CHECK: @sdot_vector_4xi825func.func @sdot_vector_4xi8(%a: vector<4xi8>, %b: vector<4xi8>) -> i32 {26  // CHECK-NEXT: spirv.SDot27  %r = spirv.SDot %a, %b : vector<4xi8> -> i3228  return %r : i3229}30 31// CHECK: @sdot_vector_4xi1632func.func @sdot_vector_4xi16(%a: vector<4xi16>, %b: vector<4xi16>) -> i64 {33  // CHECK-NEXT: spirv.SDot34  %r = spirv.SDot %a, %b : vector<4xi16> -> i6435  return %r : i6436}37 38// CHECK: @sdot_vector_8xi839func.func @sdot_vector_8xi8(%a: vector<8xi8>, %b: vector<8xi8>) -> i64 {40  // CHECK-NEXT: spirv.SDot41  %r = spirv.SDot %a, %b : vector<8xi8> -> i6442  return %r : i6443}44 45// -----46 47// expected-note @+1 {{prior use here}}48func.func @sdot_scalar_bad_types(%a: i32, %b: i64) -> i32 {49  // expected-error @+1 {{use of value '%b' expects different type than prior uses: 'i32' vs 'i64'}}50  %r = spirv.SDot %a, %b : i32 -> i3251  return %r : i3252}53// -----54 55func.func @sdot_vector_4xi8_bad_attr(%a: vector<4xi8>, %b: vector<4xi8>) -> i32 {56  // expected-error @+1 {{op with invalid format attribute for vector operands of type 'vector<4xi8>'}}57  %r = spirv.SDot %a, %b, <PackedVectorFormat4x8Bit> : vector<4xi8> -> i3258  return %r : i3259}60 61// -----62 63func.func @sdot_scalar_bad_types(%a: i32, %b: i32) -> i16 {64  // expected-error @+1 {{op result type has insufficient bit-width (16 bits) for the specified vector operand type (32 bits)}}65  %r = spirv.SDot %a, %b, <PackedVectorFormat4x8Bit> : i32 -> i1666  return %r : i1667}68 69// -----70 71func.func @sdot_scalar_bad_types(%a: i64, %b: i64) -> i64 {72  // expected-error @+1 {{op with specified Packed Vector Format (PackedVectorFormat4x8Bit) requires integer vector operands to be 32-bits wide}}73  %r = spirv.SDot %a, %b, <PackedVectorFormat4x8Bit> : i64 -> i6474  return %r : i6475}76 77// -----78 79//===----------------------------------------------------------------------===//80// spirv.SUDot81//===----------------------------------------------------------------------===//82 83// CHECK: @sudot_scalar_i3284func.func @sudot_scalar_i32(%a: i32, %b: i32) -> i32 {85  // CHECK-NEXT: spirv.SUDot86  %r = spirv.SUDot %a, %b, <PackedVectorFormat4x8Bit> : i32 -> i3287  return %r : i3288}89 90// CHECK: @sudot_scalar_i6491func.func @sudot_scalar_i64(%a: i32, %b: i32) -> i64 {92  // CHECK-NEXT: spirv.SUDot93  %r = spirv.SUDot %a, %b, <PackedVectorFormat4x8Bit> : i32 -> i6494  return %r : i6495}96 97// CHECK: @sudot_vector_4xi898func.func @sudot_vector_4xi8(%a: vector<4xi8>, %b: vector<4xi8>) -> i32 {99  // CHECK-NEXT: spirv.SUDot100  %r = spirv.SUDot %a, %b : vector<4xi8> -> i32101  return %r : i32102}103 104// CHECK: @sudot_vector_4xi16105func.func @sudot_vector_4xi16(%a: vector<4xi16>, %b: vector<4xi16>) -> i64 {106  // CHECK-NEXT: spirv.SUDot107  %r = spirv.SUDot %a, %b : vector<4xi16> -> i64108  return %r : i64109}110 111// CHECK: @sudot_vector_8xi8112func.func @sudot_vector_8xi8(%a: vector<8xi8>, %b: vector<8xi8>) -> i64 {113  // CHECK-NEXT: spirv.SUDot114  %r = spirv.SUDot %a, %b : vector<8xi8> -> i64115  return %r : i64116}117 118// -----119 120//===----------------------------------------------------------------------===//121// spirv.UDot122//===----------------------------------------------------------------------===//123 124// CHECK: @udot_scalar_i32125func.func @udot_scalar_i32(%a: i32, %b: i32) -> i32 {126  // CHECK-NEXT: spirv.UDot127  %r = spirv.UDot %a, %b, <PackedVectorFormat4x8Bit> : i32 -> i32128  return %r : i32129}130 131// CHECK: @udot_scalar_i64132func.func @udot_scalar_i64(%a: i32, %b: i32) -> i64 {133  // CHECK-NEXT: spirv.UDot134  %r = spirv.UDot %a, %b, <PackedVectorFormat4x8Bit> : i32 -> i64135  return %r : i64136}137 138// CHECK: @udot_vector_4xi8139func.func @udot_vector_4xi8(%a: vector<4xi8>, %b: vector<4xi8>) -> i32 {140  // CHECK-NEXT: spirv.UDot141  %r = spirv.UDot %a, %b : vector<4xi8> -> i32142  return %r : i32143}144 145// -----146 147//===----------------------------------------------------------------------===//148// spirv.SDotAccSat149//===----------------------------------------------------------------------===//150 151// CHECK: @sdot_acc_sat_scalar_i32152func.func @sdot_acc_sat_scalar_i32(%a: i32, %b: i32, %acc : i32) -> i32 {153  // CHECK-NEXT: spirv.SDotAccSat154  %r = spirv.SDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i32 -> i32155  return %r : i32156}157 158// CHECK: @sdot_acc_sat_scalar_i64159func.func @sdot_acc_sat_scalar_i64(%a: i32, %b: i32, %acc : i64) -> i64 {160  // CHECK-NEXT: spirv.SDotAccSat161  %r = spirv.SDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i32 -> i64162  return %r : i64163}164 165// CHECK: @sdot_acc_sat_vector_4xi8166func.func @sdot_acc_sat_vector_4xi8(%a: vector<4xi8>, %b: vector<4xi8>, %acc : i32) -> i32 {167  // CHECK-NEXT: spirv.SDotAccSat168  %r = spirv.SDotAccSat %a, %b, %acc : vector<4xi8> -> i32169  return %r : i32170}171 172// CHECK: @sdot_acc_sat_vector_4xi16173func.func @sdot_acc_sat_vector_4xi16(%a: vector<4xi16>, %b: vector<4xi16>, %acc : i64) -> i64 {174  // CHECK-NEXT: spirv.SDotAccSat175  %r = spirv.SDotAccSat %a, %b, %acc : vector<4xi16> -> i64176  return %r : i64177}178 179// CHECK: @sdot_acc_sat_vector_8xi8180func.func @sdot_acc_sat_vector_8xi8(%a: vector<8xi8>, %b: vector<8xi8>, %acc : i64) -> i64 {181  // CHECK-NEXT: spirv.SDotAccSat182  %r = spirv.SDotAccSat %a, %b, %acc : vector<8xi8> -> i64183  return %r : i64184}185 186// -----187 188// expected-note @+1 {{prior use here}}189func.func @sdot_acc_sat_scalar_bad_types(%a: i32, %b: i64, %acc : i32) -> i32 {190  // expected-error @+1 {{use of value '%b' expects different type than prior uses: 'i32' vs 'i64'}}191  %r = spirv.SDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i32 -> i32192  return %r : i32193}194 195// -----196 197func.func @sdot_acc_sat_scalar_bad_types(%a: i32, %b: i32, %acc : i16) -> i16 {198  // expected-error @+1 {{op result type has insufficient bit-width (16 bits) for the specified vector operand type (32 bits)}}199  %r = spirv.SDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i32 -> i16200  return %r : i16201}202 203// -----204 205func.func @sdot_acc_sat_scalar_bad_types(%a: i64, %b: i64, %acc : i64) -> i64 {206  // expected-error @+1 {{op with specified Packed Vector Format (PackedVectorFormat4x8Bit) requires integer vector operands to be 32-bits wide}}207  %r = spirv.SDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i64 -> i64208  return %r : i64209}210 211// -----212 213// expected-note @+1 {{prior use here}}214func.func @sdot_acc_sat_scalar_bad_accumulator(%a: i32, %b: i32, %acc : i32) -> i64 {215  // expected-error @+1 {{use of value '%acc' expects different type than prior uses: 'i64' vs 'i32'}}216  %r = spirv.SDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i32 -> i64217  return %r : i64218}219 220// -----221 222//===----------------------------------------------------------------------===//223// spirv.SUDotAccSat224//===----------------------------------------------------------------------===//225 226// CHECK: @sudot_acc_sat_scalar_i32227func.func @sudot_acc_sat_scalar_i32(%a: i32, %b: i32, %acc : i32) -> i32 {228  // CHECK-NEXT: spirv.SUDotAccSat229  %r = spirv.SUDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i32 -> i32230  return %r : i32231}232 233// CHECK: @sudot_acc_sat_scalar_i64234func.func @sudot_acc_sat_scalar_i64(%a: i32, %b: i32, %acc : i64) -> i64 {235  // CHECK-NEXT: spirv.SUDotAccSat236  %r = spirv.SUDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i32 -> i64237  return %r : i64238}239 240// CHECK: @sudot_acc_sat_vector_4xi8241func.func @sudot_acc_sat_vector_4xi8(%a: vector<4xi8>, %b: vector<4xi8>, %acc : i32) -> i32 {242  // CHECK-NEXT: spirv.SUDotAccSat243  %r = spirv.SUDotAccSat %a, %b, %acc : vector<4xi8> -> i32244  return %r : i32245}246 247// CHECK: @sudot_acc_sat_vector_4xi16248func.func @sudot_acc_sat_vector_4xi16(%a: vector<4xi16>, %b: vector<4xi16>, %acc : i64) -> i64 {249  // CHECK-NEXT: spirv.SUDotAccSat250  %r = spirv.SUDotAccSat %a, %b, %acc : vector<4xi16> -> i64251  return %r : i64252}253 254// CHECK: @sudot_acc_sat_vector_8xi8255func.func @sudot_acc_sat_vector_8xi8(%a: vector<8xi8>, %b: vector<8xi8>, %acc : i64) -> i64 {256  // CHECK-NEXT: spirv.SUDotAccSat257  %r = spirv.SUDotAccSat %a, %b, %acc : vector<8xi8> -> i64258  return %r : i64259}260 261// -----262 263//===----------------------------------------------------------------------===//264// spirv.UDotAccSat265//===----------------------------------------------------------------------===//266 267// CHECK: @udot_acc_sat_scalar_i32268func.func @udot_acc_sat_scalar_i32(%a: i32, %b: i32, %acc : i32) -> i32 {269  // CHECK-NEXT: spirv.UDotAccSat270  %r = spirv.UDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i32 -> i32271  return %r : i32272}273 274// CHECK: @udot_acc_sat_scalar_i64275func.func @udot_acc_sat_scalar_i64(%a: i32, %b: i32, %acc : i64) -> i64 {276  // CHECK-NEXT: spirv.UDotAccSat277  %r = spirv.UDotAccSat %a, %b, %acc, <PackedVectorFormat4x8Bit> : i32 -> i64278  return %r : i64279}280 281// CHECK: @udot_acc_sat_vector_4xi8282func.func @udot_acc_sat_vector_4xi8(%a: vector<4xi8>, %b: vector<4xi8>, %acc : i32) -> i32 {283  // CHECK-NEXT: spirv.UDotAccSat284  %r = spirv.UDotAccSat %a, %b, %acc : vector<4xi8> -> i32285  return %r : i32286}287 288// CHECK: @udot_acc_sat_vector_4xi16289func.func @udot_acc_sat_vector_4xi16(%a: vector<4xi16>, %b: vector<4xi16>, %acc : i64) -> i64 {290  // CHECK-NEXT: spirv.UDotAccSat291  %r = spirv.UDotAccSat %a, %b, %acc : vector<4xi16> -> i64292  return %r : i64293}294 295// CHECK: @udot_acc_sat_vector_8xi8296func.func @udot_acc_sat_vector_8xi8(%a: vector<8xi8>, %b: vector<8xi8>, %acc : i64) -> i64 {297  // CHECK-NEXT: spirv.UDotAccSat298  %r = spirv.UDotAccSat %a, %b, %acc : vector<8xi8> -> i64299  return %r : i64300}301