<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jul 30, 2011, at 9:05 AM, Jan Sjodin wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><blockquote type="cite"><blockquote type="cite">  I was unsure if this is desirable for the generic function. Is that the <br></blockquote></blockquote><br><blockquote type="cite">better place for this?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I can't imagine any user of SplitCriticalEdge would not want to<br></blockquote><blockquote type="cite">preserve live-ins... and it looks like the other current caller,<br></blockquote><blockquote type="cite">MachineLICM, suffers from the same issue.<br></blockquote><blockquote type="cite"><br></blockquote><br><br>I attached a modified patch.<br></div></blockquote><div><br></div><div>The patch looks good, but please fix the problem with uint64-to-float.ll first. As you correctly note, EFLAGS should not be live-in to the new blocks. We discussed this not so long ago, look for the "<span class="Apple-style-span" style="font-family: Helvetica; font-size: 18px; ">MachineSink and EFLAGS" thread from around June 5.</span></div><div><span class="Apple-style-span" style="font-family: Helvetica; font-size: 18px; "><br></span></div><blockquote type="cite"><div>In MacineBasicBlock::SplitCriticalEdge it handles the case of LiveVariables,<br>Why is there both LiveVariables and livins?<br></div></blockquote><div><br></div><div>The live-in lists are only used for physical registers. They are valid during all the codegen passes, but they are not very convenient to work with.</div><div><br></div><div>The register allocators use LiveVariables and LiveIntervals to track the liveness of virtual registers as well. LiveIntervals in particular is much better for interference checking.</div><div><br></div><div>/jakob</div><div><br></div></div></body></html>