bug fix on the loop termination analysis
[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   FlatNode loopEntrance;
7   double trueprob=0.5;
8   boolean loop=false;
9
10   public FlatCondBranch(TempDescriptor td) {
11     test_cond=td;
12   }
13   public void rewriteDef(TempMap t) {
14   }
15   public void rewriteUse(TempMap t) {
16     test_cond=t.tempMap(test_cond);
17   }
18
19   public FlatNode clone(TempMap t) {
20     FlatCondBranch fcb=new FlatCondBranch(t.tempMap(test_cond));
21     fcb.trueprob=trueprob;
22     fcb.loop=loop;
23     return fcb;
24   }
25
26   public void setLoop() {
27     loop=true;
28   }
29
30   public boolean isLoopBranch() {
31     return loop;
32   }
33   
34   public void setLoopEntrance(FlatNode loopEntrance){
35     this.loopEntrance=loopEntrance;
36   }
37   
38   public FlatNode getLoopEntrance(){
39     return loopEntrance;
40   }
41
42   public void setTrueProb(double p) {
43     trueprob=p;
44   }
45
46   public double getTrueProb() {
47     return trueprob;
48   }
49
50   public double getFalseProb() {
51     return 1-trueprob;
52   }
53
54   public void addTrueNext(FlatNode n) {
55     if (next.size()==0)
56       next.setSize(1);
57     next.setElementAt(n,0);
58     n.addPrev(this);
59   }
60
61   public void addFalseNext(FlatNode n) {
62     next.setSize(2);
63     next.setElementAt(n,1);
64     n.addPrev(this);
65   }
66
67   public TempDescriptor getTest() {
68     return test_cond;
69   }
70
71   public String toString() {
72     return "conditional branch("+test_cond.toString()+")";
73   }
74
75   public String toString(String negjump) {
76     return "FlatCondBranch_if (!"+test_cond.toString()+") goto "+negjump;
77   }
78
79   public void addNext(FlatNode n) {
80     throw new Error();
81   }
82
83   public int kind() {
84     return FKind.FlatCondBranch;
85   }
86
87   public TempDescriptor [] readsTemps() {
88     return new TempDescriptor[] {test_cond};
89   }
90 }