<div dir="ltr">In essence, LLVM doesn't lower bitfield operations.  It's the responsibility of the frontend to lower bitfields to some appropriate integral type, load that, and mask the relevant bits in and out.<div>
<br></div><div>An advantage of this design is that there's only one way to represent bitfield operations, and the optimizers only have to match one form.  If we had two ways of representing this, users would file bugs that manual masking was faster or slower than bitfields.</div>
<div><br></div><div>Another advantage is that it gives the frontend control over width of the load and store, which is important for implementing memory models with threads.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Sun, Apr 13, 2014 at 8:58 AM, Rodney M. Bates <span dir="ltr"><<a href="mailto:rodney_bates@lcwb.coop" target="_blank">rodney_bates@lcwb.coop</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
It looks like, for a non-packed struct, that every member starts on a<br>
byte boundary, even if its size is not a byte multiple, e.g,, i1 or i20.<br>
And since getelementptr starts with and computes a pointer, it, combined<br>
with load/store could only be used with this limitation.<br>
<br>
So, in the case of a packed struct, can I get fields to start and end<br>
at non-byte boundaries?  I would still not be able to use getelementptr/<br>
load/store to access them, but presumably I could use extractvalue and insertvalue?<br>
Can I do this on either memory values or register values?<br>
<br>
Even with a field that is a multiple of full bytes, if I were to fetch a word from<br>
memory to a register variable, use extractvalue on that, or use insertvalue and then<br>
store the word, would I lose optimization possibilities that I would have if I used<br>
load or store?<span class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
Rodney Bates<br>
<a href="mailto:rodney.m.bates@acm.org" target="_blank">rodney.m.bates@acm.org</a><br>
______________________________<u></u>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvmdev</a><br>
</font></span></blockquote></div><br></div>