ed62068383767f52b20d015eebb38b6185792e85
[IRC.git] / Robust / src / IR / Flat / FlatCondBranch.java
1 package IR.Flat;
2 import java.util.Vector;
3
4 public class FlatCondBranch extends FlatNode {
5   TempDescriptor test_cond;
6   double trueprob=0.5;
7   boolean loop=false;
8
9   public FlatCondBranch(TempDescriptor td) {
10     test_cond=td;
11   }
12   public void rewriteDef(TempMap t) {
13   }
14   public void rewriteUse(TempMap t) {
15     test_cond=t.tempMap(test_cond);
16   }
17
18   public FlatNode clone(TempMap t) {
19     FlatCondBranch fcb=new FlatCondBranch(t.tempMap(test_cond));
20     fcb.trueprob=trueprob;
21     fcb.loop=loop;
22     return fcb;
23   }
24
25   public void setLoop() {
26     loop=true;
27   }
28
29   public boolean isLoopBranch() {
30     return loop;
31   }
32
33   public void setTrueProb(double p) {
34     trueprob=p;
35   }
36
37   public double getTrueProb() {
38     return trueprob;
39   }
40
41   public double getFalseProb() {
42     return 1-trueprob;
43   }
44
45   public void addTrueNext(FlatNode n) {
46     if (next.size()==0)
47       next.setSize(1);
48     next.setElementAt(n,0);
49     n.addPrev(this);
50   }
51
52   public void addFalseNext(FlatNode n) {
53     next.setSize(2);
54     next.setElementAt(n,1);
55     n.addPrev(this);
56   }
57
58   public TempDescriptor getTest() {
59     return test_cond;
60   }
61
62   public String toString() {
63     return "conditional branch("+test_cond.toString()+")";
64   }
65
66   public String toString(String negjump) {
67     return "FlatCondBranch_if (!"+test_cond.toString()+") goto "+negjump;
68   }
69
70   public void addNext(FlatNode n) {
71     throw new Error();
72   }
73
74   public int kind() {
75     return FKind.FlatCondBranch;
76   }
77
78   public TempDescriptor [] readsTemps() {
79     return new TempDescriptor[] {test_cond};
80   }
81 }