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
