I have an ebb analysis around that can, in constant time, tell you there nearest dominating may throw that occurs before a given instruction, if any.  <div><br></div><div><br><div dir="auto"><br><div class="gmail_quote"><div dir="ltr">On Fri, Mar 31, 2017, 11:20 AM Sanjoy Das <<a href="mailto:sanjoy@playingwithpointers.com">sanjoy@playingwithpointers.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Piotr,<br class="gmail_msg">
<br class="gmail_msg">
On March 31, 2017 at 1:07:12 PM, Piotr Padlewski<br class="gmail_msg">
(<a href="mailto:piotr.padlewski@gmail.com" class="gmail_msg" target="_blank">piotr.padlewski@gmail.com</a>) wrote:<br class="gmail_msg">
> [snip]<br class="gmail_msg">
> Do I understand it correctly, that it is legal to do the hoist because all<br class="gmail_msg">
> of the instructions above %vtable does not throw?<br class="gmail_msg">
<br class="gmail_msg">
Yes, I think you're right.  HeaderMayThrow is a conservative<br class="gmail_msg">
approximation, and the conservativeness is biting us here.<br class="gmail_msg">
<br class="gmail_msg">
> Are there any plans to fix it in the future? The fix doesn't seem hard to<br class="gmail_msg">
<br class="gmail_msg">
Not to my knowledge.<br class="gmail_msg">
<br class="gmail_msg">
> write and I can do it, but I am not sure if it won't be too expensive.<br class="gmail_msg">
<br class="gmail_msg">
Maybe we can do it (relatively) cheaply:<br class="gmail_msg">
<br class="gmail_msg">
 - Remember the first throwing instruction in the header, instead of a<br class="gmail_msg">
   boolean, in LoopSafetyInfo<br class="gmail_msg">
<br class="gmail_msg">
 - In hoistRegion, remember if you've seen the first throwing<br class="gmail_msg">
   instruction yet<br class="gmail_msg">
<br class="gmail_msg">
 - Pass the above as a boolean parameter to isGuaranteedToExecute, and<br class="gmail_msg">
   instead of<br class="gmail_msg">
     if (Inst.getParent() == CurLoop->getHeader())<br class="gmail_msg">
       return !SafetyInfo->HeaderMayThrow;<br class="gmail_msg">
   do something like<br class="gmail_msg">
     if (Inst.getParent() == CurLoop->getHeader())<br class="gmail_msg">
       return IsBeforeThrowingInst;<br class="gmail_msg">
<br class="gmail_msg">
-- Sanjoy<br class="gmail_msg">
</blockquote></div></div></div>