[llvm-dev] Dereferenceable load semantics & LICM

Sanjoy Das via llvm-dev llvm-dev at lists.llvm.org
Fri Mar 31 14:20:22 PDT 2017


Hi Piotr,

On March 31, 2017 at 1:07:12 PM, Piotr Padlewski
(piotr.padlewski at gmail.com) wrote:
> [snip]
> Do I understand it correctly, that it is legal to do the hoist because all
> of the instructions above %vtable does not throw?

Yes, I think you're right.  HeaderMayThrow is a conservative
approximation, and the conservativeness is biting us here.

> Are there any plans to fix it in the future? The fix doesn't seem hard to

Not to my knowledge.

> write and I can do it, but I am not sure if it won't be too expensive.

Maybe we can do it (relatively) cheaply:

 - Remember the first throwing instruction in the header, instead of a
   boolean, in LoopSafetyInfo

 - In hoistRegion, remember if you've seen the first throwing
   instruction yet

 - Pass the above as a boolean parameter to isGuaranteedToExecute, and
   instead of
     if (Inst.getParent() == CurLoop->getHeader())
       return !SafetyInfo->HeaderMayThrow;
   do something like
     if (Inst.getParent() == CurLoop->getHeader())
       return IsBeforeThrowingInst;

-- Sanjoy


More information about the llvm-dev mailing list