llvm-6502/lib/ExecutionEngine/Interpreter/ExecutionAnnotations.h
Chris Lattner 2fbfdcffd3 Change references to the Method class to be references to the Function
class.  The Method class is obsolete (renamed) and all references to it
are being converted over to Function.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2144 91177308-0d34-0410-b5e6-96231b3b80d8
2002-04-07 20:49:59 +00:00

122 lines
4.5 KiB
C++

//===-- ExecutionAnnotations.h ---------------------------------*- C++ -*--===//
//
// This header file defines annotations used by the execution engine.
//
//===----------------------------------------------------------------------===//
#ifndef LLI_EXECUTION_ANNOTATIONS_H
#define LLI_EXECUTION_ANNOTATIONS_H
//===----------------------------------------------------------------------===//
// Support for MethodInfo annotations
//===----------------------------------------------------------------------===//
// This annotation (attached only to Function objects) is used to cache useful
// information about the function, including the number of types present in the
// function, and the number of values for each type.
//
// This annotation object is created on demand, and attaches other annotation
// objects to the instructions in the function when it's created.
//
static AnnotationID MethodInfoAID(
AnnotationManager::getID("Interpreter::FunctionInfo"));
struct MethodInfo : public Annotation {
MethodInfo(Function *F);
std::vector<unsigned> NumPlaneElements;
// Create - Factory function to allow MethodInfo annotations to be
// created on demand.
//
static Annotation *Create(AnnotationID AID, const Annotable *O, void *) {
assert(AID == MethodInfoAID);
return new MethodInfo(cast<Function>((Value*)O)); // Simply invoke the ctor
}
private:
unsigned getValueSlot(const Value *V);
};
//===----------------------------------------------------------------------===//
// Support for the SlotNumber annotation
//===----------------------------------------------------------------------===//
// This annotation (attached only to FunctionArgument & Instruction objects) is
// used to hold the the slot number for the value in its type plane.
//
// Entities have this annotation attached to them when the containing
// function has it's MethodInfo created (by the MethodInfo ctor).
//
static AnnotationID SlotNumberAID(
AnnotationManager::getID("Interpreter::SlotNumber"));
struct SlotNumber : public Annotation {
unsigned SlotNum; // Ranges from 0->
SlotNumber(unsigned sn) : Annotation(SlotNumberAID),
SlotNum(sn) {}
};
//===----------------------------------------------------------------------===//
// Support for the InstNumber annotation
//===----------------------------------------------------------------------===//
// This annotation (attached only to Instruction objects) is used to hold the
// instruction number of the instruction, and the slot number for the value in
// its type plane. InstNumber's are used for user interaction, and for
// calculating which value slot to store the result of the instruction in.
//
// Instructions have this annotation attached to them when the containing
// function has it's MethodInfo created (by the MethodInfo ctor).
//
struct InstNumber : public SlotNumber {
unsigned InstNum; // Ranges from 1->
InstNumber(unsigned in, unsigned sn) : SlotNumber(sn), InstNum(in) {}
};
//===----------------------------------------------------------------------===//
// Support for the Breakpoint annotation
//===----------------------------------------------------------------------===//
static AnnotationID BreakpointAID(
AnnotationManager::getID("Interpreter::Breakpoint"));
// Just use an Annotation directly, Breakpoint is currently just a marker
//===----------------------------------------------------------------------===//
// Support for the GlobalAddress annotation
//===----------------------------------------------------------------------===//
// This annotation (attached only to GlobalValue objects) is used to hold the
// address of the chunk of memory that represents a global value. For
// Functions, this pointer is the Function object pointer that represents it.
// For global variables, this is the dynamically allocated (and potentially
// initialized) chunk of memory for the global. This annotation is created on
// demand.
//
static AnnotationID GlobalAddressAID(
AnnotationManager::getID("Interpreter::GlobalAddress"));
struct GlobalAddress : public Annotation {
void *Ptr; // The pointer itself
bool Delete; // Should I delete them memory on destruction?
GlobalAddress(void *ptr, bool d) : Annotation(GlobalAddressAID), Ptr(ptr),
Delete(d) {}
~GlobalAddress() { if (Delete) free(Ptr); }
// Create - Factory function to allow GlobalAddress annotations to be
// created on demand.
//
static Annotation *Create(AnnotationID AID, const Annotable *O, void *);
};
#endif