summaryrefslogtreecommitdiff
path: root/include/llvm/IntrinsicInst.h
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 /include/llvm/IntrinsicInst.h
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 'include/llvm/IntrinsicInst.h')
-rw-r--r--include/llvm/IntrinsicInst.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/include/llvm/IntrinsicInst.h b/include/llvm/IntrinsicInst.h
index 4e4d47513d..97c07d810d 100644
--- a/include/llvm/IntrinsicInst.h
+++ b/include/llvm/IntrinsicInst.h
@@ -38,6 +38,11 @@ namespace llvm {
IntrinsicInst(); // DO NOT IMPLEMENT
IntrinsicInst(const IntrinsicInst&); // DO NOT IMPLEMENT
void operator=(const IntrinsicInst&); // DO NOT IMPLEMENT
+ protected:
+ static void destroyThis(IntrinsicInst* v) {
+ CallInst::destroyThis(v);
+ }
+ friend class Value;
public:
/// StripPointerCasts - This static method strips off any unneeded pointer
@@ -85,6 +90,11 @@ namespace llvm {
}
static Value *StripCast(Value *C);
+ protected:
+ static void destroyThis(DbgInfoIntrinsic* v) {
+ IntrinsicInst::destroyThis(v);
+ }
+ friend class Value;
};
/// DbgStopPointInst - This represents the llvm.dbg.stoppoint instruction.
@@ -114,6 +124,11 @@ namespace llvm {
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
+ protected:
+ static void destroyThis(DbgStopPointInst* v) {
+ DbgInfoIntrinsic::destroyThis(v);
+ }
+ friend class Value;
};
/// DbgFuncStartInst - This represents the llvm.dbg.func.start instruction.
@@ -129,6 +144,11 @@ namespace llvm {
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
+ protected:
+ static void destroyThis(DbgFuncStartInst* v) {
+ DbgInfoIntrinsic::destroyThis(v);
+ }
+ friend class Value;
};
/// DbgRegionStartInst - This represents the llvm.dbg.region.start
@@ -144,6 +164,11 @@ namespace llvm {
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
+ protected:
+ static void destroyThis(DbgRegionStartInst* v) {
+ DbgInfoIntrinsic::destroyThis(v);
+ }
+ friend class Value;
};
/// DbgRegionEndInst - This represents the llvm.dbg.region.end instruction.
@@ -175,6 +200,11 @@ namespace llvm {
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
+ protected:
+ static void destroyThis(DbgDeclareInst* v) {
+ DbgInfoIntrinsic::destroyThis(v);
+ }
+ friend class Value;
};
/// MemIntrinsic - This is the common base class for memset/memcpy/memmove.
@@ -228,6 +258,11 @@ namespace llvm {
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
+ protected:
+ static void destroyThis(MemIntrinsic* v) {
+ IntrinsicInst::destroyThis(v);
+ }
+ friend class Value;
};
@@ -259,6 +294,11 @@ namespace llvm {
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
+ protected:
+ static void destroyThis(MemCpyInst* v) {
+ MemIntrinsic::destroyThis(v);
+ }
+ friend class Value;
};
/// MemMoveInst - This class wraps the llvm.memmove intrinsic.
@@ -288,6 +328,11 @@ namespace llvm {
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
+ protected:
+ static void destroyThis(MemMoveInst* v) {
+ MemIntrinsic::destroyThis(v);
+ }
+ friend class Value;
};
/// MemSetInst - This class wraps the llvm.memset intrinsic.
@@ -312,6 +357,11 @@ namespace llvm {
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
+ protected:
+ static void destroyThis(MemSetInst* v) {
+ MemIntrinsic::destroyThis(v);
+ }
+ friend class Value;
};
}