[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