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