Home | History | Annotate | Download | only in Analysis
      1 //===- Interval.cpp - Interval class code ---------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file contains the definition of the Interval class, which represents a
     11 // partition of a control flow graph of some kind.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "llvm/Analysis/Interval.h"
     16 #include "llvm/IR/BasicBlock.h"
     17 #include "llvm/IR/CFG.h"
     18 #include "llvm/Support/raw_ostream.h"
     19 
     20 using namespace llvm;
     21 
     22 //===----------------------------------------------------------------------===//
     23 // Interval Implementation
     24 //===----------------------------------------------------------------------===//
     25 
     26 // isLoop - Find out if there is a back edge in this interval...
     27 bool Interval::isLoop() const {
     28   // There is a loop in this interval iff one of the predecessors of the header
     29   // node lives in the interval.
     30   for (::pred_iterator I = ::pred_begin(HeaderNode), E = ::pred_end(HeaderNode);
     31        I != E; ++I)
     32     if (contains(*I))
     33       return true;
     34   return false;
     35 }
     36 
     37 void Interval::print(raw_ostream &OS) const {
     38   OS << "-------------------------------------------------------------\n"
     39        << "Interval Contents:\n";
     40 
     41   // Print out all of the basic blocks in the interval...
     42   for (const BasicBlock *Node : Nodes)
     43     OS << *Node << "\n";
     44 
     45   OS << "Interval Predecessors:\n";
     46   for (const BasicBlock *Predecessor : Predecessors)
     47     OS << *Predecessor << "\n";
     48 
     49   OS << "Interval Successors:\n";
     50   for (const BasicBlock *Successor : Successors)
     51     OS << *Successor << "\n";
     52 }
     53