compiler/spirv: vtn_add_printf_string support for handling OpBitcast
What does this MR do and why?
When test microsoft/clc with mingw+llvm17,
the printf
test of clc_compiler_test.cpp will failed
because the generated spirv code are the following code:
cc @jenatali
specifically, it's handling
%48 = OpBitcast %_ptr_UniformConstant_uchar %_str
%49 = OpBitcast %_ptr_UniformConstant_uchar %_str_1
; SPIR-V
; Version: 1.4
; Generator: Khronos SPIR-V Tools Linker; 0
; Bound: 53
; Schema: 0
OpCapability Addresses
OpCapability Kernel
OpCapability Int64
OpCapability Int8
%1 = OpExtInstImport "OpenCL.std"
OpMemoryModel Physical64 OpenCL
OpEntryPoint Kernel %2 "main_test" %_str %_str_1
%5 = OpString "kernel_arg_type.main_test.float*,uint*,"
%6 = OpString "kernel_arg_type_qual.main_test.,,"
OpSource OpenCL_C 102000
OpName %_str ".str"
OpName %_str_1 ".str.1"
OpName %main_test "main_test"
OpName %src "src"
OpName %dest "dest"
OpName %entry "entry"
OpName %src_addr "src.addr"
OpName %dest_addr "dest.addr"
OpName %arrayidx "arrayidx"
OpName %call "call"
OpName %src_0 "src"
OpName %dest_0 "dest"
OpModuleProcessed "Linked by SPIR-V Tools Linker"
OpDecorate %_str Constant
OpDecorate %_str Alignment 1
OpDecorate %_str_1 Constant
OpDecorate %_str_1 Alignment 1
OpDecorate %src Alignment 4
OpDecorate %dest Alignment 4
OpDecorate %src_addr Alignment 8
OpDecorate %dest_addr Alignment 8
OpDecorate %src_0 Alignment 4
OpDecorate %dest_0 Alignment 4
%ulong = OpTypeInt 64 0
%uchar = OpTypeInt 8 0
%uint = OpTypeInt 32 0
%ulong_7 = OpConstant %ulong 7
%uchar_37 = OpConstant %uchar 37
%uchar_115 = OpConstant %uchar 115
%uchar_58 = OpConstant %uchar 58
%uchar_32 = OpConstant %uchar 32
%uchar_102 = OpConstant %uchar 102
%uchar_0 = OpConstant %uchar 0
%ulong_5 = OpConstant %ulong 5
%uchar_84 = OpConstant %uchar 84
%uchar_101 = OpConstant %uchar 101
%uchar_116 = OpConstant %uchar 116
%ulong_0 = OpConstant %ulong 0
%_arr_uchar_ulong_7 = OpTypeArray %uchar %ulong_7
%_ptr_UniformConstant__arr_uchar_ulong_7 = OpTypePointer UniformConstant %_arr_uchar_ulong_7
%_arr_uchar_ulong_5 = OpTypeArray %uchar %ulong_5
%_ptr_UniformConstant__arr_uchar_ulong_5 = OpTypePointer UniformConstant %_arr_uchar_ulong_5
%void = OpTypeVoid
%float = OpTypeFloat 32
%_ptr_CrossWorkgroup_float = OpTypePointer CrossWorkgroup %float
%_ptr_CrossWorkgroup_uint = OpTypePointer CrossWorkgroup %uint
%40 = OpTypeFunction %void %_ptr_CrossWorkgroup_float %_ptr_CrossWorkgroup_uint
%_ptr_Function__ptr_CrossWorkgroup_float = OpTypePointer Function %_ptr_CrossWorkgroup_float
%_ptr_Function__ptr_CrossWorkgroup_uint = OpTypePointer Function %_ptr_CrossWorkgroup_uint
%_ptr_UniformConstant_uchar = OpTypePointer UniformConstant %uchar
%44 = OpConstantComposite %_arr_uchar_ulong_7 %uchar_37 %uchar_115 %uchar_58 %uchar_32 %uchar_37 %uchar_102 %uchar_0
%_str = OpVariable %_ptr_UniformConstant__arr_uchar_ulong_7 UniformConstant %44
%45 = OpConstantComposite %_arr_uchar_ulong_5 %uchar_84 %uchar_101 %uchar_115 %uchar_116 %uchar_0
%_str_1 = OpVariable %_ptr_UniformConstant__arr_uchar_ulong_5 UniformConstant %45
%main_test = OpFunction %void DontInline %40
%src = OpFunctionParameter %_ptr_CrossWorkgroup_float
%dest = OpFunctionParameter %_ptr_CrossWorkgroup_uint
%entry = OpLabel
%src_addr = OpVariable %_ptr_Function__ptr_CrossWorkgroup_float Function
%dest_addr = OpVariable %_ptr_Function__ptr_CrossWorkgroup_uint Function
OpStore %src_addr %src Aligned 8
OpStore %dest_addr %dest Aligned 8
%46 = OpLoad %_ptr_CrossWorkgroup_float %src_addr Aligned 8
%arrayidx = OpInBoundsPtrAccessChain %_ptr_CrossWorkgroup_float %46 %ulong_0
%47 = OpLoad %float %arrayidx Aligned 4
%48 = OpBitcast %_ptr_UniformConstant_uchar %_str
%49 = OpBitcast %_ptr_UniformConstant_uchar %_str_1
%call = OpExtInst %uint %1 printf %48 %49 %47
%50 = OpLoad %_ptr_CrossWorkgroup_uint %dest_addr Aligned 8
OpStore %50 %call Aligned 4
OpReturn
OpFunctionEnd
%2 = OpFunction %void DontInline %40
%src_0 = OpFunctionParameter %_ptr_CrossWorkgroup_float
%dest_0 = OpFunctionParameter %_ptr_CrossWorkgroup_uint
%51 = OpLabel
%52 = OpFunctionCall %void %main_test %src_0 %dest_0
OpReturn
OpFunctionEnd
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>