<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi Romaric,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I did some work in this area recently. Just In case you haven't noticed it yet: I have first moved FindOptimalMemOpLowering to TargetTransformInfo (<a href="https://reviews.llvm.org/D59766" id="LPlnk689979">https://reviews.llvm.org/D59766</a>) so that it can
 be reused. I added a function getMemcpyCost to TTI (<a href="https://reviews.llvm.org/D59252" id="LPlnk377663">https://reviews.llvm.org/D59252</a>), which I implement in the ARM backend (<a href="https://reviews.llvm.org/D59787" id="LPlnk818580">https://reviews.llvm.org/D59787</a>),
 which uses this <span style="font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important">FindOptimalMemOpLowering to determine the cost of a memcpy.</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important">My goal is to optimise the case shown in the description of <a href="https://reviews.llvm.org/D59129" id="LPNoLP816764">https://reviews.llvm.org/D59129</a>,
 which sounds similar to the problem you're having.</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important"><br>
</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important">I've looked at that condition too that you are referring to. Some assumptions are made, and I thought there was room for improvement.
 But I didn't want to change too much at the same time while I was refactoring it, but it was still on my list to look at this again some time later. That's why I can't comment further on details at this point, but will see what I can do.</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important"><br>
</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important">Cheers,</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important">Sjoerd.</span></div>
<br>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255); display: inline !important"><br>
</span></div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> llvm-dev <llvm-dev-bounces@lists.llvm.org> on behalf of Romaric Jodin via llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Sent:</b> 16 May 2019 13:26<br>
<b>To:</b> llvm-dev@lists.llvm.org<br>
<b>Subject:</b> [llvm-dev] SelectionDAG.cpp: FindOptimalMemOpLowering behavior</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">Hi all,
<div><br>
</div>
<div>I'm have a question about the behavior of the "FindOptimalMemOpLowering" function.</div>
<div>It is mentioned that this function only need to look at the "DstAlign" and not the "SrcAlign" because "SrcAlign" is always greater than "DstAlign".</div>
<div>But if "DstAlign" is equal to zero and "SrcAlign" to one the condition is respected. But in this case, wouldn't we want to take "SrcAlign" into account instead of "DstAlign".</div>
<div><br>
</div>
<div>I have a code where the source is a buffer of bytes (aligned on 1-byte for my backend), and a destination which is the stack, which is seen by LLVM as an object which alignment can change (SelectionDAG.cpp: getMemcpyLoadsAndStores), and so "DstAlign" is
 set to zero.</div>
<div><br>
</div>
<div>At the end, I have a memcpy which is inlined, the stores are well aligned with the stack, but the loads are aligned on MVT:i64 because the "SrcAlign" was not taken into account in "FindOptimalMemOpLowering".</div>
<div><br>
</div>
<div>I have the default implementation of the "getOptimalMemOpType".</div>
<div>
<div><br>
</div>
<div>Can someone tell me if I'm misunderstanding the behavior of this function, or if there is something to fix.</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Romaric</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>