diff options
author | Chris Lattner <sabre@nondot.org> | 2002-10-28 05:30:46 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-10-28 05:30:46 +0000 |
commit | d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68 (patch) | |
tree | f8540335fb213761b69aa8cd7f5a06b9f04954e8 /lib/CodeGen | |
parent | 07541a271152687dd8d443de48b563dc08a65cbd (diff) | |
download | external_llvm-d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68.tar.gz external_llvm-d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68.tar.bz2 external_llvm-d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68.zip |
Change MachineBasicBlock's to not be Annotations, instead they are kept as
part of a linked list tracked by MachineFunction. MachineBasicBlock::get
is now linear time instead of constant time, and thus is deprecated!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4337 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/InstrSelection/InstrSelection.cpp | 14 | ||||
-rw-r--r-- | lib/CodeGen/MachineBasicBlock.cpp | 23 | ||||
-rw-r--r-- | lib/CodeGen/MachineFunction.cpp | 15 |
3 files changed, 25 insertions, 27 deletions
diff --git a/lib/CodeGen/InstrSelection/InstrSelection.cpp b/lib/CodeGen/InstrSelection/InstrSelection.cpp index 390b5da679..677bef7d04 100644 --- a/lib/CodeGen/InstrSelection/InstrSelection.cpp +++ b/lib/CodeGen/InstrSelection/InstrSelection.cpp @@ -139,14 +139,20 @@ bool InstructionSelection::runOnFunction(Function &F) } // - // Record instructions in the vector for each basic block + // Create the MachineBasicBlock records and add all of the MachineInstrs + // defined in the MachineCodeForInstruction objects to also live in the + // MachineBasicBlock objects. // - for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; ++BI) + MachineFunction &MF = MachineFunction::get(&F); + for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; ++BI) { + MachineBasicBlock *MCBB = new MachineBasicBlock(BI); + MF.getBasicBlockList().push_back(MCBB); + for (BasicBlock::iterator II = BI->begin(); II != BI->end(); ++II) { MachineCodeForInstruction &mvec = MachineCodeForInstruction::get(II); - MachineBasicBlock &MCBB = MachineBasicBlock::get(BI); - MCBB.insert(MCBB.end(), mvec.begin(), mvec.end()); + MCBB->insert(MCBB->end(), mvec.begin(), mvec.end()); } + } // Insert phi elimination code InsertCodeForPhis(F); diff --git a/lib/CodeGen/MachineBasicBlock.cpp b/lib/CodeGen/MachineBasicBlock.cpp deleted file mode 100644 index 666d5477b3..0000000000 --- a/lib/CodeGen/MachineBasicBlock.cpp +++ /dev/null @@ -1,23 +0,0 @@ -//===-- MachineBasicBlock.cpp ---------------------------------------------===// -// -// Collect the sequence of machine instructions for a basic block. -// -//===----------------------------------------------------------------------===// - -#include "llvm/CodeGen/MachineBasicBlock.h" - -AnnotationID MCFBB_AID( - AnnotationManager::getID("CodeGen::MachineBasicBlock")); - -static Annotation *CreateMCFBB(AnnotationID AID, const Annotable *, void *) { - assert(AID == MCFBB_AID); - return new MachineBasicBlock(); // Invoke constructor! -} - -// Register the annotation with the annotation factory -static struct MCFBBInitializer { - MCFBBInitializer() { - AnnotationManager::registerAnnotationFactory(MCFBB_AID, &CreateMCFBB); - } -} RegisterCreateMCFBB; - diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp index b9c017a459..15036a4d07 100644 --- a/lib/CodeGen/MachineFunction.cpp +++ b/lib/CodeGen/MachineFunction.cpp @@ -72,6 +72,21 @@ Pass *createMachineCodeDestructionPass() { } +// get - This deprecated static method returns the MachineBasicBlock object +// for the specified BasicBlock. +// +MachineBasicBlock& MachineBasicBlock::get(const BasicBlock *BB) { + const Function *F = BB->getParent(); + MachineFunction &MF = MachineFunction::get(F); + + for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I) + if (I->getBasicBlock() == BB) + return *I; + assert(0 && "MachineBasicBlock object not found for specified block!"); + return get(BB); +} + + //===---------------------------------------------------------------------===// // MachineFunction implementation //===---------------------------------------------------------------------===// |