rename getTrue/FalseSuccessor to getTaken/NotTakenSuccessor and check for IllegalArgumentExceptions

git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1510 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
sjfink 2007-07-19 17:27:18 +00:00
parent 0d32f296f4
commit 155aaf9f50
2 changed files with 39 additions and 22 deletions

View File

@ -51,15 +51,32 @@ public class Util {
return G.getBlockForInstruction(b.getLastInstructionIndex() + 1);
}
public static IBasicBlock getFalseSuccessor(ControlFlowGraph G, IBasicBlock b) {
return getFallThruBlock(G, b);
}
public static IBasicBlock getTrueSuccessor(ControlFlowGraph G, IBasicBlock b) {
/**
* Given that b ends with a conditional branch, return the basic block to which control
* transfers if the branch is not taken.
*/
public static IBasicBlock getNotTakenSuccessor(ControlFlowGraph G, IBasicBlock b) {
if (G == null) {
throw new IllegalArgumentException("G is null");
}
IBasicBlock fs = getFalseSuccessor(G, b);
if (!endsWithConditionalBranch(G, b)) {
throw new IllegalArgumentException(b.toString() + " does not end with a conditional branch");
}
return getFallThruBlock(G, b);
}
/**
* Given that b ends with a conditional branch, return the basic block to which control
* transfers if the branch is not taken.
*/
public static IBasicBlock getTakenSuccessor(ControlFlowGraph G, IBasicBlock b) {
if (G == null) {
throw new IllegalArgumentException("G is null");
}
if (!endsWithConditionalBranch(G, b)) {
throw new IllegalArgumentException(b.toString() + " does not end with a conditional branch");
}
IBasicBlock fs = getNotTakenSuccessor(G, b);
for (Iterator ss = G.getSuccNodes(b); ss.hasNext();) {
IBasicBlock s = (IBasicBlock) ss.next();
if (s != fs)
@ -119,34 +136,34 @@ public class Util {
switch ((ConditionalBranchInstruction.Operator) c.getOperator()) {
case EQ:
if (c1 == c2)
return getTrueSuccessor(G, bb);
return getTakenSuccessor(G, bb);
else
return getFalseSuccessor(G, bb);
return getNotTakenSuccessor(G, bb);
case NE:
if (c1 != c2)
return getTrueSuccessor(G, bb);
return getTakenSuccessor(G, bb);
else
return getFalseSuccessor(G, bb);
return getNotTakenSuccessor(G, bb);
case LT:
if (c1 < c2)
return getTrueSuccessor(G, bb);
return getTakenSuccessor(G, bb);
else
return getFalseSuccessor(G, bb);
return getNotTakenSuccessor(G, bb);
case GE:
if (c1 >= c2)
return getTrueSuccessor(G, bb);
return getTakenSuccessor(G, bb);
else
return getFalseSuccessor(G, bb);
return getNotTakenSuccessor(G, bb);
case GT:
if (c1 > c2)
return getTrueSuccessor(G, bb);
return getTakenSuccessor(G, bb);
else
return getFalseSuccessor(G, bb);
return getNotTakenSuccessor(G, bb);
case LE:
if (c1 <= c2)
return getTrueSuccessor(G, bb);
return getTakenSuccessor(G, bb);
else
return getFalseSuccessor(G, bb);
return getNotTakenSuccessor(G, bb);
}
Assertions.UNREACHABLE();

View File

@ -1286,8 +1286,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap
system.newConstraint(dst, assignOperator, src);
} else {
PointerKey dst = getFilteredPointerKeyForLocal(instruction.getDef(), new FilteredPointerKey.SingleClassFilter(cls));
if ((target == com.ibm.wala.cfg.Util.getTrueSuccessor(CFG, getBasicBlock()) && dir == 1)
|| (target == com.ibm.wala.cfg.Util.getFalseSuccessor(CFG, getBasicBlock()) && dir == -1)) {
if ((target == com.ibm.wala.cfg.Util.getTakenSuccessor(CFG, getBasicBlock()) && dir == 1)
|| (target == com.ibm.wala.cfg.Util.getNotTakenSuccessor(CFG, getBasicBlock()) && dir == -1)) {
system.newConstraint(dst, getBuilder().filterOperator, src);
// System.err.println("PI " + dst + " " + src);
} else {
@ -1295,8 +1295,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap
}
}
} else if ((dir = nullConstantTest(cond, instruction.getVal())) != 0) {
if ((target == com.ibm.wala.cfg.Util.getTrueSuccessor(CFG, getBasicBlock()) && dir == -1)
|| (target == com.ibm.wala.cfg.Util.getFalseSuccessor(CFG, getBasicBlock()) && dir == 1)) {
if ((target == com.ibm.wala.cfg.Util.getTakenSuccessor(CFG, getBasicBlock()) && dir == -1)
|| (target == com.ibm.wala.cfg.Util.getNotTakenSuccessor(CFG, getBasicBlock()) && dir == 1)) {
PointerKey dst = getPointerKeyForLocal(instruction.getDef());
system.newConstraint(dst, assignOperator, src);
}