blob: 080df62efab3b0629b062071698fe9c43ca810f7 [file] [log] [blame]
Chris Lattner92101ac2001-08-23 17:05:04 +00001//===-- ExecutionAnnotations.h ---------------------------------*- C++ -*--===//
John Criswell856ba762003-10-21 15:17:13 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
Chris Lattner92101ac2001-08-23 17:05:04 +00009//
10// This header file defines annotations used by the execution engine.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLI_EXECUTION_ANNOTATIONS_H
15#define LLI_EXECUTION_ANNOTATIONS_H
16
17//===----------------------------------------------------------------------===//
Chris Lattnerda82ed52003-05-08 16:18:31 +000018// Support for FunctionInfo annotations
Chris Lattner92101ac2001-08-23 17:05:04 +000019//===----------------------------------------------------------------------===//
20
Chris Lattner2fbfdcf2002-04-07 20:49:59 +000021// This annotation (attached only to Function objects) is used to cache useful
22// information about the function, including the number of types present in the
23// function, and the number of values for each type.
Chris Lattner92101ac2001-08-23 17:05:04 +000024//
Chris Lattner63bd6132003-09-17 17:26:22 +000025struct FunctionInfo {
Chris Lattnerda82ed52003-05-08 16:18:31 +000026 FunctionInfo(Function *F);
Chris Lattner697954c2002-01-20 22:54:45 +000027 std::vector<unsigned> NumPlaneElements;
Chris Lattner92101ac2001-08-23 17:05:04 +000028
29private:
30 unsigned getValueSlot(const Value *V);
31};
32
Chris Lattner92101ac2001-08-23 17:05:04 +000033//===----------------------------------------------------------------------===//
34// Support for the SlotNumber annotation
35//===----------------------------------------------------------------------===//
36
Chris Lattnerb972f952002-04-09 19:40:40 +000037// This annotation (attached only to Argument & Instruction objects) is used to
38// hold the the slot number for the value in its type plane.
Chris Lattner92101ac2001-08-23 17:05:04 +000039//
40// Entities have this annotation attached to them when the containing
Chris Lattnerda82ed52003-05-08 16:18:31 +000041// function has it's FunctionInfo created (by the FunctionInfo ctor).
Chris Lattner92101ac2001-08-23 17:05:04 +000042//
43static AnnotationID SlotNumberAID(
44 AnnotationManager::getID("Interpreter::SlotNumber"));
45
46struct SlotNumber : public Annotation {
47 unsigned SlotNum; // Ranges from 0->
48
49 SlotNumber(unsigned sn) : Annotation(SlotNumberAID),
50 SlotNum(sn) {}
51};
52
Chris Lattner92101ac2001-08-23 17:05:04 +000053//===----------------------------------------------------------------------===//
54// Support for the InstNumber annotation
55//===----------------------------------------------------------------------===//
56
57// This annotation (attached only to Instruction objects) is used to hold the
58// instruction number of the instruction, and the slot number for the value in
59// its type plane. InstNumber's are used for user interaction, and for
60// calculating which value slot to store the result of the instruction in.
61//
Chris Lattner2fbfdcf2002-04-07 20:49:59 +000062// Instructions have this annotation attached to them when the containing
Chris Lattnerda82ed52003-05-08 16:18:31 +000063// function has it's FunctionInfo created (by the FunctionInfo ctor).
Chris Lattner92101ac2001-08-23 17:05:04 +000064//
65struct InstNumber : public SlotNumber {
66 unsigned InstNum; // Ranges from 1->
67
68 InstNumber(unsigned in, unsigned sn) : SlotNumber(sn), InstNum(in) {}
69};
70
Chris Lattner92101ac2001-08-23 17:05:04 +000071#endif