mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 00:16:25 +00:00
Convert ConstRules to use annotations to clean it up.
llvm-svn: 514
This commit is contained in:
parent
9620879411
commit
3728d62a06
@ -161,12 +161,17 @@ public:
|
||||
// register an annotation handler
|
||||
//
|
||||
struct AnnotationManager {
|
||||
typedef Annotation *(*Factory)(AnnotationID, const Annotable *, void*);
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Basic ID <-> Name map functionality
|
||||
|
||||
static AnnotationID getID (const string &Name); // Name -> ID
|
||||
static const string &getName(AnnotationID ID); // ID -> Name
|
||||
|
||||
// getID - Name -> ID + registration of a factory function for demand driven
|
||||
// annotation support.
|
||||
static AnnotationID getID (const string &Name, Factory Fact, void *Data=0);
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Annotation creation on demand support...
|
||||
@ -175,8 +180,7 @@ struct AnnotationManager {
|
||||
// function used to create an annotation on demand if it is needed by the
|
||||
// Annotable::getOrCreateAnnotation method.
|
||||
//
|
||||
static void registerAnnotationFactory(AnnotationID ID,
|
||||
Annotation *(*Func)(AnnotationID, const Annotable *, void *),
|
||||
static void registerAnnotationFactory(AnnotationID ID, Factory Func,
|
||||
void *ExtraData = 0);
|
||||
|
||||
// createAnnotation - Create an annotation of the specified ID for the
|
||||
|
@ -161,12 +161,17 @@ public:
|
||||
// register an annotation handler
|
||||
//
|
||||
struct AnnotationManager {
|
||||
typedef Annotation *(*Factory)(AnnotationID, const Annotable *, void*);
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Basic ID <-> Name map functionality
|
||||
|
||||
static AnnotationID getID (const string &Name); // Name -> ID
|
||||
static const string &getName(AnnotationID ID); // ID -> Name
|
||||
|
||||
// getID - Name -> ID + registration of a factory function for demand driven
|
||||
// annotation support.
|
||||
static AnnotationID getID (const string &Name, Factory Fact, void *Data=0);
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Annotation creation on demand support...
|
||||
@ -175,8 +180,7 @@ struct AnnotationManager {
|
||||
// function used to create an annotation on demand if it is needed by the
|
||||
// Annotable::getOrCreateAnnotation method.
|
||||
//
|
||||
static void registerAnnotationFactory(AnnotationID ID,
|
||||
Annotation *(*Func)(AnnotationID, const Annotable *, void *),
|
||||
static void registerAnnotationFactory(AnnotationID ID, Factory Func,
|
||||
void *ExtraData = 0);
|
||||
|
||||
// createAnnotation - Create an annotation of the specified ID for the
|
||||
|
@ -58,10 +58,12 @@ inline ConstPoolBool *operator!=(const ConstPoolVal &V1,
|
||||
// Implement all other operators indirectly through TypeRules system
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
class ConstRules {
|
||||
class ConstRules : public Annotation {
|
||||
protected:
|
||||
inline ConstRules() {} // Can only be subclassed...
|
||||
inline ConstRules() : Annotation(AID) {} // Can only be subclassed...
|
||||
public:
|
||||
static AnnotationID AID; // AnnotationID for this class
|
||||
|
||||
// Unary Operators...
|
||||
virtual ConstPoolVal *not(const ConstPoolVal *V) const = 0;
|
||||
|
||||
@ -110,12 +112,11 @@ public:
|
||||
// we just want to make sure to hit the cache instead of doing it indirectly,
|
||||
// if possible...
|
||||
//
|
||||
static inline const ConstRules *get(const ConstPoolVal &V) {
|
||||
const ConstRules *Result = V.getType()->getConstRules();
|
||||
return Result ? Result : find(V.getType());
|
||||
static inline ConstRules *get(const ConstPoolVal &V) {
|
||||
return (ConstRules*)V.getType()->getOrCreateAnnotation(AID);
|
||||
}
|
||||
private :
|
||||
static const ConstRules *find(const Type *Ty);
|
||||
static Annotation *find(AnnotationID AID, const Annotable *Ty, void *);
|
||||
|
||||
ConstRules(const ConstRules &); // Do not implement
|
||||
ConstRules &operator=(const ConstRules &); // Do not implement
|
||||
|
@ -28,9 +28,6 @@
|
||||
|
||||
#include "llvm/Value.h"
|
||||
|
||||
namespace opt {
|
||||
class ConstRules;
|
||||
}
|
||||
class DerivedType;
|
||||
class MethodType;
|
||||
class ArrayType;
|
||||
@ -78,9 +75,6 @@ private:
|
||||
bool Abstract; // True if type contains an OpaqueType
|
||||
bool Recursive; // True if the type is recursive
|
||||
|
||||
// ConstRulesImpl - See Opt/ConstantHandling.h for more info
|
||||
mutable const opt::ConstRules *ConstRulesImpl;
|
||||
|
||||
protected:
|
||||
// ctor is protected, so only subclasses can create Type objects...
|
||||
Type(const string &Name, PrimitiveID id);
|
||||
@ -175,12 +169,6 @@ public:
|
||||
static const Type *getPrimitiveType(PrimitiveID IDNumber);
|
||||
static const Type *getUniqueIDType(unsigned UID);
|
||||
|
||||
// Methods for dealing with constants uniformly. See Opt/ConstantHandling.h
|
||||
// for more info on this...
|
||||
//
|
||||
inline const opt::ConstRules *getConstRules() const { return ConstRulesImpl; }
|
||||
inline void setConstRules(const opt::ConstRules *R) const { ConstRulesImpl=R;}
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// These are the builtin types that are always available...
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user