Mercurial > hg > truffle
comparison graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java @ 9467:3531cdfddff6
Ensure probabilities are never negative. Add additional assertions.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Wed, 01 May 2013 16:30:52 +0200 |
parents | ee3279c0f9a0 |
children | 8c37649cbb62 |
comparison
equal
deleted
inserted
replaced
9466:b8cae7920bca | 9467:3531cdfddff6 |
---|---|
63 | 63 |
64 public IfNode(LogicNode condition, AbstractBeginNode trueSuccessor, AbstractBeginNode falseSuccessor, double trueSuccessorProbability) { | 64 public IfNode(LogicNode condition, AbstractBeginNode trueSuccessor, AbstractBeginNode falseSuccessor, double trueSuccessorProbability) { |
65 super(StampFactory.forVoid()); | 65 super(StampFactory.forVoid()); |
66 this.condition = condition; | 66 this.condition = condition; |
67 this.falseSuccessor = falseSuccessor; | 67 this.falseSuccessor = falseSuccessor; |
68 this.trueSuccessorProbability = trueSuccessorProbability; | |
69 this.trueSuccessor = trueSuccessor; | 68 this.trueSuccessor = trueSuccessor; |
69 setTrueSuccessorProbability(trueSuccessorProbability); | |
70 | 70 |
71 } | 71 } |
72 | 72 |
73 /** | 73 /** |
74 * Gets the true successor. | 74 * Gets the true successor. |
115 AbstractBeginNode falseSucc = falseSuccessor(); | 115 AbstractBeginNode falseSucc = falseSuccessor(); |
116 setTrueSuccessor(null); | 116 setTrueSuccessor(null); |
117 setFalseSuccessor(null); | 117 setFalseSuccessor(null); |
118 setTrueSuccessor(falseSucc); | 118 setTrueSuccessor(falseSucc); |
119 setFalseSuccessor(trueSucc); | 119 setFalseSuccessor(trueSucc); |
120 trueSuccessorProbability = 1 - trueSuccessorProbability; | 120 setTrueSuccessorProbability(1 - trueSuccessorProbability); |
121 return this; | 121 return this; |
122 } | 122 } |
123 | 123 |
124 public void setTrueSuccessorProbability(double prob) { | 124 public void setTrueSuccessorProbability(double prob) { |
125 assert prob >= 0.0 && prob <= 1.0; | |
125 trueSuccessorProbability = prob; | 126 trueSuccessorProbability = prob; |
126 } | 127 } |
127 | 128 |
128 @Override | 129 @Override |
129 public double probability(AbstractBeginNode successor) { | 130 public double probability(AbstractBeginNode successor) { |
187 this.replaceAtPredecessor(nextIf); | 188 this.replaceAtPredecessor(nextIf); |
188 nextIf.setFalseSuccessor(intermediateBegin); | 189 nextIf.setFalseSuccessor(intermediateBegin); |
189 intermediateBegin.setNext(this); | 190 intermediateBegin.setNext(this); |
190 this.setFalseSuccessor(bothFalseBegin); | 191 this.setFalseSuccessor(bothFalseBegin); |
191 nextIf.setTrueSuccessorProbability(probabilityB); | 192 nextIf.setTrueSuccessorProbability(probabilityB); |
192 double newProbability = this.trueSuccessorProbability / (1.0 - probabilityB); | 193 if (probabilityB == 1.0) { |
193 this.setTrueSuccessorProbability(newProbability); | 194 this.setTrueSuccessorProbability(0.0); |
195 } else { | |
196 double newProbability = this.trueSuccessorProbability / (1.0 - probabilityB); | |
197 this.setTrueSuccessorProbability(Math.min(1.0, newProbability)); | |
198 } | |
194 return; | 199 return; |
195 } | 200 } |
196 } | 201 } |
197 } | 202 } |
198 } | 203 } |