brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.2 KiB · 4480a1f Raw
528 lines · plain
1// RUN: mlir-opt -split-input-file -verify-diagnostics %s | FileCheck %s2 3//===----------------------------------------------------------------------===//4// spirv.Bitcast5//===----------------------------------------------------------------------===//6 7func.func @cast1(%arg0 : f32) {8  // CHECK: {{%.*}} = spirv.Bitcast {{%.*}} : f32 to i329  %0 = spirv.Bitcast %arg0 : f32 to i3210  return11}12 13func.func @cast2(%arg0 : vector<2xf32>) {14  // CHECK: {{%.*}} = spirv.Bitcast {{%.*}} : vector<2xf32> to vector<2xi32>15  %0 = spirv.Bitcast %arg0 : vector<2xf32> to vector<2xi32>16  return17}18 19func.func @cast3(%arg0 : vector<2xf32>) {20  // CHECK: {{%.*}} = spirv.Bitcast {{%.*}} : vector<2xf32> to i6421  %0 = spirv.Bitcast %arg0 : vector<2xf32> to i6422  return23}24 25func.func @cast4(%arg0 : !spirv.ptr<f32, Function>) {26  // CHECK: {{%.*}} = spirv.Bitcast {{%.*}} : !spirv.ptr<f32, Function> to !spirv.ptr<i32, Function>27  %0 = spirv.Bitcast %arg0 : !spirv.ptr<f32, Function> to !spirv.ptr<i32, Function>28  return29}30 31func.func @cast5(%arg0 : !spirv.ptr<f32, Function>) {32  // CHECK: {{%.*}} = spirv.Bitcast {{%.*}} : !spirv.ptr<f32, Function> to !spirv.ptr<vector<2xi32>, Function>33  %0 = spirv.Bitcast %arg0 : !spirv.ptr<f32, Function> to !spirv.ptr<vector<2xi32>, Function>34  return35}36 37func.func @cast6(%arg0 : vector<4xf32>) {38  // CHECK: {{%.*}} = spirv.Bitcast {{%.*}} : vector<4xf32> to vector<2xi64>39  %0 = spirv.Bitcast %arg0 : vector<4xf32> to vector<2xi64>40  return41}42 43// -----44 45func.func @cast1(%arg0 : f32) {46  // expected-error @+1 {{result type must be different from operand type}}47  %0 = spirv.Bitcast %arg0 : f32 to f3248  return49}50 51// -----52 53func.func @cast1(%arg0 : f32) {54  // expected-error @+1 {{mismatch in result type bitwidth 64 and operand type bitwidth 32}}55  %0 = spirv.Bitcast %arg0 : f32 to i6456  return57}58 59// -----60 61func.func @cast1(%arg0 : vector<2xf32>) {62  // expected-error @+1 {{mismatch in result type bitwidth 96 and operand type bitwidth 64}}63  %0 = spirv.Bitcast %arg0 : vector<2xf32> to vector<3xf32>64  return65}66 67// -----68 69func.func @cast3(%arg0 : !spirv.ptr<f32, Function>) {70  // expected-error @+1 {{unhandled bit cast conversion from pointer type to non-pointer type}}71  %0 = spirv.Bitcast %arg0 : !spirv.ptr<f32, Function> to i6472  return73}74 75// -----76 77func.func @cast3(%arg0 : i64) {78  // expected-error @+1 {{unhandled bit cast conversion from non-pointer type to pointer type}}79  %0 = spirv.Bitcast %arg0 : i64 to !spirv.ptr<f32, Function>80  return81}82 83// -----84 85//===----------------------------------------------------------------------===//86// spirv.ConvertFToS87//===----------------------------------------------------------------------===//88 89func.func @convert_f_to_s_scalar(%arg0 : f32) -> i32 {90  // CHECK: {{%.*}} = spirv.ConvertFToS {{%.*}} : f32 to i3291  %0 = spirv.ConvertFToS %arg0 : f32 to i3292  spirv.ReturnValue %0 : i3293}94 95// -----96 97func.func @convert_f64_to_s32_scalar(%arg0 : f64) -> i32 {98  // CHECK: {{%.*}} = spirv.ConvertFToS {{%.*}} : f64 to i3299  %0 = spirv.ConvertFToS %arg0 : f64 to i32100  spirv.ReturnValue %0 : i32101}102 103// -----104 105func.func @convert_f_to_s_vector(%arg0 : vector<3xf32>) -> vector<3xi32> {106  // CHECK: {{%.*}} = spirv.ConvertFToS {{%.*}} : vector<3xf32> to vector<3xi32>107  %0 = spirv.ConvertFToS %arg0 : vector<3xf32> to vector<3xi32>108  spirv.ReturnValue %0 : vector<3xi32>109}110 111// -----112 113func.func @convert_bf16_to_s32_scalar(%arg0 : bf16) -> i32 {114  // CHECK: {{%.*}} = spirv.ConvertFToS {{%.*}} : bf16 to i32115  %0 = spirv.ConvertFToS %arg0 : bf16 to i32116  spirv.ReturnValue %0 : i32117}118 119// -----120 121//===----------------------------------------------------------------------===//122// spirv.ConvertFToU123//===----------------------------------------------------------------------===//124 125func.func @convert_f_to_u_scalar(%arg0 : f32) -> i32 {126  // CHECK: {{%.*}} = spirv.ConvertFToU {{%.*}} : f32 to i32127  %0 = spirv.ConvertFToU %arg0 : f32 to i32128  spirv.ReturnValue %0 : i32129}130 131// -----132 133func.func @convert_f64_to_u32_scalar(%arg0 : f64) -> i32 {134  // CHECK: {{%.*}} = spirv.ConvertFToU {{%.*}} : f64 to i32135  %0 = spirv.ConvertFToU %arg0 : f64 to i32136  spirv.ReturnValue %0 : i32137}138 139// -----140 141func.func @convert_f_to_u_vector(%arg0 : vector<3xf32>) -> vector<3xi32> {142  // CHECK: {{%.*}} = spirv.ConvertFToU {{%.*}} : vector<3xf32> to vector<3xi32>143  %0 = spirv.ConvertFToU %arg0 : vector<3xf32> to vector<3xi32>144  spirv.ReturnValue %0 : vector<3xi32>145}146 147// -----148 149func.func @convert_f_to_u.coopmatrix(%arg0 : !spirv.coopmatrix<8x16xf32, Subgroup, MatrixB>) {150  // CHECK: {{%.*}} = spirv.ConvertFToU {{%.*}} : !spirv.coopmatrix<8x16xf32, Subgroup, MatrixB> to !spirv.coopmatrix<8x16xi32, Subgroup, MatrixB>151  %0 = spirv.ConvertFToU %arg0 : !spirv.coopmatrix<8x16xf32, Subgroup, MatrixB> to !spirv.coopmatrix<8x16xi32, Subgroup, MatrixB>152  spirv.Return153}154 155// -----156 157func.func @convert_bf16_to_u32_scalar(%arg0 : bf16) -> i32 {158  // CHECK: {{%.*}} = spirv.ConvertFToU {{%.*}} : bf16 to i32159  %0 = spirv.ConvertFToU %arg0 : bf16 to i32160  spirv.ReturnValue %0 : i32161}162 163// -----164 165//===----------------------------------------------------------------------===//166// spirv.ConvertSToF167//===----------------------------------------------------------------------===//168 169func.func @convert_s_to_f_scalar(%arg0 : i32) -> f32 {170  // CHECK: {{%.*}} = spirv.ConvertSToF {{%.*}} : i32 to f32171  %0 = spirv.ConvertSToF %arg0 : i32 to f32172  spirv.ReturnValue %0 : f32173}174 175// -----176 177func.func @convert_s64_to_f32_scalar(%arg0 : i64) -> f32 {178  // CHECK: {{%.*}} = spirv.ConvertSToF {{%.*}} : i64 to f32179  %0 = spirv.ConvertSToF %arg0 : i64 to f32180  spirv.ReturnValue %0 : f32181}182 183// -----184 185func.func @convert_s_to_f_vector(%arg0 : vector<3xi32>) -> vector<3xf32> {186  // CHECK: {{%.*}} = spirv.ConvertSToF {{%.*}} : vector<3xi32> to vector<3xf32>187  %0 = spirv.ConvertSToF %arg0 : vector<3xi32> to vector<3xf32>188  spirv.ReturnValue %0 : vector<3xf32>189}190 191// -----192 193func.func @convert_s32_to_bf16_scalar(%arg0 : i32) -> bf16 {194  // CHECK: {{%.*}} = spirv.ConvertSToF {{%.*}} : i32 to bf16195  %0 = spirv.ConvertSToF %arg0 : i32 to bf16196  spirv.ReturnValue %0 : bf16197}198 199// -----200 201//===----------------------------------------------------------------------===//202// spirv.ConvertUToF203//===----------------------------------------------------------------------===//204 205func.func @convert_u_to_f_scalar(%arg0 : i32) -> f32 {206  // CHECK: {{%.*}} = spirv.ConvertUToF {{%.*}} : i32 to f32207  %0 = spirv.ConvertUToF %arg0 : i32 to f32208  spirv.ReturnValue %0 : f32209}210 211// -----212 213func.func @convert_u64_to_f32_scalar(%arg0 : i64) -> f32 {214  // CHECK: {{%.*}} = spirv.ConvertUToF {{%.*}} : i64 to f32215  %0 = spirv.ConvertUToF %arg0 : i64 to f32216  spirv.ReturnValue %0 : f32217}218 219// -----220 221func.func @convert_u_to_f_vector(%arg0 : vector<3xi32>) -> vector<3xf32> {222  // CHECK: {{%.*}} = spirv.ConvertUToF {{%.*}} : vector<3xi32> to vector<3xf32>223  %0 = spirv.ConvertUToF %arg0 : vector<3xi32> to vector<3xf32>224  spirv.ReturnValue %0 : vector<3xf32>225}226 227// -----228 229func.func @convert_u32_to_bf16_scalar(%arg0 : i32) -> bf16 {230  // CHECK: {{%.*}} = spirv.ConvertUToF {{%.*}} : i32 to bf16231  %0 = spirv.ConvertUToF %arg0 : i32 to bf16232  spirv.ReturnValue %0 : bf16233}234 235// -----236 237//===----------------------------------------------------------------------===//238// spirv.FConvert239//===----------------------------------------------------------------------===//240 241func.func @f_convert_scalar(%arg0 : f32) -> f64 {242  // CHECK: {{%.*}} = spirv.FConvert {{%.*}} : f32 to f64243  %0 = spirv.FConvert %arg0 : f32 to f64244  spirv.ReturnValue %0 : f64245}246 247// -----248 249func.func @f_convert_vector(%arg0 : vector<3xf32>) -> vector<3xf64> {250  // CHECK: {{%.*}} = spirv.FConvert {{%.*}} : vector<3xf32> to vector<3xf64>251  %0 = spirv.FConvert %arg0 : vector<3xf32> to vector<3xf64>252  spirv.ReturnValue %0 : vector<3xf64>253}254 255// -----256 257func.func @f_convert_coop_matrix(%arg0 : !spirv.coopmatrix<8x16xf32, Subgroup, MatrixA>) {258  // CHECK: {{%.*}} = spirv.FConvert {{%.*}} : !spirv.coopmatrix<8x16xf32, Subgroup, MatrixA> to !spirv.coopmatrix<8x16xf64, Subgroup, MatrixA>259  %0 = spirv.FConvert %arg0 : !spirv.coopmatrix<8x16xf32, Subgroup, MatrixA> to !spirv.coopmatrix<8x16xf64, Subgroup, MatrixA>260  spirv.Return261}262 263// -----264 265func.func @f_convert_vector(%arg0 : f32) -> f32 {266  // expected-error @+1 {{expected the different bit widths for operand type and result type, but provided 'f32' and 'f32'}}267  %0 = spirv.FConvert %arg0 : f32 to f32268  spirv.ReturnValue %0 : f32269}270 271// -----272 273func.func @f_convert_bf16_to_f32_scalar(%arg0 : bf16) -> f32 {274  // CHECK: {{%.*}} = spirv.FConvert {{%.*}} : bf16 to f32275  %0 = spirv.FConvert %arg0 : bf16 to f32276  spirv.ReturnValue %0 : f32277}278 279// -----280 281func.func @f_convert_f32_to_bf16_vector(%arg0 : vector<3xf32>) -> vector<3xbf16> {282  // CHECK: {{%.*}} = spirv.FConvert {{%.*}} : vector<3xf32> to vector<3xbf16>283  %0 = spirv.FConvert %arg0 : vector<3xf32> to vector<3xbf16>284  spirv.ReturnValue %0 : vector<3xbf16>285}286 287// -----288 289func.func @f_convert_f32_to_bf16_coop_matrix(%arg0 : !spirv.coopmatrix<8x16xf32, Subgroup, MatrixA>) -> !spirv.coopmatrix<8x16xbf16, Subgroup, MatrixA> {290  // CHECK: {{%.*}} = spirv.FConvert {{%.*}} : !spirv.coopmatrix<8x16xf32, Subgroup, MatrixA> to !spirv.coopmatrix<8x16xbf16, Subgroup, MatrixA>291  %0 = spirv.FConvert %arg0 : !spirv.coopmatrix<8x16xf32, Subgroup, MatrixA> to !spirv.coopmatrix<8x16xbf16, Subgroup, MatrixA>292  spirv.ReturnValue %0 : !spirv.coopmatrix<8x16xbf16, Subgroup, MatrixA>293}294 295// -----296 297//===----------------------------------------------------------------------===//298// spirv.SConvert299//===----------------------------------------------------------------------===//300 301func.func @s_convert_scalar(%arg0 : i32) -> i64 {302  // CHECK: {{%.*}} = spirv.SConvert {{%.*}} : i32 to i64303  %0 = spirv.SConvert %arg0 : i32 to i64304  spirv.ReturnValue %0 : i64305}306 307// -----308 309//===----------------------------------------------------------------------===//310// spirv.UConvert311//===----------------------------------------------------------------------===//312 313func.func @u_convert_scalar(%arg0 : i32) -> i64 {314  // CHECK: {{%.*}} = spirv.UConvert {{%.*}} : i32 to i64315  %0 = spirv.UConvert %arg0 : i32 to i64316  spirv.ReturnValue %0 : i64317}318 319// -----320 321//===----------------------------------------------------------------------===//322// spirv.PtrCastToGeneric323//===----------------------------------------------------------------------===//324 325func.func @ptrcasttogeneric1(%arg0 : !spirv.ptr<f32, CrossWorkgroup>) {326  // CHECK: {{%.*}} = spirv.PtrCastToGeneric {{%.*}} : !spirv.ptr<f32, CrossWorkgroup> to !spirv.ptr<f32, Generic>327  %0 = spirv.PtrCastToGeneric %arg0 : !spirv.ptr<f32, CrossWorkgroup> to !spirv.ptr<f32, Generic>328  return329}330// -----331 332func.func @ptrcasttogeneric2(%arg0 : !spirv.ptr<f32, StorageBuffer>) {333  // expected-error @+1 {{pointer must point to the Workgroup, CrossWorkgroup, or Function Storage Class}}334  %0 = spirv.PtrCastToGeneric %arg0 : !spirv.ptr<f32, StorageBuffer> to !spirv.ptr<f32, Generic>335  return336}337 338// -----339 340func.func @ptrcasttogeneric3(%arg0 : !spirv.ptr<f32, CrossWorkgroup>) {341  // expected-error @+1 {{result type must be of storage class Generic}}342  %0 = spirv.PtrCastToGeneric %arg0 : !spirv.ptr<f32, CrossWorkgroup> to !spirv.ptr<f32, Uniform>343  return344}345 346// -----347 348func.func @ptrcasttogeneric4(%arg0 : !spirv.ptr<f32, CrossWorkgroup>) {349  // expected-error @+1 {{pointee type must have the same as the op result type}}350  %0 = spirv.PtrCastToGeneric %arg0 : !spirv.ptr<f32, CrossWorkgroup> to !spirv.ptr<vector<2xi32>, Generic>351  return352}353 354// -----355 356//===----------------------------------------------------------------------===//357// spirv.GenericCastToPtr358//===----------------------------------------------------------------------===//359 360func.func @genericcasttoptr1(%arg0 : !spirv.ptr<vector<2xi32>, Generic>) {361  // CHECK: {{%.*}} = spirv.GenericCastToPtr {{%.*}} : !spirv.ptr<vector<2xi32>, Generic> to !spirv.ptr<vector<2xi32>, CrossWorkgroup>362  %0 = spirv.GenericCastToPtr %arg0 : !spirv.ptr<vector<2xi32>, Generic> to !spirv.ptr<vector<2xi32>, CrossWorkgroup>363  return364}365// -----366 367func.func @genericcasttoptr2(%arg0 : !spirv.ptr<f32, Uniform>) {368  // expected-error @+1 {{pointer type must be of storage class Generic}}369  %0 = spirv.GenericCastToPtr %arg0 : !spirv.ptr<f32, Uniform> to !spirv.ptr<f32, Workgroup>370  return371}372 373// -----374 375func.func @genericcasttoptr3(%arg0 : !spirv.ptr<f32, Generic>) {376  // expected-error @+1 {{result must point to the Workgroup, CrossWorkgroup, or Function Storage Class}}377  %0 = spirv.GenericCastToPtr %arg0 : !spirv.ptr<f32, Generic> to !spirv.ptr<f32, Uniform>378  return379}380 381// -----382 383func.func @genericcasttoptr4(%arg0 : !spirv.ptr<f32, Generic>) {384  // expected-error @+1 {{pointee type must have the same as the op result type}}385  %0 = spirv.GenericCastToPtr %arg0 : !spirv.ptr<f32, Generic> to !spirv.ptr<vector<2xi32>, Workgroup>386  return387}388// -----389 390//===----------------------------------------------------------------------===//391// spirv.GenericCastToPtrExplicit392//===----------------------------------------------------------------------===//393 394func.func @genericcasttoptrexplicit1(%arg0 : !spirv.ptr<vector<2xi32>, Generic>) {395  // CHECK: {{%.*}} = spirv.GenericCastToPtrExplicit {{%.*}} : !spirv.ptr<vector<2xi32>, Generic> to !spirv.ptr<vector<2xi32>, CrossWorkgroup>396  %0 = spirv.GenericCastToPtrExplicit %arg0 : !spirv.ptr<vector<2xi32>, Generic> to !spirv.ptr<vector<2xi32>, CrossWorkgroup>397  return398}399// -----400 401func.func @genericcasttoptrexplicit2(%arg0 : !spirv.ptr<f32, Uniform>) {402  // expected-error @+1 {{pointer type must be of storage class Generic}}403  %0 = spirv.GenericCastToPtrExplicit %arg0 : !spirv.ptr<f32, Uniform> to !spirv.ptr<f32, Workgroup>404  return405}406 407// -----408 409func.func @genericcasttoptrexplicit3(%arg0 : !spirv.ptr<f32, Generic>) {410  // expected-error @+1 {{result must point to the Workgroup, CrossWorkgroup, or Function Storage Class}}411  %0 = spirv.GenericCastToPtrExplicit %arg0 : !spirv.ptr<f32, Generic> to !spirv.ptr<f32, Uniform>412  return413}414 415// -----416 417func.func @genericcasttoptrexplicit4(%arg0 : !spirv.ptr<f32, Generic>) {418  // expected-error @+1 {{pointee type must have the same as the op result type}}419  %0 = spirv.GenericCastToPtrExplicit %arg0 : !spirv.ptr<f32, Generic> to !spirv.ptr<vector<2xi32>, Workgroup>420  return421}422 423// -----424 425//===----------------------------------------------------------------------===//426// spirv.ConvertPtrToU427//===----------------------------------------------------------------------===//428spirv.module Physical64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses], []> {429  spirv.func @covert_ptr_to_u(%arg0 : !spirv.ptr<i32, Generic>) "None" {430    // CHECK: {{%.*}} = spirv.ConvertPtrToU {{%.*}} : !spirv.ptr<i32, Generic> to i32431    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i32, Generic> to i32432    spirv.Return433  }434  spirv.func @covert_ptr_to_u_truncate(%arg0 : !spirv.ptr<i64, Generic>) "None" {435    // CHECK: {{%.*}} = spirv.ConvertPtrToU {{%.*}} : !spirv.ptr<i64, Generic> to i32436    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i64, Generic> to i32437    spirv.Return438  }439  spirv.func @covert_ptr_to_u_extend(%arg0 : !spirv.ptr<i32, Generic>) "None" {440    // CHECK: {{%.*}} = spirv.ConvertPtrToU {{%.*}} : !spirv.ptr<i32, Generic> to i64441    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i32, Generic> to i64442    spirv.Return443  }444}445 446// -----447 448spirv.module PhysicalStorageBuffer64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses, PhysicalStorageBufferAddresses], []> {449  spirv.func @covert_ptr_to_u_PhysicalStorageBuffer(%arg0 : !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Aliased> }) "None" {450    // CHECK: {{%.*}} = spirv.ConvertPtrToU {{%.*}} : !spirv.ptr<i32, PhysicalStorageBuffer> to i32451    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i32, PhysicalStorageBuffer> to i32452    spirv.Return453  }454}455 456// -----457 458spirv.module PhysicalStorageBuffer64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses, PhysicalStorageBufferAddresses], []> {459  spirv.func @covert_ptr_to_u_fail(%arg0 : !spirv.ptr<i32, Generic>) "None" {460    // expected-error @+1 {{operand must be a physical pointer}}461    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i32, Generic> to i32462    spirv.Return463  }464}465 466// -----467 468spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> {469  spirv.func @covert_ptr_to_u_fail_2(%arg0 : !spirv.ptr<i32, Generic>) "None" {470    // expected-error @+1 {{operand must be a physical pointer}}471    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i32, Generic> to i32472    spirv.Return473  }474}475 476// -----477 478//===----------------------------------------------------------------------===//479// spirv.ConvertUToPtr480//===----------------------------------------------------------------------===//481spirv.module Physical64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses], []> {482  spirv.func @covert_u_to_ptr(%arg0 : i32) "None" {483    // CHECK: {{%.*}} = spirv.ConvertUToPtr {{%.*}} : i32 to !spirv.ptr<i32, Generic> 484    %0 = spirv.ConvertUToPtr %arg0 : i32 to !spirv.ptr<i32, Generic>485    spirv.Return486  }487  spirv.func @covert_u_to_ptr_truncate(%arg0 : i64) "None" {488    // CHECK: {{%.*}} = spirv.ConvertUToPtr {{%.*}} : i64 to !spirv.ptr<i32, Generic> 489    %0 = spirv.ConvertUToPtr %arg0 : i64 to !spirv.ptr<i32, Generic>490    spirv.Return491  }492  spirv.func @covert_u_to_ptr_extend(%arg0 : i32) "None" {493    // CHECK: {{%.*}} = spirv.ConvertUToPtr {{%.*}} : i32 to !spirv.ptr<i64, Generic> 494    %0 = spirv.ConvertUToPtr %arg0 : i32 to !spirv.ptr<i64, Generic>495    spirv.Return496  }497}498 499// -----500 501spirv.module PhysicalStorageBuffer64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses, PhysicalStorageBufferAddresses], []> {502  spirv.func @covert_u_to_ptr_PhysicalStorageBuffer(%arg0 : i32) "None" {503    // CHECK: {{%.*}} = spirv.ConvertUToPtr {{%.*}} : i32 to !spirv.ptr<i32, PhysicalStorageBuffer>504    %0 = spirv.ConvertUToPtr %arg0 : i32 to !spirv.ptr<i32, PhysicalStorageBuffer>505    spirv.Return506  }507}508 509// -----510 511spirv.module PhysicalStorageBuffer64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses, PhysicalStorageBufferAddresses], []> {512  spirv.func @covert_u_to_ptr_fail(%arg0 : i32) "None" {513    // expected-error @+1 {{result must be a physical pointer}}514    %0 = spirv.ConvertUToPtr %arg0 : i32 to !spirv.ptr<i32, Generic>515    spirv.Return516  }517}518 519// -----520 521spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> {522  spirv.func @covert_u_to_ptr_fail_2(%arg0 : i32) "None" {523    // expected-error @+1 {{result must be a physical pointer}}524    %0 = spirv.ConvertUToPtr %arg0 : i32 to !spirv.ptr<i32, Generic>525    spirv.Return526  }527}528