X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FAnalysis%2FIntervalPartition.h;h=feae6d82f82f5a3cfc10d891321f74ed3d92ee9a;hb=7714285efd2a7f4e503f0f600667193e63ee6d08;hp=ab16250e83c397eae177f586f1cc310422e9363d;hpb=96c466b06ab0c830b07329c1b16037f585ccbe40;p=oota-llvm.git diff --git a/include/llvm/Analysis/IntervalPartition.h b/include/llvm/Analysis/IntervalPartition.h index ab16250e83c..feae6d82f82 100644 --- a/include/llvm/Analysis/IntervalPartition.h +++ b/include/llvm/Analysis/IntervalPartition.h @@ -1,4 +1,11 @@ -//===- IntervalPartition.h - Interval partition Calculation ------*- C++ -*--=// +//===- IntervalPartition.h - Interval partition Calculation -----*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// // // This file contains the declaration of the IntervalPartition class, which // calculates and represents the interval partition of a function, or a @@ -18,6 +25,9 @@ #include "llvm/Analysis/Interval.h" #include "llvm/Pass.h" +#include + +namespace llvm { //===----------------------------------------------------------------------===// // @@ -27,22 +37,21 @@ // BasicBlock is a (possibly nonexistent) loop with a "tail" of non looping // nodes following it. // -class IntervalPartition : public FunctionPass, public std::vector { +class IntervalPartition : public FunctionPass { typedef std::map IntervalMapTy; IntervalMapTy IntervalMap; typedef std::vector IntervalListTy; Interval *RootInterval; + std::vector Intervals; public: - static AnalysisID ID; // We are an analysis, we must have an ID - - IntervalPartition(AnalysisID AID) : RootInterval(0) { assert(AID == ID); } + static char ID; // Pass identification, replacement for typeid - const char *getPassName() const { return "Interval Partition Construction"; } + IntervalPartition() : FunctionPass(&ID), RootInterval(0) {} // run - Calculate the interval partition for this function - virtual bool runOnFunction(Function *F); + virtual bool runOnFunction(Function &F); // IntervalPartition ctor - Build a reduced interval partition from an // existing interval graph. This takes an additional boolean parameter to @@ -50,8 +59,11 @@ public: // IntervalPartition(IntervalPartition &I, bool); - // Destructor - Free memory - ~IntervalPartition() { destroy(); } + // print - Show contents in human readable format... + virtual void print(std::ostream &O, const Module* = 0) const; + void print(std::ostream *O, const Module* M = 0) const { + if (O) print(*O, M); + } // getRootInterval() - Return the root interval that contains the starting // block of the function. @@ -59,7 +71,7 @@ public: // isDegeneratePartition() - Returns true if the interval partition contains // a single interval, and thus cannot be simplified anymore. - bool isDegeneratePartition() { return size() == 1; } + bool isDegeneratePartition() { return Intervals.size() == 1; } // TODO: isIrreducible - look for triangle graph. @@ -72,13 +84,15 @@ public: // getAnalysisUsage - Implement the Pass API virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); - AU.addProvided(ID); } -private: - // destroy - Reset state back to before function was analyzed - void destroy(); + // Interface to Intervals vector... + const std::vector &getIntervals() const { return Intervals; } + + // releaseMemory - Reset state back to before function was analyzed + void releaseMemory(); +private: // addIntervalToPartition - Add an interval to the internal list of intervals, // and then add mappings from all of the basic blocks in the interval to the // interval itself (in the IntervalMap). @@ -87,10 +101,12 @@ private: // updatePredecessors - Interval generation only sets the successor fields of // the interval data structures. After interval generation is complete, - // run through all of the intervals and propogate successor info as + // run through all of the intervals and propagate successor info as // predecessor info. // void updatePredecessors(Interval *Int); }; +} // End llvm namespace + #endif