[llvm-commits] [llvm] r60742 - /llvm/trunk/include/llvm/Support/PredIteratorCache.h

Dan Gohman gohman at apple.com
Sat Jan 3 10:13:17 PST 2009


This header misses an include guard.

Dan

On Dec 8, 2008, at 10:27 PM, Chris Lattner wrote:

> Author: lattner
> Date: Tue Dec  9 00:27:07 2008
> New Revision: 60742
>
> URL: http://llvm.org/viewvc/llvm-project?rev=60742&view=rev
> Log:
> pred_iterator got a lot slower since use-diet landed.  This is a
> really simple cache class for these queries.  Hopefully this can
> be removed if pred_iterator speeds back up.
>
> Added:
>    llvm/trunk/include/llvm/Support/PredIteratorCache.h
>
> Added: llvm/trunk/include/llvm/Support/PredIteratorCache.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/PredIteratorCache.h?rev=60742&view=auto
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/include/llvm/Support/PredIteratorCache.h (added)
> +++ llvm/trunk/include/llvm/Support/PredIteratorCache.h Tue Dec  9  
> 00:27:07 2008
> @@ -0,0 +1,56 @@
> +//===- llvm/Support/PredIteratorCache.h - pred_iterator Cache ---*-  
> C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open  
> Source
> +// License. See LICENSE.TXT for details.
> +//
> +// 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> +//
> +// This file defines the PredIteratorCache class.
> +//
> +// 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> +
> +#include "llvm/Support/Allocator.h"
> +#include "llvm/Support/CFG.h"
> +#include "llvm/ADT/DenseMap.h"
> +#include "llvm/ADT/SmallVector.h"
> +
> +namespace llvm {
> +
> +  /// PredIteratorCache - This class is an extremely trivial cache  
> for
> +  /// predecessor iterator queries.  This is useful for code that  
> repeatedly
> +  /// wants the predecessor list for the same blocks.
> +  class PredIteratorCache {
> +    /// BlockToPredsMap - Pointer to null-terminated list.
> +    DenseMap<BasicBlock*, BasicBlock**> BlockToPredsMap;
> +
> +    /// Memory - This is the space that holds cached preds.
> +    BumpPtrAllocator Memory;
> +  public:
> +
> +    /// GetPreds - Get a cached list for the null-terminated  
> predecessor list of
> +    /// the specified block.  This can be used in a loop like this:
> +    ///   for (BasicBlock **PI = PredCache->GetPreds(BB); *PI; ++PI)
> +    ///      use(*PI);
> +    /// instead of:
> +    /// for (pred_iterator PI = pred_begin(BB), E = pred_end(BB);  
> PI != E; ++PI)
> +    BasicBlock **GetPreds(BasicBlock *BB) {
> +      BasicBlock **&Entry = BlockToPredsMap[BB];
> +      if (Entry) return Entry;
> +
> +      SmallVector<BasicBlock*, 32> PredCache(pred_begin(BB),  
> pred_end(BB));
> +      PredCache.push_back(0); // null terminator.
> +
> +      Entry = Memory.Allocate<BasicBlock*>(PredCache.size());
> +      std::copy(PredCache.begin(), PredCache.end(), Entry);
> +      return Entry;
> +    }
> +
> +    /// clear - Remove all information.
> +    void clear() {
> +      BlockToPredsMap.clear();
> +      Memory.Reset();
> +    }
> +  };
> +} // end namespace llvm
> \ No newline at end of file
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list