Reverting dtor devirtualization patch.
_sabre_: it has a major problem: by the time ~Value is run, all of the "parts" of the derived classes have been destroyed
_sabre_: the vtable lives to fight another day

llvm-svn: 44760
diff --git a/llvm/lib/VMCore/Instructions.cpp b/llvm/lib/VMCore/Instructions.cpp
index 84adc50..0df0466 100644
--- a/llvm/lib/VMCore/Instructions.cpp
+++ b/llvm/lib/VMCore/Instructions.cpp
@@ -67,6 +67,20 @@
 }
 
 
+
+//===----------------------------------------------------------------------===//
+//                            TerminatorInst Class
+//===----------------------------------------------------------------------===//
+
+// Out of line virtual method, so the vtable, etc has a home.
+TerminatorInst::~TerminatorInst() {
+}
+
+// Out of line virtual method, so the vtable, etc has a home.
+UnaryInstruction::~UnaryInstruction() {
+}
+
+
 //===----------------------------------------------------------------------===//
 //                               PHINode Class
 //===----------------------------------------------------------------------===//
@@ -82,9 +96,8 @@
   }
 }
 
-void PHINode::destroyThis(PHINode*v) {
-  delete [] v->OperandList;
-  Instruction::destroyThis(v);
+PHINode::~PHINode() {
+  delete [] OperandList;
 }
 
 // removeIncomingValue - Remove an incoming value.  This is useful if a
@@ -201,11 +214,10 @@
 //                        CallInst Implementation
 //===----------------------------------------------------------------------===//
 
-void CallInst::destroyThis(CallInst*v) {
-  delete [] v->OperandList;
-  if (v->ParamAttrs)
-    v->ParamAttrs->dropRef();
-  Instruction::destroyThis(v);
+CallInst::~CallInst() {
+  delete [] OperandList;
+  if (ParamAttrs)
+    ParamAttrs->dropRef();
 }
 
 void CallInst::init(Value *Func, Value* const *Params, unsigned NumParams) {
@@ -394,11 +406,10 @@
 //                        InvokeInst Implementation
 //===----------------------------------------------------------------------===//
 
-void InvokeInst::destroyThis(InvokeInst*v) {
-  delete [] v->OperandList;
-  if (v->ParamAttrs)
-    v->ParamAttrs->dropRef();
-  TerminatorInst::destroyThis(v);
+InvokeInst::~InvokeInst() {
+  delete [] OperandList;
+  if (ParamAttrs)
+    ParamAttrs->dropRef();
 }
 
 void InvokeInst::init(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
@@ -672,6 +683,10 @@
   setName(Name);
 }
 
+// Out of line virtual method, so the vtable, etc has a home.
+AllocationInst::~AllocationInst() {
+}
+
 bool AllocationInst::isArrayAllocation() const {
   if (ConstantInt *CI = dyn_cast<ConstantInt>(getOperand(0)))
     return CI->getZExtValue() != 1;
@@ -936,8 +951,8 @@
   setName(Name);
 }
 
-void GetElementPtrInst::destroyThis(GetElementPtrInst*v) {
-  delete[] v->OperandList;
+GetElementPtrInst::~GetElementPtrInst() {
+  delete[] OperandList;
 }
 
 // getIndexedType - Returns the type of the element that would be loaded with
@@ -2454,9 +2469,8 @@
   }
 }
 
-void SwitchInst::destroyThis(SwitchInst*v) {
-  delete [] v->OperandList;
-  TerminatorInst::destroyThis(v);
+SwitchInst::~SwitchInst() {
+  delete [] OperandList;
 }