# HG changeset patch # User Lukas Stadler # Date 1360315590 -3600 # Node ID eaecd7c187ad6cfac851a1d49cd504c33fe6b60b # Parent 0ae87cf94914097ca8fb4298d750962e4df03f07 add Assumptions to VirtualizerTool diff -r 0ae87cf94914 -r eaecd7c187ad graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/VirtualizerTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/VirtualizerTool.java Fri Feb 08 10:25:17 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/VirtualizerTool.java Fri Feb 08 10:26:30 2013 +0100 @@ -22,6 +22,7 @@ */ package com.oracle.graal.nodes.spi; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; @@ -43,6 +44,12 @@ MetaAccessProvider getMetaAccessProvider(); /** + * @return the {@link Assumptions} associated with the current compilation, which can be used to + * make type assumptions during virtualization. + */ + Assumptions getAssumptions(); + + /** * This method should be used to query the maximum size of virtualized objects before attempting * virtualization. * diff -r 0ae87cf94914 -r eaecd7c187ad graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java Fri Feb 08 10:25:17 2013 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeAnalysisPhase.java Fri Feb 08 10:26:30 2013 +0100 @@ -92,7 +92,7 @@ public Boolean call() { SchedulePhase schedule = new SchedulePhase(); schedule.apply(graph, false); - PartialEscapeClosure closure = new PartialEscapeClosure(graph.createNodeBitMap(), schedule, runtime); + PartialEscapeClosure closure = new PartialEscapeClosure(graph.createNodeBitMap(), schedule, runtime, assumptions); ReentrantBlockIterator.apply(closure, schedule.getCFG().getStartBlock(), new BlockState(), null); if (closure.getNewVirtualObjectCount() == 0) { diff -r 0ae87cf94914 -r eaecd7c187ad graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Fri Feb 08 10:25:17 2013 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Fri Feb 08 10:26:30 2013 +0100 @@ -26,6 +26,7 @@ import java.util.*; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; @@ -59,10 +60,10 @@ private final VirtualizerToolImpl tool; - public PartialEscapeClosure(NodeBitMap usages, SchedulePhase schedule, MetaAccessProvider metaAccess) { + public PartialEscapeClosure(NodeBitMap usages, SchedulePhase schedule, MetaAccessProvider metaAccess, Assumptions assumptions) { this.usages = usages; this.schedule = schedule; - tool = new VirtualizerToolImpl(effects, usages, metaAccess); + tool = new VirtualizerToolImpl(effects, usages, metaAccess, assumptions); } public GraphEffectList getEffects() { diff -r 0ae87cf94914 -r eaecd7c187ad graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Fri Feb 08 10:25:17 2013 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Fri Feb 08 10:26:30 2013 +0100 @@ -24,6 +24,7 @@ import static com.oracle.graal.virtual.phases.ea.PartialEscapeAnalysisPhase.*; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; @@ -38,11 +39,13 @@ private final GraphEffectList effects; private final NodeBitMap usages; private final MetaAccessProvider metaAccess; + private final Assumptions assumptions; - VirtualizerToolImpl(GraphEffectList effects, NodeBitMap usages, MetaAccessProvider metaAccess) { + VirtualizerToolImpl(GraphEffectList effects, NodeBitMap usages, MetaAccessProvider metaAccess, Assumptions assumptions) { this.effects = effects; this.usages = usages; this.metaAccess = metaAccess; + this.assumptions = assumptions; } private boolean deleted; @@ -56,6 +59,11 @@ return metaAccess; } + @Override + public Assumptions getAssumptions() { + return assumptions; + } + public void reset(BlockState newState, ValueNode newCurrent) { deleted = false; customAction = false;