<div dir="ltr"><div>Hi </div><div> Thanks !</div><div> so for this example </div><div>void foo(X &src, X &dst) {<br> dst = src;<br>}</div><div>and the IR:</div><div><br></div><div>define void @foo(X&, X&)(%struct.X* dereferenceable(8), %struct.X* dereferenceable(8)) #0 {<br> %3 = alloca %struct.X*, align 8<br> %4 = alloca %struct.X*, align 8<br> store %struct.X* %0, %struct.X** %3, align 8<br> store %struct.X* %1, %struct.X** %4, align 8<br> %5 = load %struct.X*, %struct.X** %3, align 8<br> %6 = load %struct.X*, %struct.X** %4, align 8<br> %7 = bitcast %struct.X* %6 to i8*<br> %8 = bitcast %struct.X* %5 to i8*<br> call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %7, i8* align 4 %8, i64 8, i1 false)<br> ret void<br>}</div><div><br></div><div>how can I transform the llvm.memcpy into data move loop IR and eliminate the bitcast instruction ?</div><div><br></div><div>Regards</div><div>Jun</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-01-30 15:24 GMT+08:00 Craig Topper <span dir="ltr"><<a href="mailto:craig.topper@gmail.com" target="_blank">craig.topper@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">The i8 type in the pointers doesn't matter a whole lot. There's a long term plan to remove the type from all pointers in llvm IR.<div><br></div><div>Yes, clang will use memcpy for struct copies. You can see example IR here <a href="https://godbolt.org/g/8gQ18m" target="_blank">https://godbolt.org/g/<wbr>8gQ18m</a>. You'll see that the struct pointers are bitcasted to i8* before the call.</div></div><div class="gmail_extra"><br clear="all"><div><div class="m_-3223831155570563618gmail_signature" data-smartmail="gmail_signature">~Craig</div></div>
<br><div class="gmail_quote"><div><div class="h5">On Mon, Jan 29, 2018 at 11:12 PM, ma jun via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr">
<br class="m_-3223831155570563618m_8789134829123072660gmail-Apple-interchange-newline"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Hi all</span><div> I'm new here, and I have some question about llvm.memcpy intrinsic.<br><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"> why does llvm.memcpy intrinsic only support i8* for first two arguments? and does clang will also transform struct copy into llvm.memcpy ? what format does IR looks like? </div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"> Thanks !</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"> </div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"> Regards</div><span class="m_-3223831155570563618HOEnZb"><font color="#888888"><span class="m_-3223831155570563618m_8789134829123072660gmail-HOEnZb" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><font color="#888888"><span class="m_-3223831155570563618m_8789134829123072660gmail-m_-3461872585872149570HOEnZb"><font color="#888888"><div> Jun</div></font></span></font></span>
<br></font></span></div></div>
<br></div></div>______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank" rel="noreferrer">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>