1// RUN: mlir-translate -test-spirv-roundtrip -split-input-file %s | FileCheck %s
2
3spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
4  spv.func @bit_cast(%arg0 : f32) "None" {
5    // CHECK: {{%.*}} = spv.Bitcast {{%.*}} : f32 to i32
6    %0 = spv.Bitcast %arg0 : f32 to i32
7    // CHECK: {{%.*}} = spv.Bitcast {{%.*}} : i32 to si32
8    %1 = spv.Bitcast %0 : i32 to si32
9    // CHECK: {{%.*}} = spv.Bitcast {{%.*}} : si32 to i32
10    %2 = spv.Bitcast %1 : si32 to ui32
11    spv.Return
12  }
13}
14
15// -----
16
17spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
18  spv.func @convert_f_to_s(%arg0 : f32) -> i32 "None" {
19    // CHECK: {{%.*}} = spv.ConvertFToS {{%.*}} : f32 to i32
20    %0 = spv.ConvertFToS %arg0 : f32 to i32
21    spv.ReturnValue %0 : i32
22  }
23  spv.func @convert_f64_to_s32(%arg0 : f64) -> i32 "None" {
24    // CHECK: {{%.*}} = spv.ConvertFToS {{%.*}} : f64 to i32
25    %0 = spv.ConvertFToS %arg0 : f64 to i32
26    spv.ReturnValue %0 : i32
27  }
28  spv.func @convert_f_to_u(%arg0 : f32) -> i32 "None" {
29    // CHECK: {{%.*}} = spv.ConvertFToU {{%.*}} : f32 to i32
30    %0 = spv.ConvertFToU %arg0 : f32 to i32
31    spv.ReturnValue %0 : i32
32  }
33  spv.func @convert_f64_to_u32(%arg0 : f64) -> i32 "None" {
34    // CHECK: {{%.*}} = spv.ConvertFToU {{%.*}} : f64 to i32
35    %0 = spv.ConvertFToU %arg0 : f64 to i32
36    spv.ReturnValue %0 : i32
37  }
38  spv.func @convert_s_to_f(%arg0 : i32) -> f32 "None" {
39    // CHECK: {{%.*}} = spv.ConvertSToF {{%.*}} : i32 to f32
40    %0 = spv.ConvertSToF %arg0 : i32 to f32
41    spv.ReturnValue %0 : f32
42  }
43  spv.func @convert_s64_to_f32(%arg0 : i64) -> f32 "None" {
44    // CHECK: {{%.*}} = spv.ConvertSToF {{%.*}} : i64 to f32
45    %0 = spv.ConvertSToF %arg0 : i64 to f32
46    spv.ReturnValue %0 : f32
47  }
48  spv.func @convert_u_to_f(%arg0 : i32) -> f32 "None" {
49    // CHECK: {{%.*}} = spv.ConvertUToF {{%.*}} : i32 to f32
50    %0 = spv.ConvertUToF %arg0 : i32 to f32
51    spv.ReturnValue %0 : f32
52  }
53  spv.func @convert_u64_to_f32(%arg0 : i64) -> f32 "None" {
54    // CHECK: {{%.*}} = spv.ConvertUToF {{%.*}} : i64 to f32
55    %0 = spv.ConvertUToF %arg0 : i64 to f32
56    spv.ReturnValue %0 : f32
57  }
58  spv.func @f_convert(%arg0 : f32) -> f64 "None" {
59    // CHECK: {{%.*}} = spv.FConvert {{%.*}} : f32 to f64
60    %0 = spv.FConvert %arg0 : f32 to f64
61    spv.ReturnValue %0 : f64
62  }
63  spv.func @s_convert(%arg0 : i32) -> i64 "None" {
64    // CHECK: {{%.*}} = spv.SConvert {{%.*}} : i32 to i64
65    %0 = spv.SConvert %arg0 : i32 to i64
66    spv.ReturnValue %0 : i64
67  }
68  spv.func @u_convert(%arg0 : i32) -> i64 "None" {
69    // CHECK: {{%.*}} = spv.UConvert {{%.*}} : i32 to i64
70    %0 = spv.UConvert %arg0 : i32 to i64
71    spv.ReturnValue %0 : i64
72  }
73}
74