<div dir="ltr">+Chandler.<div><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 25, 2017 at 7:04 AM, Serge Pavlov <span dir="ltr"><<a href="mailto:sepavloff@gmail.com" target="_blank">sepavloff@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>The fact is that sometimes domtree is not available.</div></div></blockquote><div><br></div><div><br></div><div>Then why is there a DominatorTree * to use?</div><div>It's fine for the analysis to be not available. When that happens,it should not produce a DominatorTree *.</div><div><br></div><div>IE DominatorTree * should be a nullptr you can check against.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div> If a function is `available_externally`  all codegen passes are skipped, although they are marked as required. </div></div></blockquote><div><br></div><div>See above :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>MachineDominatorTree is also skipped and there is no domtree at all.</div></div></blockquote><div><br></div><div>Again, so why is there a DominatorTree * to use?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div> Attempt to call `getRoot` for such domtree will obviously cause a crash. There is no way to get 'right' domtree in this case, so prior to using it we must either:</div><div><span class="m_-2761789139431732640gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>1. Check if corresponding pass was indeed run, or</div><div><span class="m_-2761789139431732640gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>2. Check the domtree state trying to reveal if it is valid.</div><div>The first approach was taken in <a href="https://reviews.llvm.org/D27190" target="_blank">https://reviews.llvm.org/<wbr>D27190</a> but it was not accepted. This fix tries to use variant 2.</div></div></blockquote><div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div><div>Just to emphasize a key point: there are cases when domtree is absent because the pass that it creates was not run and this behavior is by design.</div><div><br></div></div></blockquote><div><br></div><div>and in those cases, we should  not try to create an invalid datastructure. We should create no datastructure, and let people test against the nullptr.</div><div><br></div><div><br></div></div></div></div></div>