<div dir="ltr"><div style>The attached patch modifies DAGTypeLegalizer and SelectionDAGISel to propagate DAG node ordering.  We currently (for better or for worse) use source scheduling, and we're being hit by issues in the scheduler due to the ordering being lost.</div>
<div style><br></div><div style><br></div><div style>One issue with this patch is that is causes one X86 test to fail: win_ftol2</div><div style><br></div><div style>The only meaningful difference I can spot (other than an extra spill) is that the 'fxch' instruction is eliminated.  Can anyone more familiar with the X86 back-end comment on why DAG node ordering would affect this test?  I've narrowed the issue down to being caused by this patch's change to DAGTypeLegalizer::SetExpandedInteger. (e.g. if this method propagates DAG node ordering in the newly created nodes, this test starts to fail).</div>
<div style><br></div><div style><br></div><div style>Current Output:</div><div style><br></div><div style><div><font face="courier new, monospace">_double_ui64_2:                         # @double_ui64_2</font></div><div>
<font face="courier new, monospace"># BB#0:</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">    </span>pushl<span class="" style="white-space:pre">     </span>%ebp</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">      </span>movl<span class="" style="white-space:pre">      </span>%esp, %ebp</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>pushl<span class="" style="white-space:pre">     </span>%esi</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">      </span>andl<span class="" style="white-space:pre">      </span>$-8, %esp</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>subl<span class="" style="white-space:pre">      </span>$32, %esp</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre"> </span>fldl<span class="" style="white-space:pre">      </span>24(%ebp)</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>fldl<span class="" style="white-space:pre">      </span>16(%ebp)</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">  </span>fldl<span class="" style="white-space:pre">      </span>8(%ebp)</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>fdiv<span class="" style="white-space:pre">      </span>%st(0), %st(1)</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">    </span>fsubp<span class="" style="white-space:pre">     </span>%st(2)</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>fxch</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">      </span>calll<span class="" style="white-space:pre">     </span>__ftol2</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>movl<span class="" style="white-space:pre">      </span>%eax, 4(%esp)           # 4-byte Spill</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">    </span>movl<span class="" style="white-space:pre">      </span>%edx, (%esp)            # 4-byte Spill</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>calll<span class="" style="white-space:pre">     </span>__ftol2</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">   </span>movl<span class="" style="white-space:pre">      </span>4(%esp), %ecx           # 4-byte Reload</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>subl<span class="" style="white-space:pre">      </span>%ecx, %eax</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>movl<span class="" style="white-space:pre">      </span>(%esp), %esi            # 4-byte Reload</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>sbbl<span class="" style="white-space:pre">      </span>%esi, %edx</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>leal<span class="" style="white-space:pre">      </span>-4(%ebp), %esp</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>popl<span class="" style="white-space:pre">      </span>%esi</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">      </span>popl<span class="" style="white-space:pre">      </span>%ebp</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>ret</font></div><div><br></div><div><br></div><div style>Output With Patch:</div><div style><br></div><div style><div><font face="courier new, monospace">_double_ui64_2:                         # @double_ui64_2</font></div>
<div><font face="courier new, monospace"># BB#0:</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre"> </span>pushl<span class="" style="white-space:pre">     </span>%ebp</font></div><div>
<font face="courier new, monospace"><span class="" style="white-space:pre">   </span>movl<span class="" style="white-space:pre">      </span>%esp, %ebp</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>andl<span class="" style="white-space:pre">      </span>$-8, %esp</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>subl<span class="" style="white-space:pre">      </span>$32, %esp</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre"> </span>fldl<span class="" style="white-space:pre">      </span>24(%ebp)</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>fldl<span class="" style="white-space:pre">      </span>16(%ebp)</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">  </span>fldl<span class="" style="white-space:pre">      </span>8(%ebp)</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>fdiv<span class="" style="white-space:pre">      </span>%st(0), %st(1)</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">    </span>fsubp<span class="" style="white-space:pre">     </span>%st(2)</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>calll<span class="" style="white-space:pre">     </span>__ftol2</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">   </span>movl<span class="" style="white-space:pre">      </span>%eax, 12(%esp)          # 4-byte Spill</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>movl<span class="" style="white-space:pre">      </span>%edx, 8(%esp)           # 4-byte Spill</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">    </span>calll<span class="" style="white-space:pre">     </span>__ftol2</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>movl<span class="" style="white-space:pre">      </span>12(%esp), %ecx          # 4-byte Reload</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">   </span>subl<span class="" style="white-space:pre">      </span>%eax, %ecx</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>movl<span class="" style="white-space:pre">      </span>8(%esp), %eax           # 4-byte Reload</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">   </span>sbbl<span class="" style="white-space:pre">      </span>%edx, %eax</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>movl<span class="" style="white-space:pre">      </span>%eax, 4(%esp)           # 4-byte Spill</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">    </span>movl<span class="" style="white-space:pre">      </span>%ecx, %eax</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>movl<span class="" style="white-space:pre">      </span>4(%esp), %edx           # 4-byte Reload</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">   </span>movl<span class="" style="white-space:pre">      </span>%ebp, %esp</font></div>
<div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>popl<span class="" style="white-space:pre">      </span>%ebp</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">      </span>ret</font></div>
</div></div><br clear="all"><div><br></div>-- <br><br><div>Thanks,</div><div><br></div><div>Justin Holewinski</div>
</div>