/** * Simulate a block and note the results in the lattice. * @param block Block to visit */ private void simulateBlock(SsaBasicBlock block) { for (SsaInsn insn : block.getInsns()) { if (insn instanceof PhiInsn) { simulatePhi((PhiInsn) insn); } else { simulateStmt(insn); } } }
private void run() { SsaBasicBlock firstBlock = ssaMeth.getEntryBlock(); addBlockToWorklist(firstBlock); int listSize = cfgWorklist.size() - 1; SsaBasicBlock block = cfgWorklist.remove(listSize); simulateBlock(block); int listSize = cfgPhiWorklist.size() - 1; SsaBasicBlock block = cfgPhiWorklist.remove(listSize); simulatePhiBlock(block); simulatePhi((PhiInsn)insn); } else { simulateStmt(insn); simulatePhi((PhiInsn)insn); } else { simulateStmt(insn); replaceConstants(); replaceBranches();
if (ropInsn.getOpcode().getBranchingness() != Rop.BRANCH_NONE || ropInsn.getOpcode().isCallLike()) { simulateBranch(insn); case RegOps.USHR: case RegOps.REM: { resultConstant = simulateMath(insn, result.getBasicType()); if (resultConstant != null) { resultValue = CONSTANT; if (setLatticeValueTo(resultReg, resultValue, resultConstant)) { addUsersToWorklist(resultReg, resultValue);
private void run() { SsaBasicBlock firstBlock = ssaMeth.getEntryBlock(); addBlockToWorklist(firstBlock); int listSize = cfgWorklist.size() - 1; SsaBasicBlock block = cfgWorklist.remove(listSize); simulateBlock(block); simulatePhi((PhiInsn)insn); } else { simulateStmt(insn); simulatePhi((PhiInsn)insn); } else { simulateStmt(insn); replaceConstants();
if (setLatticeValueTo(phiResultReg, phiResultValue, phiConstant)) { addUsersToWorklist(phiResultReg, phiResultValue);
if (ropInsn.getOpcode().getBranchingness() != Rop.BRANCH_NONE || ropInsn.getOpcode().isCallLike()) { ropInsn = simplifyJump (ropInsn); for (int i = 0; i < successorSize; i++) { int successor = block.getSuccessorList().get(i); addBlockToWorklist(ssaMeth.getBlocks().get(successor)); case RegOps.REM: resultConstant = simulateMath(insn); if (setLatticeValueTo(resultReg, resultValue, resultConstant)) { addUsersToWorklist(resultReg, resultValue);
private static void runSsaFormSteps(SsaMethod ssaMeth, EnumSet<OptionalStep> steps) { boolean needsDeadCodeRemover = true; if (steps.contains(OptionalStep.MOVE_PARAM_COMBINER)) { MoveParamCombiner.process(ssaMeth); } if (steps.contains(OptionalStep.SCCP)) { SCCP.process(ssaMeth); } if (steps.contains(OptionalStep.LITERAL_UPGRADE)) { LiteralOpUpgrader.process(ssaMeth); DeadCodeRemover.process(ssaMeth); needsDeadCodeRemover = false; } if (steps.contains(OptionalStep.CONST_COLLECTOR)) { ConstCollector.process(ssaMeth); DeadCodeRemover.process(ssaMeth); needsDeadCodeRemover = false; } // dead code remover must be run before phi type resolver if (needsDeadCodeRemover) { DeadCodeRemover.process(ssaMeth); } PhiTypeResolver.process(ssaMeth); }
/** * Simulate the phis in a block and note the results in the lattice. * @param block Block to visit */ private void simulatePhiBlock(SsaBasicBlock block) { for (SsaInsn insn : block.getInsns()) { if (insn instanceof PhiInsn) { simulatePhi((PhiInsn) insn); } else { return; } } }
successorBlock = block.getSuccessorList().get(0); addBlockToWorklist(ssaMeth.getBlocks().get(successorBlock)); branchWorklist.add(insn); } else { for (int i = 0; i < block.getSuccessorList().size(); i++) { int successorBlock = block.getSuccessorList().get(i); addBlockToWorklist(ssaMeth.getBlocks().get(successorBlock));
private void run() { SsaBasicBlock firstBlock = ssaMeth.getEntryBlock(); addBlockToWorklist(firstBlock); int listSize = cfgWorklist.size() - 1; SsaBasicBlock block = cfgWorklist.remove(listSize); simulateBlock(block); int listSize = cfgPhiWorklist.size() - 1; SsaBasicBlock block = cfgPhiWorklist.remove(listSize); simulatePhiBlock(block); simulatePhi((PhiInsn)insn); } else { simulateStmt(insn); simulatePhi((PhiInsn)insn); } else { simulateStmt(insn); replaceConstants(); replaceBranches();
if (ropInsn.getOpcode().getBranchingness() != Rop.BRANCH_NONE || ropInsn.getOpcode().isCallLike()) { simulateBranch(insn); case RegOps.USHR: case RegOps.REM: { resultConstant = simulateMath(insn, result.getBasicType()); if (resultConstant != null) { resultValue = CONSTANT; if (setLatticeValueTo(resultReg, resultValue, resultConstant)) { addUsersToWorklist(resultReg, resultValue);
if (setLatticeValueTo(phiResultReg, phiResultValue, phiConstant)) { addUsersToWorklist(phiResultReg, phiResultValue);
SCCP.process(ssaMeth); DeadCodeRemover.process(ssaMeth); needsDeadCodeRemover = false;
/** * Simulate the phis in a block and note the results in the lattice. * @param block Block to visit */ private void simulatePhiBlock(SsaBasicBlock block) { for (SsaInsn insn : block.getInsns()) { if (insn instanceof PhiInsn) { simulatePhi((PhiInsn) insn); } else { return; } } }
successorBlock = block.getSuccessorList().get(0); addBlockToWorklist(ssaMeth.getBlocks().get(successorBlock)); branchWorklist.add(insn); } else { for (int i = 0; i < block.getSuccessorList().size(); i++) { int successorBlock = block.getSuccessorList().get(i); addBlockToWorklist(ssaMeth.getBlocks().get(successorBlock));
private void run() { SsaBasicBlock firstBlock = ssaMeth.getEntryBlock(); addBlockToWorklist(firstBlock); int listSize = cfgWorklist.size() - 1; SsaBasicBlock block = cfgWorklist.remove(listSize); simulateBlock(block); int listSize = cfgPhiWorklist.size() - 1; SsaBasicBlock block = cfgPhiWorklist.remove(listSize); simulatePhiBlock(block); simulatePhi((PhiInsn)insn); } else { simulateStmt(insn); simulatePhi((PhiInsn)insn); } else { simulateStmt(insn); replaceConstants(); replaceBranches();
if (ropInsn.getOpcode().getBranchingness() != Rop.BRANCH_NONE || ropInsn.getOpcode().isCallLike()) { simulateBranch(insn); case RegOps.USHR: case RegOps.REM: { resultConstant = simulateMath(insn, result.getBasicType()); if (resultConstant != null) { resultValue = CONSTANT; if (setLatticeValueTo(resultReg, resultValue, resultConstant)) { addUsersToWorklist(resultReg, resultValue);
/** * Simulate a block and note the results in the lattice. * @param block Block to visit */ private void simulateBlock(SsaBasicBlock block) { for (SsaInsn insn : block.getInsns()) { if (insn instanceof PhiInsn) { simulatePhi((PhiInsn) insn); } else { simulateStmt(insn); } } }