<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Hi - help!<br>
<br>
I have read through previous threads on the subject of 'byval'  e.g.<br>
    <a href="https://groups.google.com/forum/#!topicsearchin/llvm-dev/Exact$20meaning$20of$20byval/llvm-dev/cyRZyXcMCNI" target="_blank">
https://groups.google.com/forum/#!topicsearchin/llvm-dev/Exact$20meaning$20of$20byval/llvm-dev/cyRZyXcMCNI</a><br>
    <a href="https://groups.google.com/forum/#!topicsearchin/llvm-dev/$20byval/llvm-dev/uk4uiK93jeM" target="_blank">
https://groups.google.com/forum/#!topicsearchin/llvm-dev/$20byval/llvm-dev/uk4uiK93jeM</a><br>
    <a href="https://groups.google.com/forum/#!topicsearchin/llvm-dev/byval/llvm-dev/46Tv0lSRwBg" target="_blank">
https://groups.google.com/forum/#!topicsearchin/llvm-dev/byval/llvm-dev/46Tv0lSRwBg</a><br>
and read through code (as best I can) but I am no wiser.<br>
<br>
I am using the XCore target where the pointee data needs to be copied by the callee (not the caller).<br>
So:<br>
<div class="GGYB0KICMDB">        > I am not sure what this means though - when I generate code<br>
        > from the LLVM assembly, do I need to do anything with byval?
<p>        yes, the pointee needs to be passed by-copy, which usually means on the<br>
        stack but could mean in a bunch of registers.</p>
        > Either in the calling location or in the called function?</div>
<p>        The caller does the copy IIRC.  If you look at the .s file you should see<br>
        it happening.</p>
<p>unfortunately does not help me.</p>
<p><br>
</p>
There seems to be some disagreement if it should be done in clang or llvm.<br>
Indeed I have hacked clang's <font color="black" face="Tahoma" size="2"><span style="font-size:10pt;" dir="ltr">CodeGenFunction::EmitFunctionProlog() and it works - but it is not nice.<br>
BUT it seems most believe that it should be done within llvm using 'byVal'.<br>
<br>
I have tried to follow the the 'byval' flag but am too ignorant to make any meaningful headway viz:<br>
I tried adding t</span></font><font color="black" face="Tahoma" size="2"><span style="font-size:10pt;" dir="ltr">o the XCoreCallingConv.td:<br>
</span></font>    <font color="black" face="Tahoma" size="2"><span style="font-size:10pt;" dir="ltr">CCIfByVal<CCPassByVal<0,4>></span></font>        // pushes pointer to the stack<br>
<font color="black" face="Tahoma" size="2"><span style="font-size:10pt;" dir="ltr">and<br>
</span></font><font color="black" face="Tahoma" size="2"><span style="font-size:10pt;" dir="ltr">   
<font color="black" face="Tahoma" size="2"><span style="font-size:10pt;" dir="ltr">CCIfByVal<CCCustom<"XCoreCC_CustomByVal">><br>
</span></font>But Have got stuck knowing if I can add the copy at this stage.<br>
Is the pointee's details available or only the pointer's?<br>
(Sorry if I have not dug deep enough to trace from pointer to pointee)<br>
<br>
I also started to looked at the XCoreFrameLowering::emitPrologue()<br>
<br>
Unfortunately, whilst stumbling around in the code is an interesting way to see the scenery, I am losing any sense of direction I may have had to start with!<br>
<br>
Any input gratefully recieved - including key source files or the order in which things happen.<br>
I'll try tracing through the calls (will -debug be enough) tomorrow.<br>
<br>
thank you<br>
<br>
robert<br>
<br>
<br>
</span></font></div>
</body>
</html>