private int nullConstantTest(SSAConditionalBranchInstruction c, int v) { if ((symbolTable.isNullConstant(c.getUse(0)) && c.getUse(1) == v) || (symbolTable.isNullConstant(c.getUse(1)) && c.getUse(0) == v)) { if (c.getOperator() == ConditionalBranchInstruction.Operator.EQ) { return 1; } else { return -1; } } else { return 0; } }
private int nullConstantTest(SSAConditionalBranchInstruction c, int v) { if ((symbolTable.isNullConstant(c.getUse(0)) && c.getUse(1) == v) || (symbolTable.isNullConstant(c.getUse(1)) && c.getUse(0) == v)) { if (c.getOperator() == ConditionalBranchInstruction.Operator.EQ) { return 1; } else { return -1; } } else { return 0; } }
/** * TODO: What is this doing? Document me! */ private int booleanConstantTest(SSAConditionalBranchInstruction c, int v) { int result = 0; // right for OPR_eq if ((symbolTable.isZeroOrFalse(c.getUse(0)) && c.getUse(1) == v) || (symbolTable.isZeroOrFalse(c.getUse(1)) && c.getUse(0) == v)) { result = -1; } else if ((symbolTable.isOneOrTrue(c.getUse(0)) && c.getUse(1) == v) || (symbolTable.isOneOrTrue(c.getUse(1)) && c.getUse(0) == v)) { result = 1; } if (c.getOperator() == ConditionalBranchInstruction.Operator.NE) { result = -result; } return result; }
/** * TODO: What is this doing? Document me! */ private int booleanConstantTest(SSAConditionalBranchInstruction c, int v) { int result = 0; // right for OPR_eq if ((symbolTable.isZeroOrFalse(c.getUse(0)) && c.getUse(1) == v) || (symbolTable.isZeroOrFalse(c.getUse(1)) && c.getUse(0) == v)) { result = -1; } else if ((symbolTable.isOneOrTrue(c.getUse(0)) && c.getUse(1) == v) || (symbolTable.isOneOrTrue(c.getUse(1)) && c.getUse(0) == v)) { result = 1; } if (c.getOperator() == ConditionalBranchInstruction.Operator.NE) { result = -result; } return result; }
@Override public Pair<Integer, SSAInstruction> getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) { if (symbolTable == null) { throw new IllegalArgumentException("null symbolTable"); } if (cond == null) { throw new IllegalArgumentException("null cond"); } if (symbolTable.isNullConstant(cond.getUse(1))) { return Pair.<Integer,SSAInstruction>make(cond.getUse(0), cond); } if (symbolTable.isNullConstant(cond.getUse(0))) { return Pair.<Integer,SSAInstruction>make(cond.getUse(1), cond); } return null; }
@Override public Pair<Integer, SSAInstruction> getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) { if (symbolTable == null) { throw new IllegalArgumentException("null symbolTable"); } if (cond == null) { throw new IllegalArgumentException("null cond"); } if (symbolTable.isNullConstant(cond.getUse(1))) { return Pair.<Integer,SSAInstruction>make(cond.getUse(0), cond); } if (symbolTable.isNullConstant(cond.getUse(0))) { return Pair.<Integer,SSAInstruction>make(cond.getUse(1), cond); } return null; }
@Override public List<Pair<Integer, SSAInstruction>> getPis(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) { if (cond.isIntegerComparison()) { final LinkedList<Pair<Integer, SSAInstruction>> result = new LinkedList<>(); for (int i = 0; i < cond.getNumberOfUses(); i++) { result.add(Pair.make(cond.getUse(i), (SSAInstruction) cond)); } return result; } else { return Collections.emptyList(); } } }
@Override public List<Pair<Integer, SSAInstruction>> getPis(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) { if (cond.isIntegerComparison()) { final LinkedList<Pair<Integer, SSAInstruction>> result = new LinkedList<>(); for (int i = 0; i < cond.getNumberOfUses(); i++) { result.add(Pair.make(cond.getUse(i), (SSAInstruction) cond)); } return result; } else { return Collections.emptyList(); } } }
@Override public Pair<Integer, SSAInstruction> getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) { if (def1 instanceof SSAInstanceofInstruction) { if (symbolTable.isBooleanOrZeroOneConstant(cond.getUse(1))) { return Pair.make(def1.getUse(0), def1); } } if (def2 instanceof SSAInstanceofInstruction) { if (symbolTable.isBooleanOrZeroOneConstant(cond.getUse(0))) { return Pair.make(def2.getUse(0), def2); } } return null; }
@Override public Pair<Integer, SSAInstruction> getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) { if (def1 instanceof SSAInstanceofInstruction) { if (symbolTable.isBooleanOrZeroOneConstant(cond.getUse(1))) { return Pair.make(def1.getUse(0), def1); } } if (def2 instanceof SSAInstanceofInstruction) { if (symbolTable.isBooleanOrZeroOneConstant(cond.getUse(0))) { return Pair.make(def2.getUse(0), def2); } } return null; }
@Override public void visitConditionalBranch(SSAConditionalBranchInstruction instruction) { int arg1 = instruction.getUse(0); int arg2 = instruction.getUse(1); IConditionalBranchInstruction.IOperator testOp = instruction.getOperator(); if (!(testOp instanceof IConditionalBranchInstruction.Operator)) {
@Override public void visitConditionalBranch(SSAConditionalBranchInstruction instruction) { int arg1 = instruction.getUse(0); int arg2 = instruction.getUse(1); IConditionalBranchInstruction.IOperator testOp = instruction.getOperator(); if (!(testOp instanceof IConditionalBranchInstruction.Operator)) {