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) { |