Mercurial > hg > graal-compiler
changeset 21226:2f2fac20c446
LIRVerifier: verify PHIs.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Thu, 23 Apr 2015 11:30:36 +0200 |
parents | 422c91256dd9 |
children | f85711ac631c |
files | graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRVerifier.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAUtils.java |
diffstat | 2 files changed, 14 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRVerifier.java Wed Apr 29 11:57:47 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRVerifier.java Thu Apr 23 11:30:36 2015 +0200 @@ -35,6 +35,7 @@ import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.framemap.*; +import com.oracle.graal.lir.ssa.*; public final class LIRVerifier { @@ -128,6 +129,9 @@ LIRInstruction last = lir.getLIRforBlock(block).get(lir.getLIRforBlock(block).size() - 1); assert last instanceof StandardOp.JumpOp : "block with successor must end with unconditional jump"; } + if (block.getPredecessorCount() > 1) { + SSAUtils.verifyPhi(lir, block); + } for (LIRInstruction op : lir.getLIRforBlock(block)) { curInstruction = op;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAUtils.java Wed Apr 29 11:57:47 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAUtils.java Thu Apr 23 11:30:36 2015 +0200 @@ -103,4 +103,14 @@ return new SSAVerifier(lir).verify(); } + public static void verifyPhi(LIR lir, AbstractBlockBase<?> merge) { + assert merge.getPredecessorCount() > 1; + for (AbstractBlockBase<?> pred : merge.getPredecessors()) { + forEachPhiValuePair(lir, merge, pred, (phiIn, phiOut) -> { + assert phiIn.getLIRKind().equals(phiOut.getLIRKind()) || + (phiIn.getPlatformKind().equals(phiOut.getPlatformKind()) && phiIn.getLIRKind().isDerivedReference() && phiOut.getLIRKind().isValue()); + }); + } + } + }