[llvm] r237593 - Exploit dereferenceable_or_null attribute in LICM pass

Philip Reames listmail at philipreames.com
Thu May 21 20:42:59 PDT 2015


Chandler,

I've been busy the last few days and not paying the most attention to 
LLVM happenings, but I'm a bit confused.  This change had been in for 
several days and, as far as I know, it hadn't broken the bots or 
anything.  A problem report to fix time of just under 3 hours (counting 
from Nick's email) seems entirely within normal practice.  What am I 
missing here?

For the record, my fix landed at about the same time as your email.  If 
you'd like to revert both, I wouldn't actively oppose it.  I just 
haven't seen any need so far.

Philip

On 05/21/2015 07:19 PM, Chandler Carruth wrote:
> Given the very fragile state of the tree over the past few days, I'd 
> suggest reverting first and then reapplying when you have the fix. If 
> it ends up easy, great, but this way we can hopefully make it a bit 
> farther in testing.
>
> On Thu, May 21, 2015 at 5:31 PM Philip Reames 
> <listmail at philipreames.com <mailto:listmail at philipreames.com>> wrote:
>
>     Sanjoy is out on vacation, but I'm going to look into this.  I'll
>     be offline for about an hour, but should be able to start
>     investigating by around 7pm.  On the surface, it looks like it
>     should be an easy fix.  Hopefully, I'll have this resolved within
>     a couple of hours.  Sorry for the breakage.
>
>     Philip
>
>
>     On 05/21/2015 04:38 PM, Nick Lewycky wrote:
>>     On 18 May 2015 at 11:07, Sanjoy Das
>>     <sanjoy at playingwithpointers.com
>>     <mailto:sanjoy at playingwithpointers.com>> wrote:
>>
>>         Author: sanjoy
>>         Date: Mon May 18 13:07:00 2015
>>         New Revision: 237593
>>
>>         URL: http://llvm.org/viewvc/llvm-project?rev=237593&view=rev
>>         <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D237593-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=EZRvoJai0V1ZEULFLl3UFBFw3GpoHtruFDOok84hYrI&s=4QqYr7GqSrZjVxTSY4zWHbjeCHYmt-2bkaDpOtpbsM8&e=>
>>         Log:
>>         Exploit dereferenceable_or_null attribute in LICM pass
>>
>>         Summary:
>>         Allow hoisting of loads from values marked with
>>         dereferenceable_or_null
>>         attribute. For values marked with the attribute perform
>>         context-sensitive analysis to determine whether it's
>>         known-non-null or
>>         not.
>>
>>
>>     This commit caused PR23608, see the testcase in that PR.
>>
>>         -/// Only sink or hoist an instruction if it is not a
>>         trapping instruction
>>         +/// Only sink or hoist an instruction if it is not a
>>         trapping instruction,
>>         +/// or if the instruction is known not to trap when moved to
>>         the preheader.
>>          /// or if it is a trapping instruction and is guaranteed to
>>         execute.
>>         -///
>>         -static bool isSafeToExecuteUnconditionally(const Instruction
>>         &Inst,
>>         +static bool isSafeToExecuteUnconditionally(const Instruction
>>         &Inst,
>>                                                     const
>>         DominatorTree *DT,
>>         +                                           const
>>         TargetLibraryInfo *TLI,
>>                                                     const Loop *CurLoop,
>>                                                     const
>>         LICMSafetyInfo *SafetyInfo) {
>>         -  // If it is not a trapping instruction, it is always safe
>>         to hoist.
>>         -  if (isSafeToSpeculativelyExecute(&Inst))
>>         +  const Instruction *CtxI =
>>         CurLoop->getLoopPreheader()->getTerminator();
>>
>>
>>     A Loop* is not guaranteed to have a preheader, in which case
>>     CurLoop->getLoopPreheader() will return null.
>>
>>     Nick
>>
>>         + if (isSafeToSpeculativelyExecute(&Inst, CtxI, DT, TLI))
>>              return true;
>>
>>            return isGuaranteedToExecute(Inst, DT, CurLoop, SafetyInfo);
>>
>>
>>
>>
>>     _______________________________________________
>>     llvm-commits mailing list
>>     llvm-commits at cs.uiuc.edu  <mailto:llvm-commits at cs.uiuc.edu>
>>     http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>     _______________________________________________
>     llvm-commits mailing list
>     llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
>     http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150521/fdd5d4c8/attachment.html>


More information about the llvm-commits mailing list