443 lines · plain
1// RUN: mlir-opt -split-input-file -verify-diagnostics %s | FileCheck %s2 3//===----------------------------------------------------------------------===//4// spirv.CL.exp5//===----------------------------------------------------------------------===//6 7func.func @exp(%arg0 : f32) -> () {8 // CHECK: spirv.CL.exp {{%.*}} : f329 %2 = spirv.CL.exp %arg0 : f3210 return11}12 13func.func @expvec(%arg0 : vector<3xf16>) -> () {14 // CHECK: spirv.CL.exp {{%.*}} : vector<3xf16>15 %2 = spirv.CL.exp %arg0 : vector<3xf16>16 return17}18 19// -----20 21func.func @exp(%arg0 : i32) -> () {22 // expected-error @+1 {{op operand #0 must be 16/32/64-bit float or fixed-length vector of 16/32/64-bit float values}}23 %2 = spirv.CL.exp %arg0 : i3224 return25}26 27// -----28 29func.func @exp(%arg0 : vector<5xf32>) -> () {30 // expected-error @+1 {{op operand #0 must be 16/32/64-bit float or fixed-length vector of 16/32/64-bit float values of length 2/3/4}}31 %2 = spirv.CL.exp %arg0 : vector<5xf32>32 return33}34 35// -----36 37func.func @exp(%arg0 : f32, %arg1 : f32) -> () {38 // expected-error @+1 {{expected ':'}}39 %2 = spirv.CL.exp %arg0, %arg1 : i3240 return41}42 43// -----44 45func.func @exp(%arg0 : i32) -> () {46 // expected-error @+1 {{expected non-function type}}47 %2 = spirv.CL.exp %arg0 :48 return49}50 51// -----52 53//===----------------------------------------------------------------------===//54// spirv.CL.fabs55//===----------------------------------------------------------------------===//56 57func.func @fabs(%arg0 : f32) -> () {58 // CHECK: spirv.CL.fabs {{%.*}} : f3259 %2 = spirv.CL.fabs %arg0 : f3260 return61}62 63func.func @fabsvec(%arg0 : vector<3xf16>) -> () {64 // CHECK: spirv.CL.fabs {{%.*}} : vector<3xf16>65 %2 = spirv.CL.fabs %arg0 : vector<3xf16>66 return67}68 69func.func @fabsf64(%arg0 : f64) -> () {70 // CHECK: spirv.CL.fabs {{%.*}} : f6471 %2 = spirv.CL.fabs %arg0 : f6472 return73}74 75// -----76 77func.func @fabs(%arg0 : i32) -> () {78 // expected-error @+1 {{op operand #0 must be 16/32/64-bit float or fixed-length vector of 16/32/64-bit float values}}79 %2 = spirv.CL.fabs %arg0 : i3280 return81}82 83// -----84 85func.func @fabs(%arg0 : vector<5xf32>) -> () {86 // expected-error @+1 {{op operand #0 must be 16/32/64-bit float or fixed-length vector of 16/32/64-bit float values of length 2/3/4}}87 %2 = spirv.CL.fabs %arg0 : vector<5xf32>88 return89}90 91// -----92 93func.func @fabs(%arg0 : f32, %arg1 : f32) -> () {94 // expected-error @+1 {{expected ':'}}95 %2 = spirv.CL.fabs %arg0, %arg1 : i3296 return97}98 99// -----100 101func.func @fabs(%arg0 : i32) -> () {102 // expected-error @+1 {{expected non-function type}}103 %2 = spirv.CL.fabs %arg0 :104 return105}106 107// -----108 109//===----------------------------------------------------------------------===//110// spirv.CL.s_abs111//===----------------------------------------------------------------------===//112 113func.func @sabs(%arg0 : i32) -> () {114 // CHECK: spirv.CL.s_abs {{%.*}} : i32115 %2 = spirv.CL.s_abs %arg0 : i32116 return117}118 119func.func @sabsvec(%arg0 : vector<3xi16>) -> () {120 // CHECK: spirv.CL.s_abs {{%.*}} : vector<3xi16>121 %2 = spirv.CL.s_abs %arg0 : vector<3xi16>122 return123}124 125func.func @sabsi64(%arg0 : i64) -> () {126 // CHECK: spirv.CL.s_abs {{%.*}} : i64127 %2 = spirv.CL.s_abs %arg0 : i64128 return129}130 131func.func @sabsi8(%arg0 : i8) -> () {132 // CHECK: spirv.CL.s_abs {{%.*}} : i8133 %2 = spirv.CL.s_abs %arg0 : i8134 return135}136 137// -----138 139func.func @sabs(%arg0 : f32) -> () {140 // expected-error @+1 {{op operand #0 must be 8/16/32/64-bit integer or fixed-length vector of 8/16/32/64-bit integer values}}141 %2 = spirv.CL.s_abs %arg0 : f32142 return143}144 145// -----146 147func.func @sabs(%arg0 : vector<5xi32>) -> () {148 // expected-error @+1 {{op operand #0 must be 8/16/32/64-bit integer or fixed-length vector of 8/16/32/64-bit integer values of length 2/3/4}}149 %2 = spirv.CL.s_abs %arg0 : vector<5xi32>150 return151}152 153// -----154 155func.func @sabs(%arg0 : i32, %arg1 : i32) -> () {156 // expected-error @+1 {{expected ':'}}157 %2 = spirv.CL.s_abs %arg0, %arg1 : i32158 return159}160 161// -----162 163func.func @sabs(%arg0 : i32) -> () {164 // expected-error @+1 {{expected non-function type}}165 %2 = spirv.CL.s_abs %arg0 :166 return167}168 169// -----170 171//===----------------------------------------------------------------------===//172// spirv.CL.fma173//===----------------------------------------------------------------------===//174 175func.func @fma(%a : f32, %b : f32, %c : f32) -> () {176 // CHECK: spirv.CL.fma {{%[^,]*}}, {{%[^,]*}}, {{%[^,]*}} : f32177 %2 = spirv.CL.fma %a, %b, %c : f32178 return179}180 181// -----182 183func.func @fma(%a : vector<3xf32>, %b : vector<3xf32>, %c : vector<3xf32>) -> () {184 // CHECK: spirv.CL.fma {{%[^,]*}}, {{%[^,]*}}, {{%[^,]*}} : vector<3xf32>185 %2 = spirv.CL.fma %a, %b, %c : vector<3xf32>186 return187}188 189// -----190 191//===----------------------------------------------------------------------===//192// spirv.CL.mix193//===----------------------------------------------------------------------===//194 195func.func @mix(%a : f32, %b : f32, %c : f32) -> () {196 // CHECK: spirv.CL.mix {{%[^,]*}}, {{%[^,]*}}, {{%[^,]*}} : f32197 %2 = spirv.CL.mix %a, %b, %c : f32198 return199}200 201// -----202 203func.func @mix(%a : vector<3xf32>, %b : vector<3xf32>, %c : vector<3xf32>) -> () {204 // CHECK: spirv.CL.mix {{%[^,]*}}, {{%[^,]*}}, {{%[^,]*}} : vector<3xf32>205 %2 = spirv.CL.mix %a, %b, %c : vector<3xf32>206 return207}208 209// -----210 211//===----------------------------------------------------------------------===//212// spirv.CL.{F|S|U}{Max|Min}213//===----------------------------------------------------------------------===//214 215func.func @fmaxmin(%arg0 : f32, %arg1 : f32) {216 // CHECK: spirv.CL.fmax {{%.*}}, {{%.*}} : f32217 %1 = spirv.CL.fmax %arg0, %arg1 : f32218 // CHECK: spirv.CL.fmin {{%.*}}, {{%.*}} : f32219 %2 = spirv.CL.fmin %arg0, %arg1 : f32220 return221}222 223func.func @fmaxminvec(%arg0 : vector<3xf16>, %arg1 : vector<3xf16>) {224 // CHECK: spirv.CL.fmax {{%.*}}, {{%.*}} : vector<3xf16>225 %1 = spirv.CL.fmax %arg0, %arg1 : vector<3xf16>226 // CHECK: spirv.CL.fmin {{%.*}}, {{%.*}} : vector<3xf16>227 %2 = spirv.CL.fmin %arg0, %arg1 : vector<3xf16>228 return229}230 231func.func @fmaxminf64(%arg0 : f64, %arg1 : f64) {232 // CHECK: spirv.CL.fmax {{%.*}}, {{%.*}} : f64233 %1 = spirv.CL.fmax %arg0, %arg1 : f64234 // CHECK: spirv.CL.fmin {{%.*}}, {{%.*}} : f64235 %2 = spirv.CL.fmin %arg0, %arg1 : f64236 return237}238 239func.func @iminmax(%arg0: i32, %arg1: i32) {240 // CHECK: spirv.CL.s_max {{%.*}}, {{%.*}} : i32241 %1 = spirv.CL.s_max %arg0, %arg1 : i32242 // CHECK: spirv.CL.u_max {{%.*}}, {{%.*}} : i32243 %2 = spirv.CL.u_max %arg0, %arg1 : i32244 // CHECK: spirv.CL.s_min {{%.*}}, {{%.*}} : i32245 %3 = spirv.CL.s_min %arg0, %arg1 : i32246 // CHECK: spirv.CL.u_min {{%.*}}, {{%.*}} : i32247 %4 = spirv.CL.u_min %arg0, %arg1 : i32248 return249}250 251// -----252 253//===----------------------------------------------------------------------===//254// spirv.CL.rint255//===----------------------------------------------------------------------===//256 257// CHECK-LABEL: func.func @rint(258func.func @rint(%arg0 : f32) -> () {259 // CHECK: spirv.CL.rint {{%.*}} : f32260 %0 = spirv.CL.rint %arg0 : f32261 return262}263 264// CHECK-LABEL: func.func @rintvec(265func.func @rintvec(%arg0 : vector<3xf16>) -> () {266 // CHECK: spirv.CL.rint {{%.*}} : vector<3xf16>267 %0 = spirv.CL.rint %arg0 : vector<3xf16>268 return269}270 271// -----272 273//===----------------------------------------------------------------------===//274// spirv.CL.printf275//===----------------------------------------------------------------------===//276// CHECK-LABEL: func.func @printf(277func.func @printf(%fmt : !spirv.ptr<i8, UniformConstant>, %arg1 : i32, %arg2 : i32) -> i32 {278 // CHECK: spirv.CL.printf {{%.*}} {{%.*}}, {{%.*}} : !spirv.ptr<i8, UniformConstant>, i32, i32 -> i32279 %0 = spirv.CL.printf %fmt %arg1, %arg2 : !spirv.ptr<i8, UniformConstant>, i32, i32 -> i32280 return %0 : i32281}282 283// -----284 285func.func @tan(%arg0 : f32) -> () {286 // CHECK: spirv.CL.tan {{%.*}} : f32287 %2 = spirv.CL.tan %arg0 : f32288 return289}290 291// -----292 293func.func @tan(%arg0 : vector<4xf16>) -> () {294 // CHECK: spirv.CL.tan {{%.*}} : vector<4xf16>295 %2 = spirv.CL.tan %arg0 : vector<4xf16>296 return297}298 299// -----300 301func.func @atan(%arg0 : f32) -> () {302 // CHECK: spirv.CL.atan {{%.*}} : f32303 %2 = spirv.CL.atan %arg0 : f32304 return305}306 307// -----308 309func.func @atan(%arg0 : vector<4xf16>) -> () {310 // CHECK: spirv.CL.atan {{%.*}} : vector<4xf16>311 %2 = spirv.CL.atan %arg0 : vector<4xf16>312 return313}314 315// -----316 317func.func @atanh(%arg0 : f32) -> () {318 // CHECK: spirv.CL.atanh {{%.*}} : f32319 %2 = spirv.CL.atanh %arg0 : f32320 return321}322 323// -----324 325func.func @atanh(%arg0 : vector<4xf16>) -> () {326 // CHECK: spirv.CL.atanh {{%.*}} : vector<4xf16>327 %2 = spirv.CL.atanh %arg0 : vector<4xf16>328 return329}330 331// -----332 333func.func @sinh(%arg0 : f32) -> () {334 // CHECK: spirv.CL.sinh {{%.*}} : f32335 %2 = spirv.CL.sinh %arg0 : f32336 return337}338 339// -----340 341func.func @sinh(%arg0 : vector<4xf16>) -> () {342 // CHECK: spirv.CL.sinh {{%.*}} : vector<4xf16>343 %2 = spirv.CL.sinh %arg0 : vector<4xf16>344 return345}346 347// -----348 349func.func @cosh(%arg0 : f32) -> () {350 // CHECK: spirv.CL.cosh {{%.*}} : f32351 %2 = spirv.CL.cosh %arg0 : f32352 return353}354 355// -----356 357func.func @cosh(%arg0 : vector<4xf16>) -> () {358 // CHECK: spirv.CL.cosh {{%.*}} : vector<4xf16>359 %2 = spirv.CL.cosh %arg0 : vector<4xf16>360 return361}362 363// -----364 365func.func @asin(%arg0 : f32) -> () {366 // CHECK: spirv.CL.asin {{%.*}} : f32367 %2 = spirv.CL.asin %arg0 : f32368 return369}370 371// -----372 373func.func @asin(%arg0 : vector<4xf16>) -> () {374 // CHECK: spirv.CL.asin {{%.*}} : vector<4xf16>375 %2 = spirv.CL.asin %arg0 : vector<4xf16>376 return377}378 379// -----380 381func.func @asinh(%arg0 : f32) -> () {382 // CHECK: spirv.CL.asinh {{%.*}} : f32383 %2 = spirv.CL.asinh %arg0 : f32384 return385}386 387// -----388 389func.func @asinh(%arg0 : vector<4xf16>) -> () {390 // CHECK: spirv.CL.asinh {{%.*}} : vector<4xf16>391 %2 = spirv.CL.asinh %arg0 : vector<4xf16>392 return393}394 395// -----396 397func.func @acos(%arg0 : f32) -> () {398 // CHECK: spirv.CL.acos {{%.*}} : f32399 %2 = spirv.CL.acos %arg0 : f32400 return401}402 403// -----404 405func.func @acos(%arg0 : vector<4xf16>) -> () {406 // CHECK: spirv.CL.acos {{%.*}} : vector<4xf16>407 %2 = spirv.CL.acos %arg0 : vector<4xf16>408 return409}410 411// -----412 413func.func @acosh(%arg0 : f32) -> () {414 // CHECK: spirv.CL.acosh {{%.*}} : f32415 %2 = spirv.CL.acosh %arg0 : f32416 return417}418 419// -----420 421func.func @acosh(%arg0 : vector<4xf16>) -> () {422 // CHECK: spirv.CL.acosh {{%.*}} : vector<4xf16>423 %2 = spirv.CL.acosh %arg0 : vector<4xf16>424 return425}426 427// -----428 429func.func @atan2(%arg0 : f32, %arg1 : f32) -> () {430 // CHECK: spirv.CL.atan2 {{%.*}}, {{%.*}} : f32431 %2 = spirv.CL.atan2 %arg0, %arg1 : f32432 return433}434 435// -----436 437func.func @atan2(%arg0 : vector<4xf16>, %arg1 : vector<4xf16>) -> () {438 // CHECK: spirv.CL.atan2 {{%.*}}, {{%.*}} : vector<4xf16>439 %2 = spirv.CL.atan2 %arg0, %arg1 : vector<4xf16>440 return441}442 443