<div dir="ltr">On 8 February 2013 10:40, Sebastien DELDON-GNB <span dir="ltr"><<a href="mailto:sebastien.deldon@st.com" target="_blank">sebastien.deldon@st.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal">Hi all,<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Everything is in the tile, I would like to enforce generation of vmla.f32 instruction for scalar operations on cortex-a9, so is there a LLMV neon intrinsic available for that  ?<u></u><u></u></p><p class="MsoNormal">
</p></div></div></blockquote></div><br></div><div class="gmail_extra" style>Hi Sebastien,</div><div class="gmail_extra" style><br></div><div class="gmail_extra" style>LLVM doesn't use intrinsics when there is a clear way of representing the same thing on standard IR. In the case of VMLA, it is generated from a pattern:</div>
<div class="gmail_extra" style><br></div><div class="gmail_extra" style>%mul = mul <N x type> %a, %b</div><div class="gmail_extra" style>%sum = add <N x type> %mul, %c</div><div class="gmail_extra" style><br></div>
<div class="gmail_extra" style>So, if you generate FAdd(FMull(a, b), c), you'll probably get an FMLA. </div><div class="gmail_extra" style><br></div><div class="gmail_extra" style>It's not common, but also not impossible that the two instructions will be reordered, or even removed, so you need to make sure the intermediate result is not used  (or it'll probably use VMUL/VADD) and the final result is used (or it'll be removed) and keep the body of the function/basic block small (to avoid reordering).</div>
<div class="gmail_extra" style><br></div><div class="gmail_extra" style>cheers,</div><div class="gmail_extra" style>--renato</div></div>