# HG changeset patch # User Josef Eisl # Date 1439465614 -7200 # Node ID ec2a1d0000dd1373c4e8ebc05532c8035c8b1db7 # Parent 2f6d931cd4be38c6053871fa0033d25751eeb42b TraceRA: remove replacement hack from ShadowedRegisterValue. diff -r 2f6d931cd4be -r ec2a1d0000dd graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/ShadowedRegisterValue.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/ShadowedRegisterValue.java Thu Aug 13 13:30:27 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/ShadowedRegisterValue.java Thu Aug 13 13:33:34 2015 +0200 @@ -27,7 +27,6 @@ import java.util.*; import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.meta.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.LIRInstruction.OperandFlag; @@ -35,14 +34,8 @@ /** * Represents a {@link #register} which has a shadow copy on the {@link #stackslot stack}. - *

- * Note: {@link ShadowedRegisterValue} does not follow the contract of {@link CompositeValue}, for - * instance the {@link #forEachComponent} does not visit {@link #register} or {@link #stackslot} but - * the {@link CompositeValue} itself. Therefore it should be only used in the context of the - * {@link TraceRegisterAllocationPhase}. */ final class ShadowedRegisterValue extends CompositeValue { - private static final EnumSet flags = EnumSet.of(COMPOSITE); private static final EnumSet registerFlags = EnumSet.of(REG); private static final EnumSet stackslotFlags = EnumSet.of(STACK); @@ -65,9 +58,13 @@ } @Override - public Value forEachComponent(LIRInstruction inst, OperandMode mode, InstructionValueProcedure proc) { - /* TODO(jeisl) This is a hack to be able to replace the composite value with the register. */ - return proc.doValue(inst, this, mode, flags); + public CompositeValue forEachComponent(LIRInstruction inst, OperandMode mode, InstructionValueProcedure proc) { + RegisterValue newRegister = (RegisterValue) proc.doValue(inst, register, mode, registerFlags); + StackSlotValue newStackSlot = (StackSlotValue) proc.doValue(inst, stackslot, mode, stackslotFlags); + if (register.equals(newRegister) || stackslot.equals(newStackSlot)) { + return this; + } + return new ShadowedRegisterValue(newRegister, newStackSlot); } @Override