add option to skip prefetches for method...
[IRC.git] / Robust / src / IR / State.java
1 package IR;
2 import IR.Tree.*;
3 import IR.Flat.*;
4 import IR.*;
5 import java.util.*;
6 import Analysis.TaskStateAnalysis.*;
7
8 public class State {
9     public State() {
10         this.classes=new SymbolTable();
11         this.tasks=new SymbolTable();
12         this.treemethodmap=new Hashtable();
13         this.flatmethodmap=new Hashtable();
14         this.parsetrees=new HashSet();
15         this.arraytypes=new HashSet();
16         this.arraytonumber=new Hashtable();
17         this.tagmap=new Hashtable();
18         this.selfloops=new HashSet();
19         this.excprefetch=new HashSet();
20     }
21
22     public void addParseNode(ParseNode parsetree) {
23         parsetrees.add(parsetree);
24     }
25
26     public void storeAnalysisResult(Hashtable<ClassDescriptor, Hashtable<FlagState, Set<OptionalTaskDescriptor>>> analysisresults) {
27         this.analysisresults=analysisresults;
28     }
29
30     public Hashtable<ClassDescriptor, Hashtable<FlagState, Set<OptionalTaskDescriptor>>> getAnalysisResult() {
31         return analysisresults;
32     }
33
34
35     public void storeOptionalTaskDescriptors(Hashtable<ClassDescriptor, Hashtable<OptionalTaskDescriptor, OptionalTaskDescriptor>> optionaltaskdescriptors){
36         this.optionaltaskdescriptors=optionaltaskdescriptors;
37     }
38
39     public Hashtable<ClassDescriptor, Hashtable<OptionalTaskDescriptor, OptionalTaskDescriptor>> getOptionalTaskDescriptors(){
40         return optionaltaskdescriptors;
41     }
42
43     /** Boolean flag which indicates whether compiler is compiling a task-based
44      * program. */
45     public boolean WEBINTERFACE=false;
46     public boolean TASK=false;
47     public boolean DSM=false;
48     public boolean PREFETCH=false;
49     public boolean TASKSTATE=false;
50     public boolean TAGSTATE=false;
51     public boolean FLATIRGRAPH=false;
52     public boolean FLATIRGRAPHTASKS=false;
53     public boolean FLATIRGRAPHUSERMETHODS=false;
54     public boolean FLATIRGRAPHLIBMETHODS=false;
55     public boolean OWNERSHIP=false;
56     public boolean OPTIONAL=false;
57     public boolean SCHEDULING=false;  
58     public boolean THREAD=false;
59     public boolean CONSCHECK=false;
60     public boolean INSTRUCTIONFAILURE=false;
61     public String structfile;
62     public String main;
63
64     public HashSet selfloops;
65     public HashSet excprefetch;
66     public SymbolTable classes;
67     public SymbolTable tasks;
68     public Set parsetrees;
69     public Hashtable treemethodmap;
70     public Hashtable flatmethodmap;
71     private HashSet arraytypes;
72     public Hashtable arraytonumber;
73     private int numclasses=0;
74     private int numtasks=0;
75     private int arraycount=0;
76
77
78     private Hashtable<ClassDescriptor, Hashtable<OptionalTaskDescriptor, OptionalTaskDescriptor>> optionaltaskdescriptors;
79     private Hashtable<ClassDescriptor, Hashtable<FlagState, Set<OptionalTaskDescriptor>>> analysisresults;
80
81     private Hashtable tagmap;
82     private int numtags=0;
83
84     public void addArrayType(TypeDescriptor td) {
85         if (!arraytypes.contains(td)) {
86             arraytypes.add(td);
87             arraytonumber.put(td,new Integer(arraycount++));
88         }
89     }
90
91     public Iterator getArrayIterator() {
92         return arraytypes.iterator();
93     }
94
95     public int getTagId(TagDescriptor tag) {
96         if (tagmap.containsKey(tag)) {
97             return ((Integer) tagmap.get(tag)).intValue();
98         } else {
99             tagmap.put(tag, new Integer(numtags));
100             return numtags++;
101         }
102     }
103
104     public int getArrayNumber(TypeDescriptor td) {
105         return ((Integer)arraytonumber.get(td)).intValue();
106     }
107
108     public int numArrays() {
109         return arraytypes.size();
110     }
111
112     public static TypeDescriptor getTypeDescriptor(int t) {
113         TypeDescriptor td=new TypeDescriptor(t);
114         return td;
115     }
116
117     public static TypeDescriptor getTypeDescriptor(NameDescriptor n) {
118         TypeDescriptor td=new TypeDescriptor(n);
119         return td;
120     }
121
122     public void addClass(ClassDescriptor tdn) {
123         if (classes.contains(tdn.getSymbol()))
124             throw new Error("Class "+tdn.getSymbol()+" defined twice");
125         classes.add(tdn);
126         numclasses++;
127     }
128
129     public int numClasses() {
130         return numclasses;
131     }
132
133     public BlockNode getMethodBody(MethodDescriptor md) {
134         return (BlockNode)treemethodmap.get(md);
135     }
136
137     public BlockNode getMethodBody(TaskDescriptor td) {
138         return (BlockNode)treemethodmap.get(td);
139     }
140
141     public SymbolTable getClassSymbolTable() {
142         return classes;
143     }
144
145     public SymbolTable getTaskSymbolTable() {
146         return tasks;
147     }
148
149     /** Returns Flat IR representation of MethodDescriptor md. */
150
151     public FlatMethod getMethodFlat(MethodDescriptor md) {
152         return (FlatMethod)flatmethodmap.get(md);
153     }
154
155     /** Returns Flat IR representation of TaskDescriptor td. */
156
157     public FlatMethod getMethodFlat(TaskDescriptor td) {
158         return (FlatMethod)flatmethodmap.get(td);
159     }
160
161     public void addTreeCode(MethodDescriptor md, BlockNode bn) {
162         treemethodmap.put(md,bn);
163     }
164
165     public void addTreeCode(TaskDescriptor td, BlockNode bn) {
166         treemethodmap.put(td,bn);
167     }
168
169     public void addFlatCode(MethodDescriptor md, FlatMethod bn) {
170         flatmethodmap.put(md,bn);
171     }
172
173     public void addFlatCode(TaskDescriptor td, FlatMethod bn) {
174         flatmethodmap.put(td,bn);
175     }
176
177     public void addTask(TaskDescriptor td) {
178         if (tasks.contains(td.getSymbol()))
179             throw new Error("Task "+td.getSymbol()+" defined twice");
180         tasks.add(td);
181         numtasks++;
182     }
183 }