diff --git a/llvm/include/llvm/BasicBlock.h b/llvm/include/llvm/BasicBlock.h index c0922d6290596228da14e93b62460df18d522b22..aa201c3c84b7e5b08649d82c7f6ae4c26b1a099c 100644 --- a/llvm/include/llvm/BasicBlock.h +++ b/llvm/include/llvm/BasicBlock.h @@ -29,12 +29,14 @@ class Instruction; class Method; class TerminatorInst; +class MachineCodeForBasicBlock; class BasicBlock : public Value { // Basic blocks are data objects also public: typedef ValueHolder InstListType; private : InstListType InstList; + MachineCodeForBasicBlock* machineInstrVec; friend class ValueHolder; void setParent(Method *parent); @@ -67,6 +69,12 @@ public: TerminatorInst *getTerminator(); const TerminatorInst *const getTerminator() const; + + // Machine code accessor... + inline MachineCodeForBasicBlock& getMachineInstrVec() const { + return *machineInstrVec; + } + //===--------------------------------------------------------------------===// // Instruction iterator methods inline iterator begin() { return InstList.begin(); } diff --git a/llvm/lib/VMCore/BasicBlock.cpp b/llvm/lib/VMCore/BasicBlock.cpp index 04941075e3e7defa40fd3753128a6cb1bedb2ed8..cf8fc41bd747a0721dcbaff66f4e669ba33f1b46 100644 --- a/llvm/lib/VMCore/BasicBlock.cpp +++ b/llvm/lib/VMCore/BasicBlock.cpp @@ -13,6 +13,7 @@ #include "llvm/Type.h" #include "llvm/CFG.h" #include "llvm/iOther.h" +#include "llvm/CodeGen/MachineInstr.h" // Instantiate Templates - This ugliness is the price we have to pay // for having a ValueHolderImpl.h file seperate from ValueHolder.h! :( @@ -20,7 +21,10 @@ template class ValueHolder; BasicBlock::BasicBlock(const string &name, Method *Parent) - : Value(Type::LabelTy, Value::BasicBlockVal, name), InstList(this, 0) { + : Value(Type::LabelTy, Value::BasicBlockVal, name), + InstList(this, 0), + machineInstrVec(new MachineCodeForBasicBlock) +{ if (Parent) Parent->getBasicBlocks().push_back(this); } @@ -28,6 +32,7 @@ BasicBlock::BasicBlock(const string &name, Method *Parent) BasicBlock::~BasicBlock() { dropAllReferences(); InstList.delete_all(); + delete machineInstrVec; } // Specialize setName to take care of symbol table majik