1 //===-- lib/MC/MCFunction.cpp -----------------------------------*- C++ -*-===// 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 #include "llvm/MC/MCFunction.h" 11 #include "llvm/MC/MCAtom.h" 12 #include "llvm/Support/raw_ostream.h" 13 #include <algorithm> 14 15 using namespace llvm; 16 17 // MCFunction 18 MCFunction(StringRef Name)19MCFunction::MCFunction(StringRef Name) 20 : Name(Name) 21 {} 22 ~MCFunction()23MCFunction::~MCFunction() { 24 for (iterator I = begin(), E = end(); I != E; ++I) 25 delete *I; 26 } 27 createBlock(const MCTextAtom & TA)28MCBasicBlock &MCFunction::createBlock(const MCTextAtom &TA) { 29 Blocks.push_back(new MCBasicBlock(TA, this)); 30 return *Blocks.back(); 31 } 32 33 // MCBasicBlock 34 MCBasicBlock(const MCTextAtom & Insts,MCFunction * Parent)35MCBasicBlock::MCBasicBlock(const MCTextAtom &Insts, MCFunction *Parent) 36 : Insts(&Insts), Parent(Parent) 37 {} 38 addSuccessor(const MCBasicBlock * MCBB)39void MCBasicBlock::addSuccessor(const MCBasicBlock *MCBB) { 40 Successors.push_back(MCBB); 41 } 42 isSuccessor(const MCBasicBlock * MCBB) const43bool MCBasicBlock::isSuccessor(const MCBasicBlock *MCBB) const { 44 return std::find(Successors.begin(), Successors.end(), 45 MCBB) != Successors.end(); 46 } 47 addPredecessor(const MCBasicBlock * MCBB)48void MCBasicBlock::addPredecessor(const MCBasicBlock *MCBB) { 49 Predecessors.push_back(MCBB); 50 } 51 isPredecessor(const MCBasicBlock * MCBB) const52bool MCBasicBlock::isPredecessor(const MCBasicBlock *MCBB) const { 53 return std::find(Predecessors.begin(), Predecessors.end(), 54 MCBB) != Predecessors.end(); 55 } 56