brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · 4f29610 Raw
189 lines · plain
1// RUN: mlir-translate -no-implicit-module -test-spirv-roundtrip -split-input-file %s | FileCheck %s2 3// RUN: %if spirv-tools %{ rm -rf %t %}4// RUN: %if spirv-tools %{ mkdir %t %}5// RUN: %if spirv-tools %{ mlir-translate --no-implicit-module --serialize-spirv --split-input-file --spirv-save-validation-files-with-prefix=%t/module %s %}6// RUN: %if spirv-tools %{ spirv-val %t %}7 8spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, Linkage], []> {9  spirv.func @bit_cast(%arg0 : f32) "None" {10    // CHECK: {{%.*}} = spirv.Bitcast {{%.*}} : f32 to i3211    %0 = spirv.Bitcast %arg0 : f32 to i3212    // CHECK: {{%.*}} = spirv.Bitcast {{%.*}} : i32 to si3213    %1 = spirv.Bitcast %0 : i32 to si3214    // CHECK: {{%.*}} = spirv.Bitcast {{%.*}} : si32 to i3215    %2 = spirv.Bitcast %1 : si32 to ui3216    spirv.Return17  }18}19 20// -----21 22spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, Linkage, BFloat16TypeKHR, Float64, Int64], [SPV_KHR_bfloat16]> {23  spirv.func @convert_f_to_s(%arg0 : f32) -> i32 "None" {24    // CHECK: {{%.*}} = spirv.ConvertFToS {{%.*}} : f32 to i3225    %0 = spirv.ConvertFToS %arg0 : f32 to i3226    spirv.ReturnValue %0 : i3227  }28  spirv.func @convert_f64_to_s32(%arg0 : f64) -> i32 "None" {29    // CHECK: {{%.*}} = spirv.ConvertFToS {{%.*}} : f64 to i3230    %0 = spirv.ConvertFToS %arg0 : f64 to i3231    spirv.ReturnValue %0 : i3232  }33  spirv.func @convert_bf16_to_s32(%arg0 : bf16) -> i32 "None" {34    // CHECK: {{%.*}} = spirv.ConvertFToS {{%.*}} : bf16 to i3235    %0 = spirv.ConvertFToS %arg0 : bf16 to i3236    spirv.ReturnValue %0 : i3237  }38  spirv.func @convert_f_to_u(%arg0 : f32) -> i32 "None" {39    // CHECK: {{%.*}} = spirv.ConvertFToU {{%.*}} : f32 to i3240    %0 = spirv.ConvertFToU %arg0 : f32 to i3241    spirv.ReturnValue %0 : i3242  }43  spirv.func @convert_f64_to_u32(%arg0 : f64) -> i32 "None" {44    // CHECK: {{%.*}} = spirv.ConvertFToU {{%.*}} : f64 to i3245    %0 = spirv.ConvertFToU %arg0 : f64 to i3246    spirv.ReturnValue %0 : i3247  }48  spirv.func @convert_bf16_to_u32(%arg0 : bf16) -> i32 "None" {49    // CHECK: {{%.*}} = spirv.ConvertFToU {{%.*}} : bf16 to i3250    %0 = spirv.ConvertFToU %arg0 : bf16 to i3251    spirv.ReturnValue %0 : i3252  }53  spirv.func @convert_s_to_f(%arg0 : i32) -> f32 "None" {54    // CHECK: {{%.*}} = spirv.ConvertSToF {{%.*}} : i32 to f3255    %0 = spirv.ConvertSToF %arg0 : i32 to f3256    spirv.ReturnValue %0 : f3257  }58  spirv.func @convert_s64_to_f32(%arg0 : i64) -> f32 "None" {59    // CHECK: {{%.*}} = spirv.ConvertSToF {{%.*}} : i64 to f3260    %0 = spirv.ConvertSToF %arg0 : i64 to f3261    spirv.ReturnValue %0 : f3262  }63  spirv.func @convert_s64_to_bf16(%arg0 : i64) -> bf16 "None" {64    // CHECK: {{%.*}} = spirv.ConvertSToF {{%.*}} : i64 to bf1665    %0 = spirv.ConvertSToF %arg0 : i64 to bf1666    spirv.ReturnValue %0 : bf1667  }68  spirv.func @convert_u_to_f(%arg0 : i32) -> f32 "None" {69    // CHECK: {{%.*}} = spirv.ConvertUToF {{%.*}} : i32 to f3270    %0 = spirv.ConvertUToF %arg0 : i32 to f3271    spirv.ReturnValue %0 : f3272  }73  spirv.func @convert_u64_to_f32(%arg0 : i64) -> f32 "None" {74    // CHECK: {{%.*}} = spirv.ConvertUToF {{%.*}} : i64 to f3275    %0 = spirv.ConvertUToF %arg0 : i64 to f3276    spirv.ReturnValue %0 : f3277  }78  spirv.func @convert_u64_to_bf16(%arg0 : i64) -> bf16 "None" {79    // CHECK: {{%.*}} = spirv.ConvertUToF {{%.*}} : i64 to bf1680    %0 = spirv.ConvertUToF %arg0 : i64 to bf1681    spirv.ReturnValue %0 : bf1682  }83  spirv.func @convert_f32_to_f64(%arg0 : f32) -> f64 "None" {84    // CHECK: {{%.*}} = spirv.FConvert {{%.*}} : f32 to f6485    %0 = spirv.FConvert %arg0 : f32 to f6486    spirv.ReturnValue %0 : f6487  }88  spirv.func @convert_f32_to_bf16(%arg0 : f32) -> bf16 "None" {89    // CHECK: {{%.*}} = spirv.FConvert {{%.*}} : f32 to bf1690    %0 = spirv.FConvert %arg0 : f32 to bf1691    spirv.ReturnValue %0 : bf1692  }93  spirv.func @convert_bf16_to_f32(%arg0 : bf16) -> f32 "None" {94    // CHECK: {{%.*}} = spirv.FConvert {{%.*}} : bf16 to f3295    %0 = spirv.FConvert %arg0 : bf16 to f3296    spirv.ReturnValue %0 : f3297  }98  spirv.func @s_convert(%arg0 : i32) -> i64 "None" {99    // CHECK: {{%.*}} = spirv.SConvert {{%.*}} : i32 to i64100    %0 = spirv.SConvert %arg0 : i32 to i64101    spirv.ReturnValue %0 : i64102  }103  spirv.func @u_convert(%arg0 : i32) -> i64 "None" {104    // CHECK: {{%.*}} = spirv.UConvert {{%.*}} : i32 to i64105    %0 = spirv.UConvert %arg0 : i32 to i64106    spirv.ReturnValue %0 : i64107  }108}109 110// -----111 112spirv.module Physical64 OpenCL requires #spirv.vce<v1.0, [Kernel, Linkage, GenericPointer], []> {113  spirv.func @ptr_cast_to_generic(%arg0 : !spirv.ptr<f32, CrossWorkgroup>) "None" {114    // CHECK: {{%.*}} = spirv.PtrCastToGeneric {{%.*}} : !spirv.ptr<f32, CrossWorkgroup> to !spirv.ptr<f32, Generic>115    %0 = spirv.PtrCastToGeneric %arg0 : !spirv.ptr<f32, CrossWorkgroup> to !spirv.ptr<f32, Generic>116    spirv.Return117  }118  spirv.func @generic_cast_to_ptr(%arg0 : !spirv.ptr<vector<2xi32>, Generic>) "None" {119    // CHECK: {{%.*}} = spirv.GenericCastToPtr {{%.*}} : !spirv.ptr<vector<2xi32>, Generic> to !spirv.ptr<vector<2xi32>, CrossWorkgroup>120    %0 = spirv.GenericCastToPtr %arg0 : !spirv.ptr<vector<2xi32>, Generic> to !spirv.ptr<vector<2xi32>, CrossWorkgroup>121    spirv.Return122  }123  spirv.func @generic_cast_to_ptr_explicit(%arg0 : !spirv.ptr<vector<2xi32>, Generic>) "None" {124    // CHECK: {{%.*}} = spirv.GenericCastToPtrExplicit {{%.*}} : !spirv.ptr<vector<2xi32>, Generic> to !spirv.ptr<vector<2xi32>, CrossWorkgroup>125    %0 = spirv.GenericCastToPtrExplicit %arg0 : !spirv.ptr<vector<2xi32>, Generic> to !spirv.ptr<vector<2xi32>, CrossWorkgroup>126    spirv.Return127  }128}129 130// -----131 132spirv.module Physical64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses, Linkage, GenericPointer, Int64], []> {133  spirv.func @covert_ptr_to_u(%arg0 : !spirv.ptr<i32, Generic>) "None" {134    // CHECK: {{%.*}} = spirv.ConvertPtrToU {{%.*}} : !spirv.ptr<i32, Generic> to i32135    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i32, Generic> to i32136    spirv.Return137  }138  spirv.func @covert_ptr_to_u_truncate(%arg0 : !spirv.ptr<i64, Generic>) "None" {139    // CHECK: {{%.*}} = spirv.ConvertPtrToU {{%.*}} : !spirv.ptr<i64, Generic> to i32140    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i64, Generic> to i32141    spirv.Return142  }143  spirv.func @covert_ptr_to_u_extend(%arg0 : !spirv.ptr<i32, Generic>) "None" {144    // CHECK: {{%.*}} = spirv.ConvertPtrToU {{%.*}} : !spirv.ptr<i32, Generic> to i64145    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i32, Generic> to i64146    spirv.Return147  }148}149 150// -----151 152spirv.module PhysicalStorageBuffer64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses, PhysicalStorageBufferAddresses, Linkage], [SPV_EXT_physical_storage_buffer]> {  153  spirv.func @covert_ptr_to_u_PhysicalStorageBuffer(%arg0 : !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Aliased>} ) "None" {154    // CHECK: {{%.*}} = spirv.ConvertPtrToU {{%.*}} : !spirv.ptr<i32, PhysicalStorageBuffer> to i32155    %0 = spirv.ConvertPtrToU %arg0 : !spirv.ptr<i32, PhysicalStorageBuffer> to i32156    spirv.Return157  }158}159 160// -----161 162spirv.module Physical64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses, Linkage, GenericPointer, Int64], []> {163  spirv.func @covert_u_to_ptr(%arg0 : i32) "None" {164    // CHECK: {{%.*}} = spirv.ConvertUToPtr {{%.*}} : i32 to !spirv.ptr<i32, Generic> 165    %0 = spirv.ConvertUToPtr %arg0 : i32 to !spirv.ptr<i32, Generic>166    spirv.Return167  }168  spirv.func @covert_u_to_ptr_truncate(%arg0 : i64) "None" {169    // CHECK: {{%.*}} = spirv.ConvertUToPtr {{%.*}} : i64 to !spirv.ptr<i32, Generic> 170    %0 = spirv.ConvertUToPtr %arg0 : i64 to !spirv.ptr<i32, Generic>171    spirv.Return172  }173  spirv.func @covert_u_to_ptr_extend(%arg0 : i32) "None" {174    // CHECK: {{%.*}} = spirv.ConvertUToPtr {{%.*}} : i32 to !spirv.ptr<i64, Generic> 175    %0 = spirv.ConvertUToPtr %arg0 : i32 to !spirv.ptr<i64, Generic>176    spirv.Return177  }178}179 180// -----181 182spirv.module PhysicalStorageBuffer64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses, PhysicalStorageBufferAddresses, Linkage], [SPV_EXT_physical_storage_buffer]> {183  spirv.func @covert_u_to_ptr_PhysicalStorageBuffer(%arg0 : i32) "None" {184    // CHECK: {{%.*}} = spirv.ConvertUToPtr {{%.*}} : i32 to !spirv.ptr<i32, PhysicalStorageBuffer>185    %0 = spirv.ConvertUToPtr %arg0 : i32 to !spirv.ptr<i32, PhysicalStorageBuffer>186    spirv.Return187  }188}189