annotate graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetCounterNode.java @ 21925:64475dbf6aec

Move instantiation checks from methods substitutions to the lowering of DynamicNewInstanceNode and DynamicNewArrayNode, so that Unsafe.allocateInstance and Array.newInstance can be intrinsified to a single node.
author Christian Wimmer <christian.wimmer@oracle.com>
date Wed, 10 Jun 2015 17:23:19 -0700
parents 48c1ebd24120
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21116
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
1 /*
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
4 *
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
8 *
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
13 * accompanied this code).
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
14 *
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
18 *
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
21 * questions.
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
22 */
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
23 package com.oracle.graal.replacements;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
24
21462
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
25 import static com.oracle.graal.compiler.common.GraalOptions.*;
21116
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
26 import static com.oracle.graal.replacements.SnippetTemplate.*;
21541
5e868236654f moved UnsafeAccess to com.oracle.jvmci.common (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21462
diff changeset
27 import static com.oracle.jvmci.common.UnsafeAccess.*;
21116
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
28
21462
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
29 import java.util.*;
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
30
21116
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
31 import com.oracle.graal.api.replacements.*;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
32 import com.oracle.graal.compiler.common.type.*;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
33 import com.oracle.graal.graph.*;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
34 import com.oracle.graal.nodeinfo.*;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
35 import com.oracle.graal.nodes.*;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
36 import com.oracle.graal.nodes.spi.*;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
37 import com.oracle.graal.phases.util.*;
21462
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
38 import com.oracle.graal.replacements.Snippet.ConstantParameter;
21116
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
39 import com.oracle.graal.replacements.SnippetTemplate.AbstractTemplates;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
40 import com.oracle.graal.replacements.SnippetTemplate.Arguments;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
41 import com.oracle.graal.replacements.SnippetTemplate.SnippetInfo;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
42 import com.oracle.graal.word.*;
21556
48c1ebd24120 renamed com.oracle.graal.api[meta|code] modules to com.oracle.jvmci.[meta|code] (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21543
diff changeset
43 import com.oracle.jvmci.code.*;
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21541
diff changeset
44 import com.oracle.jvmci.common.*;
21556
48c1ebd24120 renamed com.oracle.graal.api[meta|code] modules to com.oracle.jvmci.[meta|code] (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21543
diff changeset
45 import com.oracle.jvmci.meta.*;
21116
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
46
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
47 /**
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
48 * This node can be used to add a counter to the code that will estimate the dynamic number of calls
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
49 * by adding an increment to the compiled code. This should of course only be used for
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
50 * debugging/testing purposes.
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
51 *
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
52 * A unique counter will be created for each unique name passed to the constructor. Depending on the
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
53 * value of withContext, the name of the root method is added to the counter's name.
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
54 */
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
55 @NodeInfo
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
56 public class SnippetCounterNode extends FixedWithNextNode implements Lowerable {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
57
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
58 public static final NodeClass<SnippetCounterNode> TYPE = NodeClass.create(SnippetCounterNode.class);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
59
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
60 @Input protected ValueNode increment;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
61
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
62 protected final SnippetCounter counter;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
63
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
64 public SnippetCounterNode(SnippetCounter counter, ValueNode increment) {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
65 super(TYPE, StampFactory.forVoid());
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
66 this.counter = counter;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
67 this.increment = increment;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
68 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
69
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
70 public SnippetCounter getCounter() {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
71 return counter;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
72 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
73
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
74 public ValueNode getIncrement() {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
75 return increment;
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
76 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
77
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
78 @NodeIntrinsic
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
79 public static native void add(@ConstantNodeParameter SnippetCounter counter, int increment);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
80
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
81 public static void increment(@ConstantNodeParameter SnippetCounter counter) {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
82 add(counter, 1);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
83 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
84
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
85 public void lower(LoweringTool tool) {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
86 if (graph().getGuardsStage().areFrameStatesAtDeopts()) {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
87 SnippetCounterSnippets.Templates templates = tool.getReplacements().getSnippetTemplateCache(SnippetCounterSnippets.Templates.class);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
88 templates.lower(this, tool);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
89 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
90 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
91
21462
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
92 /**
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
93 * When {@link #SnippetCounters} are enabled make sure {@link #SNIPPET_COUNTER_LOCATION} is part
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
94 * of the private locations.
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
95 *
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
96 * @param privateLocations
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
97 * @return a copy of privateLocations with any needed locations added
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
98 */
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
99 public static LocationIdentity[] addSnippetCounters(LocationIdentity[] privateLocations) {
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
100 if (SnippetCounters.getValue()) {
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
101 for (LocationIdentity location : privateLocations) {
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
102 if (location.equals(SNIPPET_COUNTER_LOCATION)) {
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
103 return privateLocations;
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
104 }
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
105 }
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
106 LocationIdentity[] result = Arrays.copyOf(privateLocations, privateLocations.length + 1);
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
107 result[result.length - 1] = SnippetCounterNode.SNIPPET_COUNTER_LOCATION;
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
108 return result;
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
109 }
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
110 return privateLocations;
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
111 }
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
112
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
113 /**
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
114 * We do not want to use the {@link LocationIdentity} of the {@link SnippetCounter#value} field,
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
115 * so that the usage in snippets is always possible. If a method accesses the counter via the
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
116 * field and the snippet, the result might not be correct though.
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
117 */
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
118 public static final LocationIdentity SNIPPET_COUNTER_LOCATION = NamedLocationIdentity.mutable("SnippetCounter");
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
119
21116
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
120 static class SnippetCounterSnippets implements Snippets {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
121
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
122 @Fold
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
123 private static int countOffset() {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
124 try {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
125 return (int) unsafe.objectFieldOffset(SnippetCounter.class.getDeclaredField("value"));
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
126 } catch (Exception e) {
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21541
diff changeset
127 throw new JVMCIError(e);
21116
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
128 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
129 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
130
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
131 @Snippet
21462
ac2694c465db Fix SnippetCounters private location assert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21116
diff changeset
132 public static void add(@ConstantParameter SnippetCounter counter, int increment) {
21116
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
133 long loadedValue = ObjectAccess.readLong(counter, countOffset(), SNIPPET_COUNTER_LOCATION);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
134 ObjectAccess.writeLong(counter, countOffset(), loadedValue + increment, SNIPPET_COUNTER_LOCATION);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
135 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
136
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
137 public static class Templates extends AbstractTemplates {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
138
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
139 private final SnippetInfo add = snippet(SnippetCounterSnippets.class, "add", SNIPPET_COUNTER_LOCATION);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
140
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
141 public Templates(Providers providers, SnippetReflectionProvider snippetReflection, TargetDescription target) {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
142 super(providers, snippetReflection, target);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
143 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
144
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
145 public void lower(SnippetCounterNode counter, LoweringTool tool) {
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
146 StructuredGraph graph = counter.graph();
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
147 Arguments args = new Arguments(add, graph.getGuardsStage(), tool.getLoweringStage());
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
148 args.addConst("counter", counter.getCounter());
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
149 args.add("increment", counter.getIncrement());
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
150
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
151 template(args).instantiate(providers.getMetaAccess(), counter, DEFAULT_REPLACER, args);
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
152 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
153 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
154 }
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
155
bf8cbbfabdcf Use snippets for incrementing snippet counters
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
diff changeset
156 }