<div dir="ltr">Thanks a lot.</div><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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;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:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;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:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Sam<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;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 class="h5">
<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/<wbr>registry/spir/specs/spir_spec-<wbr>2.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/<wbr>KhronosGroup/SPIR-Tools/wiki/<wbr>SPIR-2.0-built-in-functions</a><u></u><u></u></p>
</div>
</div>
</div></div></div>
</div>

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