Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / SPIRV / transcoding / explicit-conversions.ll
blobc186a8135fee7cf112aaa425724a43d5fda93d5b
1 ; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
3 ; CHECK-SPIRV: OpSatConvertSToU
5 ;; kernel void testSToU(global int2 *a, global uchar2 *res) {
6 ;;   res[0] = convert_uchar2_sat(*a);
7 ;; }
9 define dso_local spir_kernel void @testSToU(<2 x i32> addrspace(1)* nocapture noundef readonly %a, <2 x i8> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
10 entry:
11   %0 = load <2 x i32>, <2 x i32> addrspace(1)* %a, align 8
12   %call = call spir_func <2 x i8> @_Z18convert_uchar2_satDv2_i(<2 x i32> noundef %0)
13   store <2 x i8> %call, <2 x i8> addrspace(1)* %res, align 2
14   ret void
17 declare spir_func <2 x i8> @_Z18convert_uchar2_satDv2_i(<2 x i32> noundef) local_unnamed_addr
19 ; CHECK-SPIRV: OpSatConvertUToS
21 ;; kernel void testUToS(global uint2 *a, global char2 *res) {
22 ;;   res[0] = convert_char2_sat(*a);
23 ;; }
25 define dso_local spir_kernel void @testUToS(<2 x i32> addrspace(1)* nocapture noundef readonly %a, <2 x i8> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
26 entry:
27   %0 = load <2 x i32>, <2 x i32> addrspace(1)* %a, align 8
28   %call = call spir_func <2 x i8> @_Z17convert_char2_satDv2_j(<2 x i32> noundef %0)
29   store <2 x i8> %call, <2 x i8> addrspace(1)* %res, align 2
30   ret void
33 declare spir_func <2 x i8> @_Z17convert_char2_satDv2_j(<2 x i32> noundef) local_unnamed_addr
35 ; CHECK-SPIRV: OpConvertUToF
37 ;; kernel void testUToF(global uint2 *a, global float2 *res) {
38 ;;   res[0] = convert_float2_rtz(*a);
39 ;; }
41 define dso_local spir_kernel void @testUToF(<2 x i32> addrspace(1)* nocapture noundef readonly %a, <2 x float> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
42 entry:
43   %0 = load <2 x i32>, <2 x i32> addrspace(1)* %a, align 8
44   %call = call spir_func <2 x float> @_Z18convert_float2_rtzDv2_j(<2 x i32> noundef %0)
45   store <2 x float> %call, <2 x float> addrspace(1)* %res, align 8
46   ret void
49 declare spir_func <2 x float> @_Z18convert_float2_rtzDv2_j(<2 x i32> noundef) local_unnamed_addr
51 ; CHECK-SPIRV: OpConvertFToU
53 ;; kernel void testFToUSat(global float2 *a, global uint2 *res) {
54 ;;   res[0] = convert_uint2_sat_rtn(*a);
55 ;; }
57 define dso_local spir_kernel void @testFToUSat(<2 x float> addrspace(1)* nocapture noundef readonly %a, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
58 entry:
59   %0 = load <2 x float>, <2 x float> addrspace(1)* %a, align 8
60   %call = call spir_func <2 x i32> @_Z21convert_uint2_sat_rtnDv2_f(<2 x float> noundef %0)
61   store <2 x i32> %call, <2 x i32> addrspace(1)* %res, align 8
62   ret void
65 declare spir_func <2 x i32> @_Z21convert_uint2_sat_rtnDv2_f(<2 x float> noundef) local_unnamed_addr
67 ; CHECK-SPIRV: OpSatConvertSToU
69 ;; kernel void testUToUSat(global uchar *a, global uint *res) {
70 ;;   res[0] = convert_uint_sat(*a);
71 ;; }
73 define dso_local spir_kernel void @testUToUSat(i8 addrspace(1)* nocapture noundef readonly %a, i32 addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
74 entry:
75   %0 = load i8, i8 addrspace(1)* %a, align 1
76   %call = call spir_func i32 @_Z16convert_uint_sath(i8 noundef zeroext %0)
77   store i32 %call, i32 addrspace(1)* %res, align 4
78   ret void
81 declare spir_func i32 @_Z16convert_uint_sath(i8 noundef zeroext) local_unnamed_addr
83 ; CHECK-SPIRV: OpSatConvertSToU
85 ;; kernel void testUToUSat1(global uint *a, global uchar *res) {
86 ;;   res[0] = convert_uchar_sat(*a);
87 ;; }
89 define dso_local spir_kernel void @testUToUSat1(i32 addrspace(1)* nocapture noundef readonly %a, i8 addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
90 entry:
91   %0 = load i32, i32 addrspace(1)* %a, align 4
92   %call = call spir_func zeroext i8 @_Z17convert_uchar_satj(i32 noundef %0)
93   store i8 %call, i8 addrspace(1)* %res, align 1
94   ret void
97 declare spir_func zeroext i8 @_Z17convert_uchar_satj(i32 noundef) local_unnamed_addr
99 ; CHECK-SPIRV: OpConvertFToU
101 ;; kernel void testFToU(global float3 *a, global uint3 *res) {
102 ;;   res[0] = convert_uint3_rtp(*a);
103 ;; }
105 define dso_local spir_kernel void @testFToU(<3 x float> addrspace(1)* nocapture noundef readonly %a, <3 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
106 entry:
107   %castToVec4 = bitcast <3 x float> addrspace(1)* %a to <4 x float> addrspace(1)*
108   %loadVec4 = load <4 x float>, <4 x float> addrspace(1)* %castToVec4, align 16
109   %extractVec = shufflevector <4 x float> %loadVec4, <4 x float> poison, <3 x i32> <i32 0, i32 1, i32 2>
110   %call = call spir_func <3 x i32> @_Z17convert_uint3_rtpDv3_f(<3 x float> noundef %extractVec)
111   %extractVec1 = shufflevector <3 x i32> %call, <3 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 undef>
112   %storetmp = bitcast <3 x i32> addrspace(1)* %res to <4 x i32> addrspace(1)*
113   store <4 x i32> %extractVec1, <4 x i32> addrspace(1)* %storetmp, align 16
114   ret void
117 declare spir_func <3 x i32> @_Z17convert_uint3_rtpDv3_f(<3 x float> noundef) local_unnamed_addr