<div dir="ltr"><div>While fixing something, I discovered that the DAG combiner will drop the flags from ISD::FMAXNUM if it is swapping operands to canonicalize the constant operand on the RHS. <br></div><div>That is presumably because of this code in the DAG combiner:</div><div><span style="font-family:monospace">  // Canonicalize to constant on RHS.<br>  if (isConstantFPBuildVectorOrConstantFP(N0) &&<br>      !isConstantFPBuildVectorOrConstantFP(N1))<br>    return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N1, N0);</span></div><div><br></div><div>As a result, the DAG transformations that are applied to something like</div><div><span style="font-family:monospace"><span class="gmail-k">call</span> <span class="gmail-k">fast</span> <span class="gmail-p"><</span><span class="gmail-m">4</span> <span class="gmail-k">x</span> <span class="gmail-kt">float</span><span class="gmail-p">></span> <span class="gmail-vg">@llvm.maxnum.v4f32</span><span class="gmail-p">(<</span><span class="gmail-m">4</span> <span class="gmail-k">x</span> <span class="gmail-kt">float</span><span class="gmail-p">></span> <span class="gmail-nv gmail-nv-Anonymous">%3</span><span class="gmail-p">,</span> <span class="gmail-p"><</span><span class="gmail-m">4</span> <span class="gmail-k">x</span> <span class="gmail-kt">float</span><span class="gmail-p">></span> <span class="gmail-k">zeroinitializer</span><span class="gmail-p">)</span></span></div><div><span class="gmail-p">vs.</span></div><div><span style="font-family:monospace"><span class="gmail-p"><span class="gmail-k">call</span> <span class="gmail-k">fast</span> <span class="gmail-p"><</span><span class="gmail-m">4</span> <span class="gmail-k">x</span> <span class="gmail-kt">float</span><span class="gmail-p">></span> <span class="gmail-vg">@llvm.maxnum.v4f32</span><span class="gmail-p">(<</span><span class="gmail-m">4</span> <span class="gmail-k">x</span> <span class="gmail-kt">float</span><span class="gmail-p">></span> <span class="gmail-nv gmail-nv-Anonymous">zeroinitializer</span><span class="gmail-p">,</span> <span class="gmail-p"><</span><span class="gmail-m">4</span> <span class="gmail-k">x</span> <span class="gmail-kt">float</span><span class="gmail-p">></span> <span class="gmail-k">%3</span><span class="gmail-p">)</span></span></span><br></div><div>will be very different.</div><div><br></div><div>I wanted to get some opinions on how prevalent this is and whether there is any effort ongoing to fix it.<br></div></div>