Thanks Artyom.  I'll review this later today.

> On Aug 8, 2014, at 8:48 AM, Artyom Skrobov <[email protected]> wrote:
> 
> Thank you for the patience – indeed it took me some time to prepare the 
> proper patch, which is now ready for review.
>  
> It comes without a regression test, as the only observable change is 
> performance improvement of the analysis.
>  
>  
> From: Alexander Kornienko [mailto:[email protected]] 
> Sent: 07 August 2014 23:35
> To: Artyom Skrobov
> Cc: [email protected] Commits
> Subject: Re: r214064 - Factoring DataflowWorklist out of LiveVariables and 
> UninitializedValues analyses
>  
> Any news here? This keeps biting us.
>  
> Maybe you can apply this patch first and work on a better solution after that?
> 
> On Tue, Aug 5, 2014 at 6:23 PM, Artyom Skrobov <[email protected]> wrote:
> So, the simplest way to restore the original behaviour seems to be
>  
> Index: lib/Analysis/LiveVariables.cpp
> ===================================================================
> --- lib/Analysis/LiveVariables.cpp   (revision 214183)
> +++ lib/Analysis/LiveVariables.cpp   (working copy)
> @@ -451,6 +451,7 @@
>    // Construct the dataflow worklist.  Enqueue the exit block as the
>    // start of the analysis.
>    DataflowWorklist worklist(*cfg, AC);
> +  worklist.quick_hack();
>    llvm::BitVector everAnalyzedBlock(cfg->getNumBlockIDs());
>    // FIXME: we should enqueue using post order.
> Index: include/clang/Analysis/Analyses/DataflowWorklist.h
> ===================================================================
> --- include/clang/Analysis/Analyses/DataflowWorklist.h     (revision 214183)
> +++ include/clang/Analysis/Analyses/DataflowWorklist.h     (working copy)
> @@ -53,6 +53,7 @@
>    const CFGBlock *dequeue();
>    void sortWorklist();
> +  void quick_hack() { enqueuedBlocks.reset(); PO_I = PO_E; }
> };
>  } // end clang namespace
>  
> This has the effect of disabling the fallback post-order iteration.
>  
> The reason for the performance regression, however, is related to the 
> iteration order over the CFG: UninitializedValues expects to use the default 
> (i.e. reverse) PostOrderCFGView iteration, whereas LiveVariables expects the 
> opposite order, corresponding to using llvm::GraphTraits<llvm::Inverse<const 
> CFG*> > > as the last parameter in typedef po_iterator.
>  
> I’m currently thinking of a proper solution which would allow using 
> PostOrderCFGView for iteration in either direction.
>  
>  
>  
> From: Alexander Kornienko [mailto:[email protected]] 
> Sent: 05 August 2014 12:30
> 
> To: Artyom Skrobov
> Cc: [email protected] Commits
> Subject: Re: r214064 - Factoring DataflowWorklist out of LiveVariables and 
> UninitializedValues analyses
>  
> On another file from the same project the difference in my setup is 2 minutes 
> before the patch vs. 50+ hours (I terminated the analyzer before it finished) 
> after the patch. So it's a rather bad performance regression.
>  
> 
> <DataflowWorklistInverse.patch>
> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to