mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-29 10:25:12 +00:00
Devirtualizing Value destructor (PR889). Patch by Pawel Kunio!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44747 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -30,31 +30,9 @@ ilist_traits<Instruction>::getSymTab(BasicBlock *BB) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
namespace {
|
||||
/// DummyInst - An instance of this class is used to mark the end of the
|
||||
/// instruction list. This is not a real instruction.
|
||||
struct VISIBILITY_HIDDEN DummyInst : public Instruction {
|
||||
DummyInst() : Instruction(Type::VoidTy, OtherOpsEnd, 0, 0) {
|
||||
// This should not be garbage monitored.
|
||||
LeakDetector::removeGarbageObject(this);
|
||||
}
|
||||
|
||||
Instruction *clone() const {
|
||||
assert(0 && "Cannot clone EOL");abort();
|
||||
return 0;
|
||||
}
|
||||
const char *getOpcodeName() const { return "*end-of-list-inst*"; }
|
||||
|
||||
// Methods for support type inquiry through isa, cast, and dyn_cast...
|
||||
static inline bool classof(const DummyInst *) { return true; }
|
||||
static inline bool classof(const Instruction *I) {
|
||||
return I->getOpcode() == OtherOpsEnd;
|
||||
}
|
||||
static inline bool classof(const Value *V) {
|
||||
return isa<Instruction>(V) && classof(cast<Instruction>(V));
|
||||
}
|
||||
};
|
||||
DummyInst::DummyInst() : Instruction(Type::VoidTy, OtherOpsEnd, 0, 0) {
|
||||
// This should not be garbage monitored.
|
||||
LeakDetector::removeGarbageObject(this);
|
||||
}
|
||||
|
||||
Instruction *ilist_traits<Instruction>::createSentinel() {
|
||||
@@ -88,10 +66,12 @@ BasicBlock::BasicBlock(const std::string &Name, Function *NewParent,
|
||||
}
|
||||
|
||||
|
||||
BasicBlock::~BasicBlock() {
|
||||
assert(getParent() == 0 && "BasicBlock still linked into the program!");
|
||||
dropAllReferences();
|
||||
InstList.clear();
|
||||
void BasicBlock::destroyThis(BasicBlock*v)
|
||||
{
|
||||
assert(v->getParent() == 0 && "BasicBlock still linked into the program!");
|
||||
v->dropAllReferences();
|
||||
v->InstList.clear();
|
||||
Value::destroyThis(v);
|
||||
}
|
||||
|
||||
void BasicBlock::setParent(Function *parent) {
|
||||
|
Reference in New Issue
Block a user