Mercurial > hg > truffle
changeset 21244:bf5e055dbc9c
SSAUtils: minor refactoring.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Thu, 30 Apr 2015 15:36:03 +0200 |
parents | 0dee8e5f78ea |
children | a2430e146460 |
files | graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAUtils.java |
diffstat | 1 files changed, 34 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAUtils.java Thu Apr 30 11:51:44 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAUtils.java Thu Apr 30 15:36:03 2015 +0200 @@ -88,9 +88,8 @@ assert pred.getSuccessorCount() == 1 : String.format("Merge predecessor block %s has more than one successor? %s", pred, pred.getSuccessors()); assert pred.getSuccessors().get(0) == merge : String.format("Predecessor block %s has wrong successor: %s, should be: %s", pred, pred.getSuccessors().get(0), merge); - List<LIRInstruction> instructions = lir.getLIRforBlock(pred); - JumpOp jump = (JumpOp) instructions.get(instructions.size() - 1); - LabelOp label = (LabelOp) lir.getLIRforBlock(merge).get(0); + JumpOp jump = phiOut(lir, pred); + LabelOp label = phiIn(lir, merge); assert label.getIncomingSize() == jump.getOutgoingSize() : String.format("Phi In/Out size mismatch: in=%d vs. out=%d", label.getIncomingSize(), jump.getOutgoingSize()); @@ -99,6 +98,38 @@ } } + private static JumpOp phiOut(LIR lir, AbstractBlockBase<?> block) { + assert block.getSuccessorCount() == 1; + List<LIRInstruction> instructions = lir.getLIRforBlock(block); + int index = instructions.size() - 1; + LIRInstruction op = instructions.get(index); + return (JumpOp) op; + } + + public static int phiOutIndex(LIR lir, AbstractBlockBase<?> block) { + assert block.getSuccessorCount() == 1; + List<LIRInstruction> instructions = lir.getLIRforBlock(block); + int index = instructions.size() - 1; + assert instructions.get(index) instanceof JumpOp; + return index; + } + + private static LabelOp phiIn(LIR lir, AbstractBlockBase<?> block) { + assert block.getPredecessorCount() > 1; + LabelOp label = (LabelOp) lir.getLIRforBlock(block).get(0); + return label; + } + + public static void removePhiOut(LIR lir, AbstractBlockBase<?> block) { + JumpOp jump = phiOut(lir, block); + jump.clearOutgoingValues(); + } + + public static void removePhiIn(LIR lir, AbstractBlockBase<?> block) { + LabelOp label = phiIn(lir, block); + label.clearIncomingValues(); + } + public static boolean verifySSAForm(LIR lir) { return new SSAVerifier(lir).verify(); } @@ -113,25 +144,6 @@ } } - public static void removePhiOut(LIR lir, AbstractBlockBase<?> block) { - assert block.getSuccessorCount() == 1; - List<LIRInstruction> instructions = lir.getLIRforBlock(block); - JumpOp jump = (JumpOp) instructions.get(instructions.size() - 1); - jump.clearOutgoingValues(); - } - public static void removePhiIn(LIR lir, AbstractBlockBase<?> block) { - assert block.getPredecessorCount() > 1; - LabelOp label = (LabelOp) lir.getLIRforBlock(block).get(0); - label.clearIncomingValues(); - } - - public static int phiOutIndex(LIR lir, AbstractBlockBase<?> block) { - assert block.getSuccessorCount() == 1; - List<LIRInstruction> instructions = lir.getLIRforBlock(block); - int index = instructions.size() - 1; - assert instructions.get(index) instanceof JumpOp; - return index; - } }