changeset 16770:8341b061e496

Clone CompositeValue in ValuePosition.set().
author Josef Eisl <josef.eisl@jku.at>
date Mon, 11 Aug 2014 18:07:31 +0200
parents bcbc6b6a341f
children db2ac421649a
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValuePosition.java
diffstat 2 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java	Mon Aug 11 17:40:27 2014 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java	Mon Aug 11 18:07:31 2014 +0200
@@ -165,8 +165,10 @@
         return getValueForPosition(obj, componentOffsets, directComponentCount, pos);
     }
 
-    void setValue(CompositeValue obj, ValuePosition pos, Value value) {
-        setValueForPosition(obj, componentOffsets, directComponentCount, pos, value);
+    CompositeValue createUpdatedValue(CompositeValue compValue, ValuePosition pos, Value value) {
+        CompositeValue newCompValue = compValue.clone();
+        setValueForPosition(newCompValue, componentOffsets, directComponentCount, pos, value);
+        return newCompValue;
     }
 
     EnumSet<OperandFlag> getFlags(ValuePosition pos) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValuePosition.java	Mon Aug 11 17:40:27 2014 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValuePosition.java	Mon Aug 11 18:07:31 2014 +0200
@@ -70,7 +70,8 @@
     public void set(LIRInstruction inst, Value value) {
         if (isCompositePosition()) {
             CompositeValue compValue = (CompositeValue) outerPosition.get(inst);
-            compValue.getValueClass().setValue(compValue, this, value);
+            CompositeValue newCompValue = compValue.getValueClass().createUpdatedValue(compValue, this, value);
+            outerPosition.set(inst, newCompValue);
         } else {
             inst.getLIRInstructionClass().setValue(inst, this, value);
         }