<div style="line-height:1.7;color:#000000;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: 0;"><br></p><p style="margin: 0;"><br></p><p style="margin: 0;"><br></p><p style="margin: 0;"><br></p><div style="position:relative;zoom:1"></div><div id="divNeteaseMailCard"></div><p style="margin: 0;"><br></p><pre><br>At 2020-06-30 07:46:41, "James Courtier-Dutton" <james.dutton@gmail.com> 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
><llvm-dev@lists.llvm.org> 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
>> llvm-dev@lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
</pre></div>