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 }
|