Mercurial > hg > graal-compiler
changeset 22452:0c3050170ba8
BlockEndOp: add forEachOutgoingValue.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Thu, 13 Aug 2015 13:11:01 +0200 |
parents | df65e223fd34 |
children | 9149dd8d7343 |
files | graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java |
diffstat | 1 files changed, 9 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java Thu Aug 13 12:02:01 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java Thu Aug 13 13:11:01 2015 +0200 @@ -56,6 +56,8 @@ int addOutgoingValues(Value[] values); void clearOutgoingValues(); + + void forEachOutgoingValue(InstructionValueProcedure proc); } public interface NullCheck { @@ -154,6 +156,7 @@ public abstract static class AbstractBlockEndOp extends LIRInstruction implements BlockEndOp { public static final LIRInstructionClass<AbstractBlockEndOp> TYPE = LIRInstructionClass.create(AbstractBlockEndOp.class); + private static final EnumSet<OperandFlag> flags = EnumSet.of(REG, STACK, CONST); @Alive({REG, STACK, CONST}) private Value[] outgoingValues; private int size; @@ -200,6 +203,12 @@ private boolean checkRange(int idx) { return idx < size; } + + public void forEachOutgoingValue(InstructionValueProcedure proc) { + for (int i = 0; i < outgoingValues.length; i++) { + outgoingValues[i] = proc.doValue(this, outgoingValues[i], OperandMode.ALIVE, flags); + } + } } /**