<div dir="ltr"><div class="gmail_quote">On Wed, Apr 8, 2015 at 10:57 PM Lang Hames <<a href="mailto:lhames@gmail.com">lhames@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Chandler,<div><br></div><div>Not as easy as I was hoping then.</div></div><div dir="ltr"><div><br></div><div>> <span style="font-size:13px">Do you see any other way to solve the problem of non-overlapping information?</span></div><div><br></div></div><div dir="ltr"><div>I'll have to do some reading. If there's any aliasing metadata that we can attach to express that the pointers are disjoint, that would work: In SelectionDAGBuilder we could detect disjoint, misaligned load/store pairs where the load has no other users and use the memcpy expansion instead.<br></div></div></blockquote><div><br></div><div>Is the problem specific to misaligned loads and stores? Because that seems much easier to solve.</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></div></div><div dir="ltr"><div><div><br></div></div><div>> Is an under aligned memcpy really that much better than an under aligned load and store??? <br></div><div class="gmail_extra"><br></div></div><div dir="ltr"><div class="gmail_extra">It saves a bit of shifting and masking as you try to reconstruct the full iN value in a register.</div></div></blockquote><div><br></div><div>But why does lowering as memcpy help? Essentially, I don't understand why we can't use exactly the same lowering strategy that memcpy (or memmove for that matter) would use and get the same effect.</div><div><br></div><div>If your concern is code size, I'm honestly still surprised that memcpy is smaller, but fine, emit the call *whenever* you end up with misaligned loads and stores?</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"> This would be exacerbated if we raised the size cap. I'll see if I can get you some numbers.</div></div></blockquote><div><br></div><div>FWIW, my suggestion about using legal integer types should not raise the cap at all, it should lower it on specific targets where we can't actually fit an 8-byte integer in a register.</div><div><br></div><div>Anyways, I don't think we need numbers if the primary concern is misaligned loads and stores. I just think that there has to be *some* lowering strategy that works in general for misaligned loads and stores and is no worse than calling memcpy.</div></div></div>