From ed455c8fa25dd37a13b33f0afa66be03ac49b5bb Mon Sep 17 00:00:00 2001 From: Gordon Henriksen Date: Sun, 9 Dec 2007 22:46:10 +0000 Subject: 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 --- include/llvm/IntrinsicInst.h | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'include/llvm/IntrinsicInst.h') 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(V) && classof(cast(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(V) && classof(cast(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(V) && classof(cast(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(V) && classof(cast(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(V) && classof(cast(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(V) && classof(cast(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(V) && classof(cast(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(V) && classof(cast(V)); } + protected: + static void destroyThis(MemSetInst* v) { + MemIntrinsic::destroyThis(v); + } + friend class Value; }; } -- cgit v1.2.3