1ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//===-- lib/MC/MCFunction.cpp -----------------------------------*- C++ -*-===//
2ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//
3ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//                     The LLVM Compiler Infrastructure
4ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//
5ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha// This file is distributed under the University of Illinois Open Source
6ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha// License. See LICENSE.TXT for details.
7ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//
8ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha//===----------------------------------------------------------------------===//
9ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
10ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha#include "llvm/MC/MCFunction.h"
11ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha#include "llvm/MC/MCAtom.h"
12ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha#include "llvm/Support/raw_ostream.h"
13ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha#include <algorithm>
14ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
15ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougachausing namespace llvm;
16ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
17ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha// MCFunction
18ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
19ef99356dfebb96f6f90efb912c2877214bad060eAhmed BougachaMCFunction::MCFunction(StringRef Name)
20ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  : Name(Name)
21ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha{}
22ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
23ef99356dfebb96f6f90efb912c2877214bad060eAhmed BougachaMCFunction::~MCFunction() {
24ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  for (iterator I = begin(), E = end(); I != E; ++I)
25ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha    delete *I;
26ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha}
27ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
28ef99356dfebb96f6f90efb912c2877214bad060eAhmed BougachaMCBasicBlock &MCFunction::createBlock(const MCTextAtom &TA) {
29ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  Blocks.push_back(new MCBasicBlock(TA, this));
30ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  return *Blocks.back();
31ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha}
32ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
33ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha// MCBasicBlock
34ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
35ef99356dfebb96f6f90efb912c2877214bad060eAhmed BougachaMCBasicBlock::MCBasicBlock(const MCTextAtom &Insts, MCFunction *Parent)
36ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  : Insts(&Insts), Parent(Parent)
37ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha{}
38ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
39ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougachavoid MCBasicBlock::addSuccessor(const MCBasicBlock *MCBB) {
40ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  Successors.push_back(MCBB);
41ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha}
42ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
43ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougachabool MCBasicBlock::isSuccessor(const MCBasicBlock *MCBB) const {
44ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  return std::find(Successors.begin(), Successors.end(),
45ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha                   MCBB) != Successors.end();
46ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha}
47ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
48ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougachavoid MCBasicBlock::addPredecessor(const MCBasicBlock *MCBB) {
49ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  Predecessors.push_back(MCBB);
50ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha}
51ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha
52ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougachabool MCBasicBlock::isPredecessor(const MCBasicBlock *MCBB) const {
53ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha  return std::find(Predecessors.begin(), Predecessors.end(),
54ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha                   MCBB) != Predecessors.end();
55ef99356dfebb96f6f90efb912c2877214bad060eAhmed Bougacha}
56