1 //===-- ExecutionAnnotations.h ---------------------------------*- C++ -*--===//
3 // This header file defines annotations used by the execution engine.
5 //===----------------------------------------------------------------------===//
7 #ifndef LLI_EXECUTION_ANNOTATIONS_H
8 #define LLI_EXECUTION_ANNOTATIONS_H
10 //===----------------------------------------------------------------------===//
11 // Support for FunctionInfo annotations
12 //===----------------------------------------------------------------------===//
14 // This annotation (attached only to Function objects) is used to cache useful
15 // information about the function, including the number of types present in the
16 // function, and the number of values for each type.
18 // This annotation object is created on demand, and attaches other annotation
19 // objects to the instructions in the function when it's created.
21 static AnnotationID FunctionInfoAID(
22 AnnotationManager::getID("Interpreter::FunctionInfo"));
24 struct FunctionInfo : public Annotation {
25 FunctionInfo(Function *F);
26 std::vector<unsigned> NumPlaneElements;
28 // Create - Factory function to allow FunctionInfo annotations to be
31 static Annotation *Create(AnnotationID AID, const Annotable *O, void *) {
32 assert(AID == FunctionInfoAID);
33 return new FunctionInfo(cast<Function>((Value*)O));
37 unsigned getValueSlot(const Value *V);
41 //===----------------------------------------------------------------------===//
42 // Support for the SlotNumber annotation
43 //===----------------------------------------------------------------------===//
45 // This annotation (attached only to Argument & Instruction objects) is used to
46 // hold the the slot number for the value in its type plane.
48 // Entities have this annotation attached to them when the containing
49 // function has it's FunctionInfo created (by the FunctionInfo ctor).
51 static AnnotationID SlotNumberAID(
52 AnnotationManager::getID("Interpreter::SlotNumber"));
54 struct SlotNumber : public Annotation {
55 unsigned SlotNum; // Ranges from 0->
57 SlotNumber(unsigned sn) : Annotation(SlotNumberAID),
64 //===----------------------------------------------------------------------===//
65 // Support for the InstNumber annotation
66 //===----------------------------------------------------------------------===//
68 // This annotation (attached only to Instruction objects) is used to hold the
69 // instruction number of the instruction, and the slot number for the value in
70 // its type plane. InstNumber's are used for user interaction, and for
71 // calculating which value slot to store the result of the instruction in.
73 // Instructions have this annotation attached to them when the containing
74 // function has it's FunctionInfo created (by the FunctionInfo ctor).
76 struct InstNumber : public SlotNumber {
77 unsigned InstNum; // Ranges from 1->
79 InstNumber(unsigned in, unsigned sn) : SlotNumber(sn), InstNum(in) {}
83 //===----------------------------------------------------------------------===//
84 // Support for the Breakpoint annotation
85 //===----------------------------------------------------------------------===//
87 static AnnotationID BreakpointAID(
88 AnnotationManager::getID("Interpreter::Breakpoint"));
89 // Just use an Annotation directly, Breakpoint is currently just a marker