Mercurial > hg > truffle
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 |
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 } |