< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/LoweringPhase.java

Print this page




  21  * questions.
  22  */
  23 
  24 
  25 package org.graalvm.compiler.phases.common;
  26 
  27 import static org.graalvm.compiler.core.common.GraalOptions.OptEliminateGuards;
  28 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_IGNORED;
  29 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_IGNORED;
  30 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_ENTER;
  31 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_ENTER_ALWAYS_REACHED;
  32 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_LEAVE;
  33 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_PROCESS;
  34 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_PROCESS_ALWAYS_REACHED;
  35 
  36 import java.util.ArrayList;
  37 import java.util.Collection;
  38 import java.util.List;
  39 
  40 import org.graalvm.compiler.core.common.spi.ConstantFieldProvider;

  41 import org.graalvm.compiler.core.common.type.StampFactory;
  42 import org.graalvm.compiler.debug.DebugCloseable;
  43 import org.graalvm.compiler.debug.GraalError;
  44 import org.graalvm.compiler.graph.Graph.Mark;
  45 import org.graalvm.compiler.graph.Node;
  46 import org.graalvm.compiler.graph.NodeBitMap;
  47 import org.graalvm.compiler.graph.NodeClass;
  48 import org.graalvm.compiler.graph.NodeSourcePosition;
  49 import org.graalvm.compiler.graph.iterators.NodeIterable;
  50 import org.graalvm.compiler.nodeinfo.InputType;
  51 import org.graalvm.compiler.nodeinfo.NodeInfo;
  52 import org.graalvm.compiler.nodes.AbstractBeginNode;
  53 import org.graalvm.compiler.nodes.BeginNode;
  54 import org.graalvm.compiler.nodes.ControlSinkNode;
  55 import org.graalvm.compiler.nodes.FixedGuardNode;
  56 import org.graalvm.compiler.nodes.FixedNode;
  57 import org.graalvm.compiler.nodes.FixedWithNextNode;
  58 import org.graalvm.compiler.nodes.GuardNode;
  59 import org.graalvm.compiler.nodes.LogicNode;
  60 import org.graalvm.compiler.nodes.PhiNode;
  61 import org.graalvm.compiler.nodes.ProxyNode;
  62 import org.graalvm.compiler.nodes.StructuredGraph;
  63 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
  64 import org.graalvm.compiler.nodes.ValueNode;
  65 import org.graalvm.compiler.nodes.calc.FloatingNode;
  66 import org.graalvm.compiler.nodes.cfg.Block;
  67 import org.graalvm.compiler.nodes.extended.AnchoringNode;
  68 import org.graalvm.compiler.nodes.extended.GuardedNode;
  69 import org.graalvm.compiler.nodes.extended.GuardingNode;
  70 import org.graalvm.compiler.nodes.memory.MemoryCheckpoint;

  71 import org.graalvm.compiler.nodes.spi.Lowerable;
  72 import org.graalvm.compiler.nodes.spi.LoweringProvider;
  73 import org.graalvm.compiler.nodes.spi.LoweringTool;
  74 import org.graalvm.compiler.nodes.spi.Replacements;
  75 import org.graalvm.compiler.nodes.spi.StampProvider;
  76 import org.graalvm.compiler.options.OptionValues;
  77 import org.graalvm.compiler.phases.BasePhase;
  78 import org.graalvm.compiler.phases.Phase;
  79 import org.graalvm.compiler.phases.schedule.SchedulePhase;
  80 import org.graalvm.compiler.phases.tiers.PhaseContext;
  81 import jdk.internal.vm.compiler.word.LocationIdentity;
  82 
  83 import jdk.vm.ci.meta.ConstantReflectionProvider;
  84 import jdk.vm.ci.meta.DeoptimizationAction;
  85 import jdk.vm.ci.meta.DeoptimizationReason;
  86 import jdk.vm.ci.meta.MetaAccessProvider;
  87 import jdk.vm.ci.meta.SpeculationLog;
  88 import jdk.vm.ci.meta.SpeculationLog.Speculation;
  89 
  90 /**


 127     final class LoweringToolImpl implements LoweringTool {
 128 
 129         private final PhaseContext context;
 130         private final NodeBitMap activeGuards;
 131         private AnchoringNode guardAnchor;
 132         private FixedWithNextNode lastFixedNode;
 133 
 134         LoweringToolImpl(PhaseContext context, AnchoringNode guardAnchor, NodeBitMap activeGuards, FixedWithNextNode lastFixedNode) {
 135             this.context = context;
 136             this.guardAnchor = guardAnchor;
 137             this.activeGuards = activeGuards;
 138             this.lastFixedNode = lastFixedNode;
 139         }
 140 
 141         @Override
 142         public LoweringStage getLoweringStage() {
 143             return loweringStage;
 144         }
 145 
 146         @Override





 147         public ConstantReflectionProvider getConstantReflection() {
 148             return context.getConstantReflection();
 149         }
 150 
 151         @Override
 152         public ConstantFieldProvider getConstantFieldProvider() {
 153             return context.getConstantFieldProvider();
 154         }
 155 
 156         @Override
 157         public MetaAccessProvider getMetaAccess() {
 158             return context.getMetaAccess();
 159         }
 160 
 161         @Override
 162         public LoweringProvider getLowerer() {
 163             return context.getLowerer();
 164         }
 165 
 166         @Override
 167         public Replacements getReplacements() {
 168             return context.getReplacements();




 169         }
 170 
 171         @Override
 172         public AnchoringNode getCurrentGuardAnchor() {
 173             return guardAnchor;
 174         }
 175 
 176         @Override
 177         public GuardingNode createGuard(FixedNode before, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action) {
 178             return createGuard(before, condition, deoptReason, action, SpeculationLog.NO_SPECULATION, false, null);
 179         }
 180 
 181         @Override
 182         public StampProvider getStampProvider() {
 183             return context.getStampProvider();
 184         }
 185 
 186         @Override
 187         public GuardingNode createGuard(FixedNode before, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, Speculation speculation, boolean negated,
 188                         NodeSourcePosition noDeoptSucccessorPosition) {




  21  * questions.
  22  */
  23 
  24 
  25 package org.graalvm.compiler.phases.common;
  26 
  27 import static org.graalvm.compiler.core.common.GraalOptions.OptEliminateGuards;
  28 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_IGNORED;
  29 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_IGNORED;
  30 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_ENTER;
  31 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_ENTER_ALWAYS_REACHED;
  32 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_LEAVE;
  33 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_PROCESS;
  34 import static org.graalvm.compiler.phases.common.LoweringPhase.ProcessBlockState.ST_PROCESS_ALWAYS_REACHED;
  35 
  36 import java.util.ArrayList;
  37 import java.util.Collection;
  38 import java.util.List;
  39 
  40 import org.graalvm.compiler.core.common.spi.ConstantFieldProvider;
  41 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
  42 import org.graalvm.compiler.core.common.type.StampFactory;
  43 import org.graalvm.compiler.debug.DebugCloseable;
  44 import org.graalvm.compiler.debug.GraalError;
  45 import org.graalvm.compiler.graph.Graph.Mark;
  46 import org.graalvm.compiler.graph.Node;
  47 import org.graalvm.compiler.graph.NodeBitMap;
  48 import org.graalvm.compiler.graph.NodeClass;
  49 import org.graalvm.compiler.graph.NodeSourcePosition;
  50 import org.graalvm.compiler.graph.iterators.NodeIterable;
  51 import org.graalvm.compiler.nodeinfo.InputType;
  52 import org.graalvm.compiler.nodeinfo.NodeInfo;
  53 import org.graalvm.compiler.nodes.AbstractBeginNode;
  54 import org.graalvm.compiler.nodes.BeginNode;
  55 import org.graalvm.compiler.nodes.ControlSinkNode;
  56 import org.graalvm.compiler.nodes.FixedGuardNode;
  57 import org.graalvm.compiler.nodes.FixedNode;
  58 import org.graalvm.compiler.nodes.FixedWithNextNode;
  59 import org.graalvm.compiler.nodes.GuardNode;
  60 import org.graalvm.compiler.nodes.LogicNode;
  61 import org.graalvm.compiler.nodes.PhiNode;
  62 import org.graalvm.compiler.nodes.ProxyNode;
  63 import org.graalvm.compiler.nodes.StructuredGraph;
  64 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
  65 import org.graalvm.compiler.nodes.ValueNode;
  66 import org.graalvm.compiler.nodes.calc.FloatingNode;
  67 import org.graalvm.compiler.nodes.cfg.Block;
  68 import org.graalvm.compiler.nodes.extended.AnchoringNode;
  69 import org.graalvm.compiler.nodes.extended.GuardedNode;
  70 import org.graalvm.compiler.nodes.extended.GuardingNode;
  71 import org.graalvm.compiler.nodes.memory.MemoryCheckpoint;
  72 import org.graalvm.compiler.nodes.spi.CoreProviders;
  73 import org.graalvm.compiler.nodes.spi.Lowerable;
  74 import org.graalvm.compiler.nodes.spi.LoweringProvider;
  75 import org.graalvm.compiler.nodes.spi.LoweringTool;
  76 import org.graalvm.compiler.nodes.spi.Replacements;
  77 import org.graalvm.compiler.nodes.spi.StampProvider;
  78 import org.graalvm.compiler.options.OptionValues;
  79 import org.graalvm.compiler.phases.BasePhase;
  80 import org.graalvm.compiler.phases.Phase;
  81 import org.graalvm.compiler.phases.schedule.SchedulePhase;
  82 import org.graalvm.compiler.phases.tiers.PhaseContext;
  83 import jdk.internal.vm.compiler.word.LocationIdentity;
  84 
  85 import jdk.vm.ci.meta.ConstantReflectionProvider;
  86 import jdk.vm.ci.meta.DeoptimizationAction;
  87 import jdk.vm.ci.meta.DeoptimizationReason;
  88 import jdk.vm.ci.meta.MetaAccessProvider;
  89 import jdk.vm.ci.meta.SpeculationLog;
  90 import jdk.vm.ci.meta.SpeculationLog.Speculation;
  91 
  92 /**


 129     final class LoweringToolImpl implements LoweringTool {
 130 
 131         private final PhaseContext context;
 132         private final NodeBitMap activeGuards;
 133         private AnchoringNode guardAnchor;
 134         private FixedWithNextNode lastFixedNode;
 135 
 136         LoweringToolImpl(PhaseContext context, AnchoringNode guardAnchor, NodeBitMap activeGuards, FixedWithNextNode lastFixedNode) {
 137             this.context = context;
 138             this.guardAnchor = guardAnchor;
 139             this.activeGuards = activeGuards;
 140             this.lastFixedNode = lastFixedNode;
 141         }
 142 
 143         @Override
 144         public LoweringStage getLoweringStage() {
 145             return loweringStage;
 146         }
 147 
 148         @Override
 149         public CoreProviders getProviders() {
 150             return context;
 151         }
 152 
 153         @Override
 154         public ConstantReflectionProvider getConstantReflection() {
 155             return context.getConstantReflection();
 156         }
 157 
 158         @Override
 159         public ConstantFieldProvider getConstantFieldProvider() {
 160             return context.getConstantFieldProvider();
 161         }
 162 
 163         @Override
 164         public MetaAccessProvider getMetaAccess() {
 165             return context.getMetaAccess();
 166         }
 167 
 168         @Override
 169         public LoweringProvider getLowerer() {
 170             return context.getLowerer();
 171         }
 172 
 173         @Override
 174         public Replacements getReplacements() {
 175             return context.getReplacements();
 176         }
 177 
 178         public ForeignCallsProvider getForeignCalls() {
 179             return context.getForeignCalls();
 180         }
 181 
 182         @Override
 183         public AnchoringNode getCurrentGuardAnchor() {
 184             return guardAnchor;
 185         }
 186 
 187         @Override
 188         public GuardingNode createGuard(FixedNode before, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action) {
 189             return createGuard(before, condition, deoptReason, action, SpeculationLog.NO_SPECULATION, false, null);
 190         }
 191 
 192         @Override
 193         public StampProvider getStampProvider() {
 194             return context.getStampProvider();
 195         }
 196 
 197         @Override
 198         public GuardingNode createGuard(FixedNode before, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, Speculation speculation, boolean negated,
 199                         NodeSourcePosition noDeoptSucccessorPosition) {


< prev index next >