changeset 22449:9efd5e976b66

TraceRA: share spilling information between traces.
author Josef Eisl <josef.eisl@jku.at>
date Thu, 13 Aug 2015 14:08:34 +0200
parents 417ae972af50
children 7932a885e4bb
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanLifetimeAnalysisPhase.java
diffstat 1 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanLifetimeAnalysisPhase.java	Thu Aug 13 11:20:41 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanLifetimeAnalysisPhase.java	Thu Aug 13 14:08:34 2015 +0200
@@ -148,6 +148,13 @@
                                 Interval from = allocator.getOrCreateInterval((AllocatableValue) fromValue);
                                 Interval to = allocator.getOrCreateInterval((AllocatableValue) toValue);
                                 setHint(label, to, from);
+                            } else if (TraceRAshareSpillInformation.getValue() && TraceUtil.isShadowedRegisterValue(fromValue)) {
+                                ShadowedRegisterValue shadowedRegisterValue = TraceUtil.asShadowedRegisterValue(fromValue);
+                                Interval from = allocator.getOrCreateInterval(shadowedRegisterValue.getRegister());
+                                Interval to = allocator.getOrCreateInterval((AllocatableValue) toValue);
+                                setHint(label, to, from);
+                                to.setSpillSlot(shadowedRegisterValue.getStackSlot());
+                                to.setSpillState(SpillState.StartInMemory);
                             }
                         }
                     }