diff --git a/lib/CodeGen/MachineCodeForInstruction.cpp b/lib/CodeGen/MachineCodeForInstruction.cpp index 97a53752e13..a4ebbec187f 100644 --- a/lib/CodeGen/MachineCodeForInstruction.cpp +++ b/lib/CodeGen/MachineCodeForInstruction.cpp @@ -18,6 +18,7 @@ #include "llvm/CodeGen/MachineCodeForInstruction.h" #include "llvm/CodeGen/MachineInstr.h" +#include "llvm/CodeGen/InstrSelection.h" #include "llvm/Instruction.h" static AnnotationID MCFI_AID( @@ -35,18 +36,37 @@ static struct Initializer { } } RegisterAID; -MachineCodeForInstruction &MachineCodeForInstruction::get(const Instruction *I){ + +MachineCodeForInstruction& +MachineCodeForInstruction::get(const Instruction *I){ return *(MachineCodeForInstruction*)I->getOrCreateAnnotation(MCFI_AID); } -void MachineCodeForInstruction::destroy(const Instruction *I) { + +void +MachineCodeForInstruction::destroy(const Instruction *I) { I->deleteAnnotation(MCFI_AID); } -MachineCodeForInstruction::MachineCodeForInstruction() : Annotation(MCFI_AID) {} +void +MachineCodeForInstruction::dropAllReferences() +{ + for (unsigned i=0, N=tempVec.size(); i < N; i++) + cast<TmpInstruction>(tempVec[i])->dropAllReferences(); +} -MachineCodeForInstruction::~MachineCodeForInstruction() { + +MachineCodeForInstruction::MachineCodeForInstruction() + : Annotation(MCFI_AID) +{} + + +MachineCodeForInstruction::~MachineCodeForInstruction() +{ + // Let go of all uses in temp. instructions + dropAllReferences(); + // Free the Value objects created to hold intermediate values for (unsigned i=0, N=tempVec.size(); i < N; i++) delete tempVec[i];