[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