Interval.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. #include "llvm/Analysis/Interval.h"
  15. #include "llvm/IR/BasicBlock.h"
  16. #include "llvm/IR/CFG.h"
  17. #include "llvm/Support/raw_ostream.h"
  18. #include <algorithm>
  19. using namespace llvm;
  20. //===----------------------------------------------------------------------===//
  21. // Interval Implementation
  22. //===----------------------------------------------------------------------===//
  23. // isLoop - Find out if there is a back edge in this interval...
  24. //
  25. bool Interval::isLoop() const {
  26. // There is a loop in this interval iff one of the predecessors of the header
  27. // node lives in the interval.
  28. for (::pred_iterator I = ::pred_begin(HeaderNode), E = ::pred_end(HeaderNode);
  29. I != E; ++I)
  30. if (contains(*I))
  31. return true;
  32. return false;
  33. }
  34. void Interval::print(raw_ostream &OS) const {
  35. OS << "-------------------------------------------------------------\n"
  36. << "Interval Contents:\n";
  37. // Print out all of the basic blocks in the interval...
  38. for (std::vector<BasicBlock*>::const_iterator I = Nodes.begin(),
  39. E = Nodes.end(); I != E; ++I)
  40. OS << **I << "\n";
  41. OS << "Interval Predecessors:\n";
  42. for (std::vector<BasicBlock*>::const_iterator I = Predecessors.begin(),
  43. E = Predecessors.end(); I != E; ++I)
  44. OS << **I << "\n";
  45. OS << "Interval Successors:\n";
  46. for (std::vector<BasicBlock*>::const_iterator I = Successors.begin(),
  47. E = Successors.end(); I != E; ++I)
  48. OS << **I << "\n";
  49. }