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);
+            }
+        }
     }
 
     /**