<div dir="ltr">This is likely more of a canonicalization than an optimization. This is done so that if you got the add followed by mul input or the mul followed by add input they would be canonicalized to the same sequence. Maybe not the optimal sequence but at least the same. I didn't check, but I suspect this is happening in InstCombine in the middle end.<div><div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jun 29, 2020 at 8:37 PM Ben Shi via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="line-height:1.7;color:rgb(0,0,0);font-size:14px;font-family:Arial"><div style="margin:0px">Hi, James,</div><div style="margin:0px"><br></div><div style="margin:0px">Thanks for your reply. </div><div style="margin:0px"><br></div><div style="margin:0px">I do not think it is always true, that <span style="font-family:arial;white-space:pre-wrap">"mul then add" is faster than "add then mul".</span></div><div style="margin:0px"><span style="font-family:arial;white-space:pre-wrap"><br></span></div><div style="margin:0px"><span style="font-family:arial;white-space:pre-wrap">For example, </span></div><div style="margin:0px"><span style="font-family:arial;white-space:pre-wrap"><br></span></div><div style="margin:0px"><font face="arial"><span style="white-space:pre-wrap">A small immediate can be directly encoded in the instruction, but it becomes a larger one after a multiplication, which has to be loaded from the constant pool (extra memory access).</span></font></div><div style="margin:0px"><font face="arial"><span style="white-space:pre-wrap"><br></span></font></div><div style="margin:0px"><font face="arial"><span style="white-space:pre-wrap">So I wonder, is it possile to prevent it, via changes to the config of the base class TargetLowering,than writing special custom C++ code.</span></font></div><p style="margin:0px"><br></p><p style="margin:0px">Ben</p><p style="margin:0px"><br></p><p style="margin:0px"><br></p><p style="margin:0px"><br></p><p style="margin:0px"><br></p><div style="zoom:1"></div><div id="gmail-m_7496457996128461471divNeteaseMailCard"></div><p style="margin:0px"><br></p><pre><br>At 2020-06-30 07:46:41, "James Courtier-Dutton" <<a href="mailto:james.dutton@gmail.com" target="_blank">james.dutton@gmail.com</a>> wrote:
>Hi Ben,
>
>Why do you want to stop it?
>"mul then add" is faster than "add then mul".
>The result is the same in both cases.
>
>On Mon, 29 Jun 2020 at 22:11, Ben Shi via llvm-dev
><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:
>>
>> Hello,
>> I have an instruction pattern like
>>   %2 = add i32 %0, 25
>>   %3 = mul i32 %2, 525
>>
>> and llvm will optimize it to
>> %2 = mul i32 %0, 525
>> %3 = add i32 %2, 12525
>>
>> how to prevent it?
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
>> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre></div>_______________________________________________<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="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>