<div dir="ltr"><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 dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br></blockquote></span></div><div class="gmail_quote"><div>This then leads to the problem i mentioned - because the may-throwness is not expressed at the bb level (or in the CFG, by having the call end the block, or at the least, a fake abnormal CFG edge), everything has to go checking every instruction along the entire path they want to hoist, whereas hoisting is normally just a simple dataflow problem with BB level properties :)</div><div> </div></div></div></div></blockquote><div><br></div><div>and to be clear, i'm just being colloquial about "expressed at the bb level". An analysis that everything used/kept up to date if it decided to insert throwing calls or make calls nounwind would have the same effect.  I happen to be more used to these things being flags on basic blocks, but whatever works.</div><div><br></div></div><br></div></div>