Annotations are evil. This makes Value not derive from Annotable, which makes
authorChris Lattner <sabre@nondot.org>
Thu, 26 Feb 2004 08:08:38 +0000 (08:08 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 26 Feb 2004 08:08:38 +0000 (08:08 +0000)
all dynamically allocated LLVM values 4 bytes smaller, eliminate some vtables, and
make Value's destructor faster.

This makes Function derive from Annotation now because it is the only core LLVM
class that still has an annotation stuck onto it: MachineFunction.
MachineFunction is obviously horrible and gross (like most other annotations), but
will be the subject of refactorings later in the future.  Besides many fewer
Function objects are dynamically allocated that instructions blocks, constants,
types, etc... :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11878 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Function.h
include/llvm/Value.h

index 4dd791ec21c265e26a097144ab8e528af4d21f27..e77ddfaccd78f1d3c11ef9b2aa1205e7e3de3e4a 100644 (file)
@@ -21,6 +21,7 @@
 #include "llvm/GlobalValue.h"
 #include "llvm/BasicBlock.h"
 #include "llvm/Argument.h"
+#include "Support/Annotation.h"
 
 namespace llvm {
 
@@ -44,7 +45,7 @@ template<> struct ilist_traits<Argument>
   static iplist<Argument> &getList(Function *F);
 };
 
-class Function : public GlobalValue {
+class Function : public GlobalValue, public Annotable {
 public:
   typedef iplist<Argument> ArgumentListType;
   typedef iplist<BasicBlock> BasicBlockListType;
index 319115375dd588d413ff5ec0609bcd98da56dff6..3a58a44da9efc985387b48b683075f53b39779e2 100644 (file)
@@ -19,7 +19,6 @@
 
 #include "llvm/AbstractTypeUser.h"
 #include "llvm/Use.h"
-#include "Support/Annotation.h"
 #include "Support/Casting.h"
 #include <iostream>
 
@@ -42,7 +41,7 @@ class SymbolTable;
 /// Value - The base class of all values computed by a program that may be used
 /// as operands to other values.
 ///
-struct Value : public Annotable {         // Values are annotable
+struct Value {
   enum ValueTy {
     TypeVal,                // This is an instance of Type
     ConstantVal,            // This is an instance of Constant