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.

 

Attachment: DataflowWorklistInverse.patch
Description: Binary data

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to