summaryrefslogtreecommitdiff
path: root/lib/VMCore/BasicBlock.cpp
diff options
context:
space:
mode:
authorGordon Henriksen <gordonhenriksen@mac.com>2007-12-09 22:46:10 +0000
committerGordon Henriksen <gordonhenriksen@mac.com>2007-12-09 22:46:10 +0000
commited455c8fa25dd37a13b33f0afa66be03ac49b5bb (patch)
tree7bfa961474e22f830710a49d4ed015fe374967b7 /lib/VMCore/BasicBlock.cpp
parent46a6e79e602b23ea3478027d5bdd1f904aea7924 (diff)
downloadllvm-ed455c8fa25dd37a13b33f0afa66be03ac49b5bb.tar.gz
llvm-ed455c8fa25dd37a13b33f0afa66be03ac49b5bb.tar.bz2
llvm-ed455c8fa25dd37a13b33f0afa66be03ac49b5bb.tar.xz
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
Diffstat (limited to 'lib/VMCore/BasicBlock.cpp')
-rw-r--r--lib/VMCore/BasicBlock.cpp38
1 files changed, 9 insertions, 29 deletions
diff --git a/lib/VMCore/BasicBlock.cpp b/lib/VMCore/BasicBlock.cpp
index d45a1c41aa..ad9ad4204c 100644
--- a/lib/VMCore/BasicBlock.cpp
+++ b/lib/VMCore/BasicBlock.cpp
@@ -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) {