llvm.org GIT mirror llvm / release_50 lib / Analysis / Interval.cpp
release_50

Tree @release_50 (Download .tar.gz)

Interval.cpp @release_50

cf3056d
2b37d7c
b576c94
 
4ee451d
 
2b37d7c
b576c94
2275c1d
1b7f7dc
 
2275c1d
 
 
107109c
0b8c9a8
03e36d7
bdff548
a59cbb2
2275c1d
d0fde30
 
1c54f1d
 
 
 
 
 
1b7f7dc
94c2271
1c54f1d
facdfc6
 
 
bdff548
1c54f1d
 
 
 
45cfe54
bdff548
a59cbb2
2b37d7c
a59cbb2
8d0d2b6
 
a59cbb2
bdff548
8d0d2b6
 
1ff1ff7
bdff548
8d0d2b6
 
a59cbb2
//===- Interval.cpp - Interval class code ---------------------------------===//
//
//                     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 definition of the Interval class, which represents a
// partition of a control flow graph of some kind.
//
//===----------------------------------------------------------------------===//

#include "llvm/Analysis/Interval.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CFG.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>

using namespace llvm;

//===----------------------------------------------------------------------===//
// Interval Implementation
//===----------------------------------------------------------------------===//

// isLoop - Find out if there is a back edge in this interval...
//
bool Interval::isLoop() const {
  // There is a loop in this interval iff one of the predecessors of the header
  // node lives in the interval.
  for (::pred_iterator I = ::pred_begin(HeaderNode), E = ::pred_end(HeaderNode);
       I != E; ++I)
    if (contains(*I))
      return true;
  return false;
}


void Interval::print(raw_ostream &OS) const {
  OS << "-------------------------------------------------------------\n"
       << "Interval Contents:\n";

  // Print out all of the basic blocks in the interval...
  for (const BasicBlock *Node : Nodes)
    OS << *Node << "\n";

  OS << "Interval Predecessors:\n";
  for (const BasicBlock *Predecessor : Predecessors)
    OS << *Predecessor << "\n";

  OS << "Interval Successors:\n";
  for (const BasicBlock *Successor : Successors)
    OS << *Successor << "\n";
}