[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