31 import org.graalvm.compiler.nodes.AbstractBeginNode;
32 import org.graalvm.compiler.nodes.AbstractEndNode;
33 import org.graalvm.compiler.nodes.AbstractMergeNode;
34 import org.graalvm.compiler.nodes.CallTargetNode;
35 import org.graalvm.compiler.nodes.ConstantNode;
36 import org.graalvm.compiler.nodes.DeoptimizeNode;
37 import org.graalvm.compiler.nodes.FixedNode;
38 import org.graalvm.compiler.nodes.FixedWithNextNode;
39 import org.graalvm.compiler.nodes.IfNode;
40 import org.graalvm.compiler.nodes.Invoke;
41 import org.graalvm.compiler.nodes.LogicNode;
42 import org.graalvm.compiler.nodes.ParameterNode;
43 import org.graalvm.compiler.nodes.ReturnNode;
44 import org.graalvm.compiler.nodes.SafepointNode;
45 import org.graalvm.compiler.nodes.StructuredGraph;
46 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
47 import org.graalvm.compiler.nodes.UnwindNode;
48 import org.graalvm.compiler.nodes.VirtualState;
49 import org.graalvm.compiler.nodes.calc.BinaryNode;
50 import org.graalvm.compiler.nodes.calc.ConvertNode;
51 import org.graalvm.compiler.nodes.calc.DivNode;
52 import org.graalvm.compiler.nodes.calc.IntegerDivRemNode;
53 import org.graalvm.compiler.nodes.calc.MulNode;
54 import org.graalvm.compiler.nodes.calc.NotNode;
55 import org.graalvm.compiler.nodes.calc.ReinterpretNode;
56 import org.graalvm.compiler.nodes.calc.RemNode;
57 import org.graalvm.compiler.nodes.cfg.Block;
58 import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
59 import org.graalvm.compiler.nodes.debug.DynamicCounterNode;
60 import org.graalvm.compiler.nodes.extended.SwitchNode;
61 import org.graalvm.compiler.nodes.java.AbstractNewObjectNode;
62 import org.graalvm.compiler.nodes.java.AccessMonitorNode;
63 import org.graalvm.compiler.nodes.java.MonitorIdNode;
64 import org.graalvm.compiler.nodes.memory.Access;
65 import org.graalvm.compiler.nodes.spi.ValueProxy;
66 import org.graalvm.compiler.nodes.virtual.VirtualObjectNode;
67 import org.graalvm.compiler.phases.Phase;
68 import org.graalvm.compiler.phases.schedule.SchedulePhase;
69
70 /**
71 * This phase add counters for the dynamically executed number of nodes. Incrementing the counter
145 double blockProbability = block.probability();
146 for (Node node : schedule.getBlockToNodesMap().get(block)) {
147 count += blockProbability * getNodeWeight(node);
148 }
149 }
150 return count;
151 }
152
153 private static double getNodeWeight(Node node) {
154 if (node instanceof AbstractMergeNode) {
155 return ((AbstractMergeNode) node).phiPredecessorCount();
156 } else if (node instanceof AbstractBeginNode || node instanceof AbstractEndNode || node instanceof MonitorIdNode || node instanceof ConstantNode || node instanceof ParameterNode ||
157 node instanceof CallTargetNode || node instanceof ValueProxy || node instanceof VirtualObjectNode || node instanceof ReinterpretNode) {
158 return 0;
159 } else if (node instanceof AccessMonitorNode) {
160 return 10;
161 } else if (node instanceof Access) {
162 return 2;
163 } else if (node instanceof LogicNode || node instanceof ConvertNode || node instanceof BinaryNode || node instanceof NotNode) {
164 return 1;
165 } else if (node instanceof IntegerDivRemNode || node instanceof DivNode || node instanceof RemNode) {
166 return 10;
167 } else if (node instanceof MulNode) {
168 return 3;
169 } else if (node instanceof Invoke) {
170 return 5;
171 } else if (node instanceof IfNode || node instanceof SafepointNode) {
172 return 1;
173 } else if (node instanceof SwitchNode) {
174 return node.successors().count();
175 } else if (node instanceof ReturnNode || node instanceof UnwindNode || node instanceof DeoptimizeNode) {
176 return node.successors().count();
177 } else if (node instanceof AbstractNewObjectNode) {
178 return 10;
179 } else if (node instanceof VirtualState) {
180 return 0;
181 }
182 return 2;
183 }
184
185 private static boolean hasInvoke(Collection<Block> blocks) {
|
31 import org.graalvm.compiler.nodes.AbstractBeginNode;
32 import org.graalvm.compiler.nodes.AbstractEndNode;
33 import org.graalvm.compiler.nodes.AbstractMergeNode;
34 import org.graalvm.compiler.nodes.CallTargetNode;
35 import org.graalvm.compiler.nodes.ConstantNode;
36 import org.graalvm.compiler.nodes.DeoptimizeNode;
37 import org.graalvm.compiler.nodes.FixedNode;
38 import org.graalvm.compiler.nodes.FixedWithNextNode;
39 import org.graalvm.compiler.nodes.IfNode;
40 import org.graalvm.compiler.nodes.Invoke;
41 import org.graalvm.compiler.nodes.LogicNode;
42 import org.graalvm.compiler.nodes.ParameterNode;
43 import org.graalvm.compiler.nodes.ReturnNode;
44 import org.graalvm.compiler.nodes.SafepointNode;
45 import org.graalvm.compiler.nodes.StructuredGraph;
46 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
47 import org.graalvm.compiler.nodes.UnwindNode;
48 import org.graalvm.compiler.nodes.VirtualState;
49 import org.graalvm.compiler.nodes.calc.BinaryNode;
50 import org.graalvm.compiler.nodes.calc.ConvertNode;
51 import org.graalvm.compiler.nodes.calc.FloatDivNode;
52 import org.graalvm.compiler.nodes.calc.IntegerDivRemNode;
53 import org.graalvm.compiler.nodes.calc.MulNode;
54 import org.graalvm.compiler.nodes.calc.NotNode;
55 import org.graalvm.compiler.nodes.calc.ReinterpretNode;
56 import org.graalvm.compiler.nodes.calc.RemNode;
57 import org.graalvm.compiler.nodes.cfg.Block;
58 import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
59 import org.graalvm.compiler.nodes.debug.DynamicCounterNode;
60 import org.graalvm.compiler.nodes.extended.SwitchNode;
61 import org.graalvm.compiler.nodes.java.AbstractNewObjectNode;
62 import org.graalvm.compiler.nodes.java.AccessMonitorNode;
63 import org.graalvm.compiler.nodes.java.MonitorIdNode;
64 import org.graalvm.compiler.nodes.memory.Access;
65 import org.graalvm.compiler.nodes.spi.ValueProxy;
66 import org.graalvm.compiler.nodes.virtual.VirtualObjectNode;
67 import org.graalvm.compiler.phases.Phase;
68 import org.graalvm.compiler.phases.schedule.SchedulePhase;
69
70 /**
71 * This phase add counters for the dynamically executed number of nodes. Incrementing the counter
145 double blockProbability = block.probability();
146 for (Node node : schedule.getBlockToNodesMap().get(block)) {
147 count += blockProbability * getNodeWeight(node);
148 }
149 }
150 return count;
151 }
152
153 private static double getNodeWeight(Node node) {
154 if (node instanceof AbstractMergeNode) {
155 return ((AbstractMergeNode) node).phiPredecessorCount();
156 } else if (node instanceof AbstractBeginNode || node instanceof AbstractEndNode || node instanceof MonitorIdNode || node instanceof ConstantNode || node instanceof ParameterNode ||
157 node instanceof CallTargetNode || node instanceof ValueProxy || node instanceof VirtualObjectNode || node instanceof ReinterpretNode) {
158 return 0;
159 } else if (node instanceof AccessMonitorNode) {
160 return 10;
161 } else if (node instanceof Access) {
162 return 2;
163 } else if (node instanceof LogicNode || node instanceof ConvertNode || node instanceof BinaryNode || node instanceof NotNode) {
164 return 1;
165 } else if (node instanceof IntegerDivRemNode || node instanceof FloatDivNode || node instanceof RemNode) {
166 return 10;
167 } else if (node instanceof MulNode) {
168 return 3;
169 } else if (node instanceof Invoke) {
170 return 5;
171 } else if (node instanceof IfNode || node instanceof SafepointNode) {
172 return 1;
173 } else if (node instanceof SwitchNode) {
174 return node.successors().count();
175 } else if (node instanceof ReturnNode || node instanceof UnwindNode || node instanceof DeoptimizeNode) {
176 return node.successors().count();
177 } else if (node instanceof AbstractNewObjectNode) {
178 return 10;
179 } else if (node instanceof VirtualState) {
180 return 0;
181 }
182 return 2;
183 }
184
185 private static boolean hasInvoke(Collection<Block> blocks) {
|