<div dir="ltr">Hi Sam and others,<div><br></div><div>I saw that in [1], printf is mangled to _Z6printfPrU3AS2cz, while in clang's opencl-c.h[2], printf does not have the overload attribute:</div><div>int printf(__constant const char* st, ...); (and it is different from the standard, which is printf(restrict __constant char *, ...))<br></div><div>I try the following code:</div><div><div>#include <opencl-c.h></div><div><br></div><div>__kernel void vadd(__global const int* a, __global const int* b, __global int* c) {</div><div>  printf("aaaaa");<br></div><div>}</div></div><div><br></div><div>and get a printf that is not mangled:</div><div><div>  %call = tail call spir_func i32 (i8 addrspace(2)*, ...) @printf(i8 addrspace(2)* getelementptr inbounds ([6 x i8], [6 x i8] addrspace(2)* @.str, i64 0, i64 0))</div></div><div><br></div><div>with the following command line:</div><div>clang -cc1 -internal-isystem /wrk/xsjhdnobkup2/hongbinz/omp/build-llvm/bin/../lib/clang/3.9.0/include -nostdsysteminc -S -emit-llvm -o -<br></div><div><br></div><div>Is this the correct behavior?</div><div><br></div><div>Thanks</div><div>Hongbin</div><div><br></div><div>[1] <a href="https://github.com/KhronosGroup/SPIR-Tools/wiki/SPIR-2.0-built-in-functions">https://github.com/KhronosGroup/SPIR-Tools/wiki/SPIR-2.0-built-in-functions</a></div><div>[2] <a href="http://clang.llvm.org/doxygen/opencl-c_8h_source.html">http://clang.llvm.org/doxygen/opencl-c_8h_source.html</a></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 12, 2016 at 1:43 PM, Hongbin Zheng <span dir="ltr"><<a href="mailto:etherzhhb@gmail.com" target="_blank">etherzhhb@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Thanks a lot.</div><div class="gmail-HOEnZb"><div class="gmail-h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 12, 2016 at 1:42 PM, Liu, Yaxun (Sam) <span dir="ltr"><<a href="mailto:Yaxun.Liu@amd.com" target="_blank">Yaxun.Liu@amd.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif">If you use the default header file under clang/lib/Headers/opencl-c.h, get_global_id will be mangled.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif">If you want to declare get_global_id in your own header, add __attribute__((overloadable)), then it will be mangled.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif">Sam<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:calibri,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:11pt;font-family:calibri,sans-serif">From:</span></b><span style="font-size:11pt;font-family:calibri,sans-serif"> Hongbin Zheng [mailto:<a href="mailto:etherzhhb@gmail.com" target="_blank">etherzhhb@gmail.com</a>]
<br>
<b>Sent:</b> Monday, September 12, 2016 4:21 PM<br>
<b>To:</b> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>; llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>; Liu, Yaxun (Sam) <<a href="mailto:Yaxun.Liu@amd.com" target="_blank">Yaxun.Liu@amd.com</a>><br>
<b>Subject:</b> builtins name mangling in SPIR 2.0<u></u><u></u></span></p><div><div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi all,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">According to the SPIR 2.0 spec[1], the name of OpenCL builtins are mangled.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">However, when I compile OpenCl code with Clang 3.9 with the "spir64-unknown-unknown" target, Clang generates IR without mangling the builtins, e.g. for:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">__kernel void input_zip_int(__global int *in0) {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  *in0 = get_global_id(0);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">clang generates:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">define spir_kernel void @input_zip_int(i32 addrspace(1)* nocapture %in0) local_unnamed_addr #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !5 !kernel_arg_base_type !5 !kernel_arg_type_qual !6 {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">entry:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  %call = tail call spir_func i128 @get_global_id(i32 0) #2<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  %conv = trunc i128 %call to i32<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  store i32 %conv, i32 addrspace(1)* %in0, align 4, !tbaa !7<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  ret void<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">In this case, get_global_id is not mangled to _Z13get_global_idj according to [2].<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Is there an option for clang or an LLVM clang to do the mangling for spir builtins?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Hongbin<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">[1] <a href="https://www.khronos.org/registry/spir/specs/spir_spec-2.0.pdf" target="_blank">https://www.khronos.org/re<wbr>gistry/spir/specs/spir_spec-2.<wbr>0.pdf</a>, page 36<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">[2] <a href="https://github.com/KhronosGroup/SPIR-Tools/wiki/SPIR-2.0-built-in-functions" target="_blank">https://github.com/Khronos<wbr>Group/SPIR-Tools/wiki/SPIR-2.<wbr>0-built-in-functions</a><u></u><u></u></p>
</div>
</div>
</div></div></div>
</div>

</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>