<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Apr 28, 2014 at 2:45 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="">On Mon, Apr 21, 2014 at 1:33 PM, Matthew O'Connor <span dir="ltr"><<a href="mailto:thegreendragon@gmail.com" target="_blank">thegreendragon@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div><div>1. Is there a way to force Clang to respect a struct being passed by value in the source (either as arguments or the return value from a function) and not converted to pointers in & out?<br>

<br></div><div>I think, roughly, what I want is to be able to "disable" Clang's use of ABIArgInfo's Kind's Indirect & Expand.</div></div></div></div></div></blockquote><div><br></div></div><div>
What exactly do you want clang to do?  Do you want it to pass the value as an LLVM first class aggregate, or to use a pointer with the byval attribute?</div></div></div></div></blockquote><div><br></div><div>Pass the value as an LLVM first class aggregate.<br>
 <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">
<div></div><div>Either way, there is no flag to do this.  You would have to modify Clang.</div><div><br></div><div>First, this would break all C++, which may not matter to you.</div></div></div></div></blockquote><div> <br>
</div><div>How/what would this cause to break in C++?<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">
<div>Second, your code would probably be ABI incompatible with all other code.</div></div></div></div></blockquote><div><br></div><div>I kind of assumed this would happen. I'm not too concerned because I have control over what is & isn't compiled in this way & can do the necessary ABI conversions.<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div>2. Is there a way to make Clang only perform aligned loads & stores?<br>
</div></div></div></div></blockquote><div><br></div></div><div>Are you asking if it's possible to force the alignment of loads and stores up to the natural alignment of the storage type?  Clang will already add alignment annotations to loads and stores as required by the language.  It only leaves them off in cases where it knows the alignment is lost, like packed structs or explicitly underaligned types. </div>

</div></div></div>
</blockquote></div><br></div><div class="gmail_extra">That is what I'm asking.<br><br></div><div class="gmail_extra">Thanks.<br></div></div>