Annotations are evil. This makes Value not derive from Annotable, which makes

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... :)

llvm-svn: 11878
This commit is contained in:
Chris Lattner 2004-02-26 08:08:38 +00:00
parent d43decb0a6
commit f7cc508c0a
2 changed files with 3 additions and 3 deletions

View 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;

View 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