[llvm-dev] [PM] I think that the new PM needs to learn about inter-analysis dependencies...

Chandler Carruth via llvm-dev llvm-dev at lists.llvm.org
Wed Jul 13 01:33:04 PDT 2016

On Wed, Jul 13, 2016 at 12:47 AM Xinliang David Li <davidxl at google.com>

> On Tue, Jul 12, 2016 at 11:34 PM, Sean Silva <chisophugis at gmail.com>
> wrote:
>> On Tue, Jul 12, 2016 at 11:32 PM, Xinliang David Li <davidxl at google.com>
>> wrote:
>>> On Tue, Jul 12, 2016 at 10:57 PM, Chandler Carruth <chandlerc at gmail.com>
>>> wrote:
>>>> Yea, this is a nasty problem.
>>>> One important thing to understand is that this is specific to analyses
>>>> which hold references to other analyses. While this isn't unheard of, it
>>>> isn't as common as it could be. Still, definitely something we need to
>>>> address.
>>> We can call this type of dependencies (holding references)
>>> hard-dependency. The soft dependency refers to the case where analysis 'A'
>>> depends on 'B' during computation, but does not need 'B' once it is
>>> computed.
>>> There are actually quite a few examples of hard-dependency case. For
>>> instance LoopAccessInfo, LazyValueInfo etc which hold references to other
>>> analyses.
>>> Problem involving hard-dependency is actually easier to detect, as it is
>>> usually a compile time problem. Issues involving soft dependencies are more
>>> subtle and can lead to wrong code gen.
>> Did you mean to say that soft-dependency problems are easier to detect?
>> At least my intuition is that soft-dependency is easier because there is no
>> risk of dangling pointers to other analyses.
> I meant it is harder to detect.  If 'A' soft-depends on 'B', when 'B' gets
> invalidated, but 'A' survives (can be used without compile time problem
> such as dangling pointer) -- we don't really  know if 'A' is in fact still
> in valid state -- as it may need to be recalculated too.

The only way that 'A' is still around is if a pass *specifically* said it
preserved 'A'. So I think it is reasonable to say that even if 'B' is gone,
'A' remains trustworthy here.

The issue with the "hard dependency" that Sean pointed out is that there
are analyses which are trivial to update, but somewhat incidentally have
references to other analyses stashed away that are no longer valid. This
isn't actually a "hard dependency", in that there is no fundamental reason
why this layering was enforced.

Yet another reason to prefer passing auxiliary analyses into the query path
rather than modeling these as transitive invalidation is dramatically less
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160713/7350fa04/attachment.html>

More information about the llvm-dev mailing list