namespace llvm {
-struct ETForest;
+class ETForest;
class LoopInfo;
class PHINode;
class Instruction;
// induction variable canonicalization pass should be used to normalize loops
// for easy analysis. These methods assume canonical loops.
+ /// getExitingBlocks - Return all blocks inside the loop that have successors
+ /// outside of the loop. These are the blocks _inside of the current loop_
+ /// which branch out. The returned list is always unique.
+ ///
+ void getExitingBlocks(std::vector<BasicBlock*> &Blocks) const;
+
/// getExitBlocks - Return all of the successor blocks of this loop. These
/// are the blocks _outside of the current loop_ which are branched to.
///
/// the mapping in the LoopInfo class.
void removeBlockFromLoop(BasicBlock *BB);
+ void print(OStream &O, unsigned Depth = 0) const {
+ if (O.stream()) print(*O.stream(), Depth);
+ }
void print(std::ostream &O, unsigned Depth = 0) const;
void dump() const;
private:
virtual bool runOnFunction(Function &F);
virtual void releaseMemory();
+ void print(OStream &O, const Module* = 0) const {
+ if (O.stream()) print(*O.stream());
+ }
void print(std::ostream &O, const Module* = 0) const;
virtual void getAnalysisUsage(AnalysisUsage &AU) const;