< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/phases/aot/ReplaceConstantNodesPhase.java

Print this page




  25 import static org.graalvm.compiler.core.common.cfg.AbstractControlFlowGraph.strictlyDominates;
  26 import static org.graalvm.compiler.hotspot.nodes.aot.LoadMethodCountersNode.getLoadMethodCountersNodes;
  27 import static org.graalvm.compiler.nodes.ConstantNode.getConstantNodes;
  28 
  29 import java.util.HashSet;
  30 import java.util.List;
  31 
  32 import org.graalvm.compiler.core.common.cfg.BlockMap;
  33 import org.graalvm.compiler.core.common.type.ObjectStamp;
  34 import org.graalvm.compiler.core.common.type.Stamp;
  35 import org.graalvm.compiler.core.common.type.StampFactory;
  36 import org.graalvm.compiler.debug.GraalError;
  37 import org.graalvm.compiler.graph.Node;
  38 import org.graalvm.compiler.graph.NodeMap;
  39 import org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction;
  40 import org.graalvm.compiler.hotspot.nodes.aot.InitializeKlassNode;
  41 import org.graalvm.compiler.hotspot.nodes.aot.LoadConstantIndirectlyFixedNode;
  42 import org.graalvm.compiler.hotspot.nodes.aot.LoadConstantIndirectlyNode;
  43 import org.graalvm.compiler.hotspot.nodes.aot.LoadMethodCountersNode;
  44 import org.graalvm.compiler.hotspot.nodes.aot.ResolveConstantNode;

  45 import org.graalvm.compiler.hotspot.nodes.aot.ResolveMethodAndLoadCountersNode;
  46 import org.graalvm.compiler.nodes.AbstractBeginNode;
  47 import org.graalvm.compiler.nodes.AbstractMergeNode;
  48 import org.graalvm.compiler.nodes.ConstantNode;
  49 import org.graalvm.compiler.nodes.FixedNode;
  50 import org.graalvm.compiler.nodes.FixedWithNextNode;
  51 import org.graalvm.compiler.nodes.FrameState;
  52 import org.graalvm.compiler.nodes.LoopBeginNode;
  53 import org.graalvm.compiler.nodes.LoopExitNode;
  54 import org.graalvm.compiler.nodes.StateSplit;
  55 import org.graalvm.compiler.nodes.StructuredGraph;
  56 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
  57 import org.graalvm.compiler.nodes.ValueNode;
  58 import org.graalvm.compiler.nodes.calc.FloatingNode;
  59 import org.graalvm.compiler.nodes.cfg.Block;
  60 import org.graalvm.compiler.phases.BasePhase;
  61 import org.graalvm.compiler.phases.graph.ReentrantNodeIterator;
  62 import org.graalvm.compiler.phases.graph.ReentrantNodeIterator.NodeIteratorClosure;
  63 import org.graalvm.compiler.phases.schedule.SchedulePhase;
  64 import org.graalvm.compiler.phases.schedule.SchedulePhase.SchedulingStrategy;


  90         assert "java.lang.Byte$ByteCache".equals(byteCacheClass.getName());
  91         builtIns.add(byteCacheClass);
  92 
  93         Class<?> shortCacheClass = Short.class.getDeclaredClasses()[0];
  94         assert "java.lang.Short$ShortCache".equals(shortCacheClass.getName());
  95         builtIns.add(shortCacheClass);
  96 
  97         Class<?> integerCacheClass = Integer.class.getDeclaredClasses()[0];
  98         assert "java.lang.Integer$IntegerCache".equals(integerCacheClass.getName());
  99         builtIns.add(integerCacheClass);
 100 
 101         Class<?> longCacheClass = Long.class.getDeclaredClasses()[0];
 102         assert "java.lang.Long$LongCache".equals(longCacheClass.getName());
 103         builtIns.add(longCacheClass);
 104     }
 105 
 106     private static boolean isReplacementNode(Node n) {
 107         // @formatter:off
 108         return n instanceof LoadConstantIndirectlyNode      ||
 109                n instanceof LoadConstantIndirectlyFixedNode ||

 110                n instanceof ResolveConstantNode             ||
 111                n instanceof InitializeKlassNode;
 112         // @formatter:on
 113     }
 114 
 115     private static boolean anyUsagesNeedReplacement(ConstantNode node) {
 116         return node.usages().filter(n -> !isReplacementNode(n)).isNotEmpty();
 117     }
 118 
 119     private static boolean anyUsagesNeedReplacement(LoadMethodCountersNode node) {
 120         return node.usages().filter(n -> !(n instanceof ResolveMethodAndLoadCountersNode)).isNotEmpty();
 121     }
 122 
 123     private static boolean checkForBadFingerprint(HotSpotResolvedJavaType type) {
 124         if (type.isArray()) {
 125             if (type.getElementalType().isPrimitive()) {
 126                 return false;
 127             }
 128             return ((HotSpotResolvedObjectType) (type.getElementalType())).getFingerprint() == 0;
 129         }




  25 import static org.graalvm.compiler.core.common.cfg.AbstractControlFlowGraph.strictlyDominates;
  26 import static org.graalvm.compiler.hotspot.nodes.aot.LoadMethodCountersNode.getLoadMethodCountersNodes;
  27 import static org.graalvm.compiler.nodes.ConstantNode.getConstantNodes;
  28 
  29 import java.util.HashSet;
  30 import java.util.List;
  31 
  32 import org.graalvm.compiler.core.common.cfg.BlockMap;
  33 import org.graalvm.compiler.core.common.type.ObjectStamp;
  34 import org.graalvm.compiler.core.common.type.Stamp;
  35 import org.graalvm.compiler.core.common.type.StampFactory;
  36 import org.graalvm.compiler.debug.GraalError;
  37 import org.graalvm.compiler.graph.Node;
  38 import org.graalvm.compiler.graph.NodeMap;
  39 import org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction;
  40 import org.graalvm.compiler.hotspot.nodes.aot.InitializeKlassNode;
  41 import org.graalvm.compiler.hotspot.nodes.aot.LoadConstantIndirectlyFixedNode;
  42 import org.graalvm.compiler.hotspot.nodes.aot.LoadConstantIndirectlyNode;
  43 import org.graalvm.compiler.hotspot.nodes.aot.LoadMethodCountersNode;
  44 import org.graalvm.compiler.hotspot.nodes.aot.ResolveConstantNode;
  45 import org.graalvm.compiler.hotspot.nodes.aot.ResolveDynamicConstantNode;
  46 import org.graalvm.compiler.hotspot.nodes.aot.ResolveMethodAndLoadCountersNode;
  47 import org.graalvm.compiler.nodes.AbstractBeginNode;
  48 import org.graalvm.compiler.nodes.AbstractMergeNode;
  49 import org.graalvm.compiler.nodes.ConstantNode;
  50 import org.graalvm.compiler.nodes.FixedNode;
  51 import org.graalvm.compiler.nodes.FixedWithNextNode;
  52 import org.graalvm.compiler.nodes.FrameState;
  53 import org.graalvm.compiler.nodes.LoopBeginNode;
  54 import org.graalvm.compiler.nodes.LoopExitNode;
  55 import org.graalvm.compiler.nodes.StateSplit;
  56 import org.graalvm.compiler.nodes.StructuredGraph;
  57 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
  58 import org.graalvm.compiler.nodes.ValueNode;
  59 import org.graalvm.compiler.nodes.calc.FloatingNode;
  60 import org.graalvm.compiler.nodes.cfg.Block;
  61 import org.graalvm.compiler.phases.BasePhase;
  62 import org.graalvm.compiler.phases.graph.ReentrantNodeIterator;
  63 import org.graalvm.compiler.phases.graph.ReentrantNodeIterator.NodeIteratorClosure;
  64 import org.graalvm.compiler.phases.schedule.SchedulePhase;
  65 import org.graalvm.compiler.phases.schedule.SchedulePhase.SchedulingStrategy;


  91         assert "java.lang.Byte$ByteCache".equals(byteCacheClass.getName());
  92         builtIns.add(byteCacheClass);
  93 
  94         Class<?> shortCacheClass = Short.class.getDeclaredClasses()[0];
  95         assert "java.lang.Short$ShortCache".equals(shortCacheClass.getName());
  96         builtIns.add(shortCacheClass);
  97 
  98         Class<?> integerCacheClass = Integer.class.getDeclaredClasses()[0];
  99         assert "java.lang.Integer$IntegerCache".equals(integerCacheClass.getName());
 100         builtIns.add(integerCacheClass);
 101 
 102         Class<?> longCacheClass = Long.class.getDeclaredClasses()[0];
 103         assert "java.lang.Long$LongCache".equals(longCacheClass.getName());
 104         builtIns.add(longCacheClass);
 105     }
 106 
 107     private static boolean isReplacementNode(Node n) {
 108         // @formatter:off
 109         return n instanceof LoadConstantIndirectlyNode      ||
 110                n instanceof LoadConstantIndirectlyFixedNode ||
 111                n instanceof ResolveDynamicConstantNode      ||
 112                n instanceof ResolveConstantNode             ||
 113                n instanceof InitializeKlassNode;
 114         // @formatter:on
 115     }
 116 
 117     private static boolean anyUsagesNeedReplacement(ConstantNode node) {
 118         return node.usages().filter(n -> !isReplacementNode(n)).isNotEmpty();
 119     }
 120 
 121     private static boolean anyUsagesNeedReplacement(LoadMethodCountersNode node) {
 122         return node.usages().filter(n -> !(n instanceof ResolveMethodAndLoadCountersNode)).isNotEmpty();
 123     }
 124 
 125     private static boolean checkForBadFingerprint(HotSpotResolvedJavaType type) {
 126         if (type.isArray()) {
 127             if (type.getElementalType().isPrimitive()) {
 128                 return false;
 129             }
 130             return ((HotSpotResolvedObjectType) (type.getElementalType())).getFingerprint() == 0;
 131         }


< prev index next >