Mercurial > hg > truffle
annotate graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java @ 19928:bf342f564500
GuardsStage: add areDeoptsFixed helper method
author | Gilles Duboscq <gilles.m.duboscq@oracle.com> |
---|---|
date | Tue, 17 Mar 2015 16:13:54 +0100 |
parents | d8e7f4eaaa8b |
children | 81d08c81b2a7 |
rev | line source |
---|---|
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
1 /* |
15024
2ee777221036
Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
2 * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
4 * |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
8 * |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
14 * |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
18 * |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
21 * questions. |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
22 */ |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.hotspot.meta; |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
24 |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
25 import static com.oracle.graal.api.meta.LocationIdentity.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
26 import static com.oracle.graal.compiler.common.GraalOptions.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
27 import static com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
28 import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
29 import static com.oracle.graal.hotspot.replacements.NewObjectSnippets.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
30 |
18264
e28aa8468d5e
converted HotSpotResolvedJavaField to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
31 import java.lang.ref.*; |
e28aa8468d5e
converted HotSpotResolvedJavaField to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
32 |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
33 import com.oracle.graal.api.code.*; |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
34 import com.oracle.graal.api.meta.*; |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
35 import com.oracle.graal.compiler.common.*; |
16166
d69ede72299a
Expose loadStamp method in HotSpotLoweringProvider interface.
Roland Schatz <roland.schatz@oracle.com>
parents:
15889
diff
changeset
|
36 import com.oracle.graal.compiler.common.type.*; |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
37 import com.oracle.graal.graph.*; |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
38 import com.oracle.graal.hotspot.*; |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
39 import com.oracle.graal.hotspot.nodes.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
40 import com.oracle.graal.hotspot.nodes.type.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
41 import com.oracle.graal.hotspot.replacements.*; |
18596
5afa718edb8b
arraycopy: move related classes to dedicated package
Bernhard Urban <bernhard.urban@jku.at>
parents:
18544
diff
changeset
|
42 import com.oracle.graal.hotspot.replacements.arraycopy.*; |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
43 import com.oracle.graal.nodes.*; |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
44 import com.oracle.graal.nodes.HeapAccess.BarrierType; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
45 import com.oracle.graal.nodes.calc.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
46 import com.oracle.graal.nodes.debug.*; |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
47 import com.oracle.graal.nodes.extended.*; |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
48 import com.oracle.graal.nodes.java.*; |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
49 import com.oracle.graal.nodes.spi.*; |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
50 import com.oracle.graal.nodes.type.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
51 import com.oracle.graal.replacements.*; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
52 import com.oracle.graal.replacements.nodes.*; |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
53 |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
54 /** |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
55 * HotSpot implementation of {@link LoweringProvider}. |
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
56 */ |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
57 public class DefaultHotSpotLoweringProvider extends DefaultJavaLoweringProvider implements HotSpotLoweringProvider { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
58 |
18515
8b87897f5b42
introduced HotSpotGraalRuntimeProvder interface
Doug Simon <doug.simon@oracle.com>
parents:
18502
diff
changeset
|
59 protected final HotSpotGraalRuntimeProvider runtime; |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
60 protected final ForeignCallsProvider foreignCalls; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
61 protected final HotSpotRegistersProvider registers; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
62 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
63 protected CheckCastDynamicSnippets.Templates checkcastDynamicSnippets; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
64 protected InstanceOfSnippets.Templates instanceofSnippets; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
65 protected NewObjectSnippets.Templates newObjectSnippets; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
66 protected MonitorSnippets.Templates monitorSnippets; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
67 protected WriteBarrierSnippets.Templates writeBarrierSnippets; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
68 protected LoadExceptionObjectSnippets.Templates exceptionObjectSnippets; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
69 protected UnsafeLoadSnippets.Templates unsafeLoadSnippets; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
70 protected AssertionSnippets.Templates assertionSnippets; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
71 |
18515
8b87897f5b42
introduced HotSpotGraalRuntimeProvder interface
Doug Simon <doug.simon@oracle.com>
parents:
18502
diff
changeset
|
72 public DefaultHotSpotLoweringProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, ForeignCallsProvider foreignCalls, HotSpotRegistersProvider registers, |
8b87897f5b42
introduced HotSpotGraalRuntimeProvder interface
Doug Simon <doug.simon@oracle.com>
parents:
18502
diff
changeset
|
73 TargetDescription target) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
74 super(metaAccess, target); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
75 this.runtime = runtime; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
76 this.foreignCalls = foreignCalls; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
77 this.registers = registers; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
78 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
79 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
80 public void initialize(HotSpotProviders providers, HotSpotVMConfig config) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
81 super.initialize(providers, providers.getSnippetReflection()); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
82 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
83 assert target == providers.getCodeCache().getTarget(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
84 checkcastDynamicSnippets = new CheckCastDynamicSnippets.Templates(providers, target); |
19725
19d3db31bcea
Only use deoptimizing instanceof snippet if the profile covers 100% of the cases
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
19403
diff
changeset
|
85 instanceofSnippets = new InstanceOfSnippets.Templates(providers, target); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
86 newObjectSnippets = new NewObjectSnippets.Templates(providers, target); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
87 monitorSnippets = new MonitorSnippets.Templates(providers, target, config.useFastLocking); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
88 writeBarrierSnippets = new WriteBarrierSnippets.Templates(providers, target, config.useCompressedOops ? config.getOopEncoding() : null); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
89 exceptionObjectSnippets = new LoadExceptionObjectSnippets.Templates(providers, target); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
90 unsafeLoadSnippets = new UnsafeLoadSnippets.Templates(providers, target); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
91 assertionSnippets = new AssertionSnippets.Templates(providers, target); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
92 providers.getReplacements().registerSnippetTemplateCache(new UnsafeArrayCopySnippets.Templates(providers, target)); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
93 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
94 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
95 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
96 public void lower(Node n, LoweringTool tool) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
97 StructuredGraph graph = (StructuredGraph) n.graph(); |
14945
b14cb2d9253d
Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents:
14863
diff
changeset
|
98 |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
99 if (n instanceof Invoke) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
100 lowerInvoke((Invoke) n, tool, graph); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
101 } else if (n instanceof LoadMethodNode) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
102 lowerLoadMethodNode((LoadMethodNode) n); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
103 } else if (n instanceof StoreHubNode) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
104 lowerStoreHubNode((StoreHubNode) n, graph); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
105 } else if (n instanceof OSRStartNode) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
106 lowerOSRStartNode((OSRStartNode) n); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
107 } else if (n instanceof BytecodeExceptionNode) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
108 lowerBytecodeExceptionNode((BytecodeExceptionNode) n); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
109 } else if (n instanceof CheckCastDynamicNode) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
110 checkcastDynamicSnippets.lower((CheckCastDynamicNode) n, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
111 } else if (n instanceof InstanceOfNode) { |
19928
bf342f564500
GuardsStage: add areDeoptsFixed helper method
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
19911
diff
changeset
|
112 if (graph.getGuardsStage().areDeoptsFixed()) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
113 instanceofSnippets.lower((InstanceOfNode) n, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
114 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
115 } else if (n instanceof InstanceOfDynamicNode) { |
19928
bf342f564500
GuardsStage: add areDeoptsFixed helper method
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
19911
diff
changeset
|
116 if (graph.getGuardsStage().areDeoptsFixed()) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
117 instanceofSnippets.lower((InstanceOfDynamicNode) n, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
118 } |
19341
5eb28dbbeb37
Change Class.isAssignableFrom intrinsic into a snippet
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18993
diff
changeset
|
119 } else if (n instanceof ClassIsAssignableFromNode) { |
19928
bf342f564500
GuardsStage: add areDeoptsFixed helper method
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
19911
diff
changeset
|
120 if (graph.getGuardsStage().areDeoptsFixed()) { |
19341
5eb28dbbeb37
Change Class.isAssignableFrom intrinsic into a snippet
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18993
diff
changeset
|
121 instanceofSnippets.lower((ClassIsAssignableFromNode) n, tool); |
5eb28dbbeb37
Change Class.isAssignableFrom intrinsic into a snippet
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18993
diff
changeset
|
122 } |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
123 } else if (n instanceof NewInstanceNode) { |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
124 if (graph.getGuardsStage().areFrameStatesAtDeopts()) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
125 newObjectSnippets.lower((NewInstanceNode) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
126 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
127 } else if (n instanceof DynamicNewInstanceNode) { |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
128 if (graph.getGuardsStage().areFrameStatesAtDeopts()) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
129 newObjectSnippets.lower((DynamicNewInstanceNode) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
130 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
131 } else if (n instanceof NewArrayNode) { |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
132 if (graph.getGuardsStage().areFrameStatesAtDeopts()) { |
18515
8b87897f5b42
introduced HotSpotGraalRuntimeProvder interface
Doug Simon <doug.simon@oracle.com>
parents:
18502
diff
changeset
|
133 newObjectSnippets.lower((NewArrayNode) n, registers, runtime, tool); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
134 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
135 } else if (n instanceof DynamicNewArrayNode) { |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
136 if (graph.getGuardsStage().areFrameStatesAtDeopts()) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
137 newObjectSnippets.lower((DynamicNewArrayNode) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
138 } |
18699
08b17b738500
Add hooks for verifying heap from generated code
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18649
diff
changeset
|
139 } else if (n instanceof VerifyHeapNode) { |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
140 if (graph.getGuardsStage().areFrameStatesAtDeopts()) { |
18699
08b17b738500
Add hooks for verifying heap from generated code
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18649
diff
changeset
|
141 newObjectSnippets.lower((VerifyHeapNode) n, registers, runtime, tool); |
08b17b738500
Add hooks for verifying heap from generated code
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18649
diff
changeset
|
142 } |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
143 } else if (n instanceof MonitorEnterNode) { |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
144 if (graph.getGuardsStage().areFrameStatesAtDeopts()) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
145 monitorSnippets.lower((MonitorEnterNode) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
146 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
147 } else if (n instanceof MonitorExitNode) { |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
148 if (graph.getGuardsStage().areFrameStatesAtDeopts()) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
149 monitorSnippets.lower((MonitorExitNode) n, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
150 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
151 } else if (n instanceof G1PreWriteBarrier) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
152 writeBarrierSnippets.lower((G1PreWriteBarrier) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
153 } else if (n instanceof G1PostWriteBarrier) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
154 writeBarrierSnippets.lower((G1PostWriteBarrier) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
155 } else if (n instanceof G1ReferentFieldReadBarrier) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
156 writeBarrierSnippets.lower((G1ReferentFieldReadBarrier) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
157 } else if (n instanceof SerialWriteBarrier) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
158 writeBarrierSnippets.lower((SerialWriteBarrier) n, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
159 } else if (n instanceof SerialArrayRangeWriteBarrier) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
160 writeBarrierSnippets.lower((SerialArrayRangeWriteBarrier) n, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
161 } else if (n instanceof G1ArrayRangePreWriteBarrier) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
162 writeBarrierSnippets.lower((G1ArrayRangePreWriteBarrier) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
163 } else if (n instanceof G1ArrayRangePostWriteBarrier) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
164 writeBarrierSnippets.lower((G1ArrayRangePostWriteBarrier) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
165 } else if (n instanceof NewMultiArrayNode) { |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
166 if (graph.getGuardsStage().areFrameStatesAtDeopts()) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
167 newObjectSnippets.lower((NewMultiArrayNode) n, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
168 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
169 } else if (n instanceof LoadExceptionObjectNode) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
170 exceptionObjectSnippets.lower((LoadExceptionObjectNode) n, registers, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
171 } else if (n instanceof AssertionNode) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
172 assertionSnippets.lower((AssertionNode) n, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
173 } else if (n instanceof IntegerDivNode || n instanceof IntegerRemNode || n instanceof UnsignedDivNode || n instanceof UnsignedRemNode) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
174 // Nothing to do for division nodes. The HotSpot signal handler catches divisions by |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
175 // zero and the MIN_VALUE / -1 cases. |
17200
56458afc02a3
Use common nodes for integer and floating point arithmetic.
Roland Schatz <roland.schatz@oracle.com>
parents:
17129
diff
changeset
|
176 } else if (n instanceof AbstractDeoptimizeNode || n instanceof UnwindNode || n instanceof RemNode) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
177 /* No lowering, we generate LIR directly for these nodes. */ |
18720
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
178 } else if (n instanceof ClassGetHubNode) { |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
179 lowerClassGetHubNode((ClassGetHubNode) n, tool); |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
180 } else if (n instanceof HubGetClassNode) { |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
181 lowerHubGetClassNode((HubGetClassNode) n, tool); |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
182 } else if (n instanceof KlassLayoutHelperNode) { |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
183 lowerKlassLayoutHelperNode((KlassLayoutHelperNode) n, tool); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
184 } else { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
185 super.lower(n, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
186 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
187 } |
14945
b14cb2d9253d
Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents:
14863
diff
changeset
|
188 |
18720
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
189 private void lowerKlassLayoutHelperNode(KlassLayoutHelperNode n, LoweringTool tool) { |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
190 if (tool.getLoweringStage() == LoweringTool.StandardLoweringStage.HIGH_TIER) { |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
191 return; |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
192 } |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
193 StructuredGraph graph = n.graph(); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
194 LocationNode location = graph.unique(new ConstantLocationNode(KLASS_LAYOUT_HELPER_LOCATION, runtime.getConfig().klassLayoutHelperOffset)); |
18720
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
195 assert !n.getHub().isConstant(); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
196 graph.replaceFloating(n, graph.unique(new FloatingReadNode(n.getHub(), location, null, n.stamp(), n.getGuard(), BarrierType.NONE))); |
18720
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
197 } |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
198 |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
199 private void lowerHubGetClassNode(HubGetClassNode n, LoweringTool tool) { |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
200 if (tool.getLoweringStage() == LoweringTool.StandardLoweringStage.HIGH_TIER) { |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
201 return; |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
202 } |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
203 |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
204 StructuredGraph graph = n.graph(); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
205 LocationNode location = graph.unique(new ConstantLocationNode(CLASS_MIRROR_LOCATION, runtime.getConfig().classMirrorOffset)); |
18720
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
206 assert !n.getHub().isConstant(); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
207 FloatingReadNode read = graph.unique(new FloatingReadNode(n.getHub(), location, null, n.stamp(), n.getGuard(), BarrierType.NONE)); |
18720
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
208 graph.replaceFloating(n, read); |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
209 } |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
210 |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
211 private void lowerClassGetHubNode(ClassGetHubNode n, LoweringTool tool) { |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
212 if (tool.getLoweringStage() == LoweringTool.StandardLoweringStage.HIGH_TIER) { |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
213 return; |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
214 } |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
215 |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
216 StructuredGraph graph = n.graph(); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
217 LocationNode location = graph.unique(new ConstantLocationNode(CLASS_KLASS_LOCATION, runtime.getConfig().klassOffset)); |
18720
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
218 assert !n.getValue().isConstant(); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
219 FloatingReadNode read = graph.unique(new FloatingReadNode(n.getValue(), location, null, n.stamp(), n.getGuard(), BarrierType.NONE)); |
18720
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
220 graph.replaceFloating(n, read); |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
221 } |
ab9d3ff6829b
Pass constant reflection into ConvertNode.convert
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18699
diff
changeset
|
222 |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
223 private void lowerInvoke(Invoke invoke, LoweringTool tool, StructuredGraph graph) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
224 if (invoke.callTarget() instanceof MethodCallTargetNode) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
225 MethodCallTargetNode callTarget = (MethodCallTargetNode) invoke.callTarget(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
226 NodeInputList<ValueNode> parameters = callTarget.arguments(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
227 ValueNode receiver = parameters.size() <= 0 ? null : parameters.get(0); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
228 GuardingNode receiverNullCheck = null; |
18490
ca81508f2a19
Generalize NULL handling to work on arbitrary pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
18487
diff
changeset
|
229 if (!callTarget.isStatic() && receiver.stamp() instanceof ObjectStamp && !StampTool.isPointerNonNull(receiver)) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
230 receiverNullCheck = createNullCheck(receiver, invoke.asNode(), tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
231 invoke.setGuard(receiverNullCheck); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
232 } |
16484
27f2ee618883
moved signatureToTypes(Signature signature, JavaType receiverType) from MetaUtil to be a default method in Signature
Doug Simon <doug.simon@oracle.com>
parents:
16330
diff
changeset
|
233 JavaType[] signature = callTarget.targetMethod().getSignature().toParameterTypes(callTarget.isStatic() ? null : callTarget.targetMethod().getDeclaringClass()); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
234 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
235 LoweredCallTargetNode loweredCallTarget = null; |
18822
fad37aaed6d2
Add utilities isDirect and isIndirect to InvokeKind.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18720
diff
changeset
|
236 if (InlineVTableStubs.getValue() && callTarget.invokeKind().isIndirect() && (AlwaysInlineVTableStubs.getValue() || invoke.isPolymorphic())) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
237 HotSpotResolvedJavaMethod hsMethod = (HotSpotResolvedJavaMethod) callTarget.targetMethod(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
238 ResolvedJavaType receiverType = invoke.getReceiverType(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
239 if (hsMethod.isInVirtualMethodTable(receiverType)) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
240 Kind wordKind = runtime.getTarget().wordKind; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
241 ValueNode hub = createReadHub(graph, receiver, receiverNullCheck); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
242 |
18649
d138867d61c4
Remove getValueKind() from LocationNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
18596
diff
changeset
|
243 ReadNode metaspaceMethod = createReadVirtualMethod(graph, hub, hsMethod, receiverType); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
244 // We use LocationNode.ANY_LOCATION for the reads that access the |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
245 // compiled code entry as HotSpot does not guarantee they are final |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
246 // values. |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
247 int methodCompiledEntryOffset = runtime.getConfig().methodCompiledEntryOffset; |
19845
3d0116ec99c5
Create utilities LocationIdentity#isAny, LocationIdentity#isSingle, LocationIdentity#any, LocationIdentity#overlaps.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19725
diff
changeset
|
248 ReadNode compiledEntry = graph.add(new ReadNode(metaspaceMethod, graph.unique(new ConstantLocationNode(any(), methodCompiledEntryOffset)), StampFactory.forKind(wordKind), |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
249 BarrierType.NONE)); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
250 |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
251 loweredCallTarget = graph.add(new HotSpotIndirectCallTargetNode(metaspaceMethod, compiledEntry, parameters, invoke.asNode().stamp(), signature, callTarget.targetMethod(), |
16565
2b63e51e7789
Move invokeKind into CallTragetNode from its subclasses
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16563
diff
changeset
|
252 CallingConvention.Type.JavaCall, callTarget.invokeKind())); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
253 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
254 graph.addBeforeFixed(invoke.asNode(), metaspaceMethod); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
255 graph.addAfterFixed(metaspaceMethod, compiledEntry); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
256 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
257 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
258 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
259 if (loweredCallTarget == null) { |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
260 loweredCallTarget = graph.add(new HotSpotDirectCallTargetNode(parameters, invoke.asNode().stamp(), signature, callTarget.targetMethod(), CallingConvention.Type.JavaCall, |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
261 callTarget.invokeKind())); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
262 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
263 callTarget.replaceAndDelete(loweredCallTarget); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
264 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
265 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
266 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
267 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
268 protected Stamp loadStamp(Stamp stamp, Kind kind, boolean compressible) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
269 if (kind == Kind.Object && compressible && runtime.getConfig().useCompressedOops) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
270 return NarrowOopStamp.compressed((ObjectStamp) stamp, runtime.getConfig().getOopEncoding()); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
271 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
272 return super.loadStamp(stamp, kind, compressible); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
273 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
274 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
275 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
276 protected ValueNode implicitLoadConvert(StructuredGraph graph, Kind kind, ValueNode value, boolean compressible) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
277 if (kind == Kind.Object && compressible && runtime.getConfig().useCompressedOops) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
278 return CompressionNode.uncompress(value, runtime.getConfig().getOopEncoding()); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
279 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
280 return super.implicitLoadConvert(graph, kind, value, compressible); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
281 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
282 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
283 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
284 protected ValueNode staticFieldBase(StructuredGraph graph, ResolvedJavaField f) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
285 HotSpotResolvedJavaField field = (HotSpotResolvedJavaField) f; |
18361
6ac7e9c85be6
Split getEncoding into two methods.
Roland Schatz <roland.schatz@oracle.com>
parents:
18264
diff
changeset
|
286 JavaConstant base = field.getDeclaringClass().getJavaClass(); |
18264
e28aa8468d5e
converted HotSpotResolvedJavaField to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
287 return ConstantNode.forConstant(base, metaAccess, graph); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
288 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
289 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
290 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
291 protected ValueNode implicitStoreConvert(StructuredGraph graph, Kind kind, ValueNode value, boolean compressible) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
292 if (kind == Kind.Object && compressible && runtime.getConfig().useCompressedOops) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
293 return CompressionNode.compress(value, runtime.getConfig().getOopEncoding()); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
294 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
295 return super.implicitStoreConvert(graph, kind, value, compressible); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
296 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
297 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
298 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
299 protected ValueNode createReadArrayComponentHub(StructuredGraph graph, ValueNode arrayHub, FixedNode anchor) { |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
300 LocationNode location = graph.unique(new ConstantLocationNode(OBJ_ARRAY_KLASS_ELEMENT_KLASS_LOCATION, runtime.getConfig().arrayClassElementOffset)); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
301 /* |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
302 * Anchor the read of the element klass to the cfg, because it is only valid when arrayClass |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
303 * is an object class, which might not be the case in other parts of the compiled method. |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
304 */ |
18993
480bd3b1adcd
Rename BeginNode => AbstractBeginNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18970
diff
changeset
|
305 return graph.unique(new FloatingReadNode(arrayHub, location, null, KlassPointerStamp.klassNonNull(), AbstractBeginNode.prevBegin(anchor))); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
306 } |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
307 |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
308 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
309 protected void lowerUnsafeLoadNode(UnsafeLoadNode load, LoweringTool tool) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
310 StructuredGraph graph = load.graph(); |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
311 if (load.getGuardingCondition() == null && !graph.getGuardsStage().allowsFloatingGuards() && addReadBarrier(load)) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
312 unsafeLoadSnippets.lower(load, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
313 } else { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
314 super.lowerUnsafeLoadNode(load, tool); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
315 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
316 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
317 |
18649
d138867d61c4
Remove getValueKind() from LocationNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
18596
diff
changeset
|
318 private static void lowerLoadMethodNode(LoadMethodNode loadMethodNode) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
319 StructuredGraph graph = loadMethodNode.graph(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
320 HotSpotResolvedJavaMethod method = (HotSpotResolvedJavaMethod) loadMethodNode.getMethod(); |
18649
d138867d61c4
Remove getValueKind() from LocationNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
18596
diff
changeset
|
321 ReadNode metaspaceMethod = createReadVirtualMethod(graph, loadMethodNode.getHub(), method, loadMethodNode.getReceiverType()); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
322 graph.replaceFixed(loadMethodNode, metaspaceMethod); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
323 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
324 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
325 private void lowerStoreHubNode(StoreHubNode storeHub, StructuredGraph graph) { |
18649
d138867d61c4
Remove getValueKind() from LocationNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
18596
diff
changeset
|
326 WriteNode hub = createWriteHub(graph, storeHub.getObject(), storeHub.getValue()); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
327 graph.replaceFixed(storeHub, hub); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
328 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
329 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
330 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
331 protected BarrierType fieldInitializationBarrier(Kind entryKind) { |
18544
7bbc9fc1e7f9
removed static accesses to HotSpotGraalRuntime from DefaultHotSpotLoweringProvider
Doug Simon <doug.simon@oracle.com>
parents:
18540
diff
changeset
|
332 return (entryKind == Kind.Object && !runtime.getConfig().useDeferredInitBarriers) ? BarrierType.IMPRECISE : BarrierType.NONE; |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
333 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
334 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
335 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
336 protected BarrierType arrayInitializationBarrier(Kind entryKind) { |
18544
7bbc9fc1e7f9
removed static accesses to HotSpotGraalRuntime from DefaultHotSpotLoweringProvider
Doug Simon <doug.simon@oracle.com>
parents:
18540
diff
changeset
|
337 return (entryKind == Kind.Object && !runtime.getConfig().useDeferredInitBarriers) ? BarrierType.PRECISE : BarrierType.NONE; |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
338 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
339 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
340 private void lowerOSRStartNode(OSRStartNode osrStart) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
341 StructuredGraph graph = osrStart.graph(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
342 if (graph.getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS) { |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
343 StartNode newStart = graph.add(new StartNode()); |
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
344 ParameterNode buffer = graph.unique(new ParameterNode(0, StampFactory.forKind(runtime.getTarget().wordKind))); |
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
345 ForeignCallNode migrationEnd = graph.add(new ForeignCallNode(foreignCalls, OSR_MIGRATION_END, buffer)); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
346 migrationEnd.setStateAfter(osrStart.stateAfter()); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
347 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
348 newStart.setNext(migrationEnd); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
349 FixedNode next = osrStart.next(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
350 osrStart.setNext(null); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
351 migrationEnd.setNext(next); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
352 graph.setStart(newStart); |
15437
a3f5b484b6b5
Add implicitLoad/StoreConvert functions to HotSpotLoweringProvider interface.
Roland Schatz <roland.schatz@oracle.com>
parents:
15436
diff
changeset
|
353 |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
354 // mirroring the calculations in c1_GraphBuilder.cpp (setup_osr_entry_block) |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
355 int localsOffset = (graph.method().getMaxLocals() - 1) * 8; |
19403
61d3cb8e1280
Add generic parameter to NodeClass. Change Graph#getNodes(Class) to Graph#getNodes(NodeClass).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19341
diff
changeset
|
356 for (OSRLocalNode osrLocal : graph.getNodes(OSRLocalNode.TYPE)) { |
18913
51680f58e681
Clean up in Kind class. Introduce Kind#getSlotCount and Kind#needsTwoSlots methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18845
diff
changeset
|
357 int size = osrLocal.getKind().getSlotCount(); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
358 int offset = localsOffset - (osrLocal.index() + size - 1) * 8; |
19845
3d0116ec99c5
Create utilities LocationIdentity#isAny, LocationIdentity#isSingle, LocationIdentity#any, LocationIdentity#overlaps.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19725
diff
changeset
|
359 IndexedLocationNode location = graph.unique(new IndexedLocationNode(any(), offset, ConstantNode.forLong(0, graph), 1)); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
360 ReadNode load = graph.add(new ReadNode(buffer, location, osrLocal.stamp(), BarrierType.NONE)); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
361 osrLocal.replaceAndDelete(load); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
362 graph.addBeforeFixed(migrationEnd, load); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
363 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
364 osrStart.replaceAtUsages(newStart); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
365 osrStart.safeDelete(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
366 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
367 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
368 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
369 static final class Exceptions { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
370 protected static final ArrayIndexOutOfBoundsException cachedArrayIndexOutOfBoundsException; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
371 protected static final NullPointerException cachedNullPointerException; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
372 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
373 static { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
374 cachedArrayIndexOutOfBoundsException = new ArrayIndexOutOfBoundsException(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
375 cachedArrayIndexOutOfBoundsException.setStackTrace(new StackTraceElement[0]); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
376 cachedNullPointerException = new NullPointerException(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
377 cachedNullPointerException.setStackTrace(new StackTraceElement[0]); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
378 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
379 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
380 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
381 public static final class RuntimeCalls { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
382 public static final ForeignCallDescriptor CREATE_NULL_POINTER_EXCEPTION = new ForeignCallDescriptor("createNullPointerException", NullPointerException.class); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
383 public static final ForeignCallDescriptor CREATE_OUT_OF_BOUNDS_EXCEPTION = new ForeignCallDescriptor("createOutOfBoundsException", ArrayIndexOutOfBoundsException.class, int.class); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
384 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
385 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
386 private void lowerBytecodeExceptionNode(BytecodeExceptionNode node) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
387 StructuredGraph graph = node.graph(); |
18970
edf3a7fdd067
Add utility methods to GuardsStage.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18914
diff
changeset
|
388 if (graph.getGuardsStage().allowsFloatingGuards()) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
389 if (OmitHotExceptionStacktrace.getValue()) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
390 Throwable exception; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
391 if (node.getExceptionClass() == NullPointerException.class) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
392 exception = Exceptions.cachedNullPointerException; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
393 } else if (node.getExceptionClass() == ArrayIndexOutOfBoundsException.class) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
394 exception = Exceptions.cachedArrayIndexOutOfBoundsException; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
395 } else { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
396 throw GraalInternalError.shouldNotReachHere(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
397 } |
18262
f7d45e2426d4
converted HotSpotObjectConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18232
diff
changeset
|
398 FloatingNode exceptionNode = ConstantNode.forConstant(HotSpotObjectConstantImpl.forObject(exception), metaAccess, graph); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
399 graph.replaceFixedWithFloating(node, exceptionNode); |
16166
d69ede72299a
Expose loadStamp method in HotSpotLoweringProvider interface.
Roland Schatz <roland.schatz@oracle.com>
parents:
15889
diff
changeset
|
400 |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
401 } else { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
402 ForeignCallDescriptor descriptor; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
403 if (node.getExceptionClass() == NullPointerException.class) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
404 descriptor = RuntimeCalls.CREATE_NULL_POINTER_EXCEPTION; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
405 } else if (node.getExceptionClass() == ArrayIndexOutOfBoundsException.class) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
406 descriptor = RuntimeCalls.CREATE_OUT_OF_BOUNDS_EXCEPTION; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
407 } else { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
408 throw GraalInternalError.shouldNotReachHere(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
409 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
410 |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
411 ForeignCallNode foreignCallNode = graph.add(new ForeignCallNode(foreignCalls, descriptor, node.stamp(), node.getArguments())); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
412 graph.replaceFixedWithFixed(node, foreignCallNode); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
413 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
414 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
415 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
416 |
18544
7bbc9fc1e7f9
removed static accesses to HotSpotGraalRuntime from DefaultHotSpotLoweringProvider
Doug Simon <doug.simon@oracle.com>
parents:
18540
diff
changeset
|
417 private boolean addReadBarrier(UnsafeLoadNode load) { |
7bbc9fc1e7f9
removed static accesses to HotSpotGraalRuntime from DefaultHotSpotLoweringProvider
Doug Simon <doug.simon@oracle.com>
parents:
18540
diff
changeset
|
418 if (runtime.getConfig().useG1GC && load.graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS && load.object().getKind() == Kind.Object && load.accessKind() == Kind.Object && |
18490
ca81508f2a19
Generalize NULL handling to work on arbitrary pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
18487
diff
changeset
|
419 !StampTool.isPointerAlwaysNull(load.object())) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
420 ResolvedJavaType type = StampTool.typeOrNull(load.object()); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
421 if (type != null && !type.isArray()) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
422 return true; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
423 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
424 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
425 return false; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
426 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
427 |
18649
d138867d61c4
Remove getValueKind() from LocationNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
18596
diff
changeset
|
428 private static ReadNode createReadVirtualMethod(StructuredGraph graph, ValueNode hub, HotSpotResolvedJavaMethod method, ResolvedJavaType receiverType) { |
d138867d61c4
Remove getValueKind() from LocationNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
18596
diff
changeset
|
429 return createReadVirtualMethod(graph, hub, method.vtableEntryOffset(receiverType)); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
430 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
431 |
18649
d138867d61c4
Remove getValueKind() from LocationNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
18596
diff
changeset
|
432 private static ReadNode createReadVirtualMethod(StructuredGraph graph, ValueNode hub, int vtableEntryOffset) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
433 assert vtableEntryOffset > 0; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
434 // We use LocationNode.ANY_LOCATION for the reads that access the vtable |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
435 // entry as HotSpot does not guarantee that this is a final value. |
18481
f91e40c4bb47
Create separate stamps for Klass* and Method*, and make them hotspot specific.
Roland Schatz <roland.schatz@oracle.com>
parents:
18362
diff
changeset
|
436 Stamp methodStamp = MethodPointerStamp.method(); |
19845
3d0116ec99c5
Create utilities LocationIdentity#isAny, LocationIdentity#isSingle, LocationIdentity#any, LocationIdentity#overlaps.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19725
diff
changeset
|
437 ReadNode metaspaceMethod = graph.add(new ReadNode(hub, graph.unique(new ConstantLocationNode(any(), vtableEntryOffset)), methodStamp, BarrierType.NONE)); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
438 return metaspaceMethod; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
439 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
440 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
441 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
442 protected ValueNode createReadHub(StructuredGraph graph, ValueNode object, GuardingNode guard) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
443 HotSpotVMConfig config = runtime.getConfig(); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
444 LocationNode location = graph.unique(new ConstantLocationNode(HUB_LOCATION, config.hubOffset)); |
18487
0f4813e0b4a9
Use asConstant() instead of asJavaConstant() where possible.
Roland Schatz <roland.schatz@oracle.com>
parents:
18481
diff
changeset
|
445 assert !object.isConstant() || object.isNullConstant(); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
446 |
18481
f91e40c4bb47
Create separate stamps for Klass* and Method*, and make them hotspot specific.
Roland Schatz <roland.schatz@oracle.com>
parents:
18362
diff
changeset
|
447 KlassPointerStamp hubStamp = KlassPointerStamp.klassNonNull(); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
448 if (config.useCompressedClassPointers) { |
18481
f91e40c4bb47
Create separate stamps for Klass* and Method*, and make them hotspot specific.
Roland Schatz <roland.schatz@oracle.com>
parents:
18362
diff
changeset
|
449 hubStamp = hubStamp.compressed(config.getKlassEncoding()); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
450 } |
15437
a3f5b484b6b5
Add implicitLoad/StoreConvert functions to HotSpotLoweringProvider interface.
Roland Schatz <roland.schatz@oracle.com>
parents:
15436
diff
changeset
|
451 |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
452 FloatingReadNode memoryRead = graph.unique(new FloatingReadNode(object, location, null, hubStamp, guard, BarrierType.NONE)); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
453 if (config.useCompressedClassPointers) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
454 return CompressionNode.uncompress(memoryRead, config.getKlassEncoding()); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
455 } else { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
456 return memoryRead; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
457 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
458 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
459 |
18649
d138867d61c4
Remove getValueKind() from LocationNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
18596
diff
changeset
|
460 private WriteNode createWriteHub(StructuredGraph graph, ValueNode object, ValueNode value) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
461 HotSpotVMConfig config = runtime.getConfig(); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
462 LocationNode location = graph.unique(new ConstantLocationNode(HUB_WRITE_LOCATION, config.hubOffset)); |
18487
0f4813e0b4a9
Use asConstant() instead of asJavaConstant() where possible.
Roland Schatz <roland.schatz@oracle.com>
parents:
18481
diff
changeset
|
463 assert !object.isConstant() || object.isNullConstant(); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
464 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
465 ValueNode writeValue = value; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
466 if (config.useCompressedClassPointers) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
467 writeValue = CompressionNode.compress(value, config.getKlassEncoding()); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
468 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
469 |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18822
diff
changeset
|
470 return graph.add(new WriteNode(object, writeValue, location, BarrierType.NONE)); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
471 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
472 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
473 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
474 protected BarrierType fieldLoadBarrierType(ResolvedJavaField f) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
475 HotSpotResolvedJavaField loadField = (HotSpotResolvedJavaField) f; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
476 BarrierType barrierType = BarrierType.NONE; |
18544
7bbc9fc1e7f9
removed static accesses to HotSpotGraalRuntime from DefaultHotSpotLoweringProvider
Doug Simon <doug.simon@oracle.com>
parents:
18540
diff
changeset
|
477 if (runtime.getConfig().useG1GC && loadField.getKind() == Kind.Object && metaAccess.lookupJavaType(Reference.class).equals(loadField.getDeclaringClass()) && |
7bbc9fc1e7f9
removed static accesses to HotSpotGraalRuntime from DefaultHotSpotLoweringProvider
Doug Simon <doug.simon@oracle.com>
parents:
18540
diff
changeset
|
478 loadField.getName().equals("referent")) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
479 barrierType = BarrierType.PRECISE; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
480 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
481 return barrierType; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
482 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
483 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
484 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
485 protected int fieldOffset(ResolvedJavaField f) { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
486 HotSpotResolvedJavaField field = (HotSpotResolvedJavaField) f; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
487 return field.offset(); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
488 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
489 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
490 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
491 public int arrayScalingFactor(Kind kind) { |
18544
7bbc9fc1e7f9
removed static accesses to HotSpotGraalRuntime from DefaultHotSpotLoweringProvider
Doug Simon <doug.simon@oracle.com>
parents:
18540
diff
changeset
|
492 if (runtime.getConfig().useCompressedOops && kind == Kind.Object) { |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
493 return this.runtime.getTarget().getSizeInBytes(Kind.Int); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
494 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
495 return super.arrayScalingFactor(kind); |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
496 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
497 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
498 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
499 protected int arrayBaseOffset(Kind kind) { |
18515
8b87897f5b42
introduced HotSpotGraalRuntimeProvder interface
Doug Simon <doug.simon@oracle.com>
parents:
18502
diff
changeset
|
500 return runtime.getArrayBaseOffset(kind); |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
501 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
502 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
503 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
504 protected int arrayLengthOffset() { |
18544
7bbc9fc1e7f9
removed static accesses to HotSpotGraalRuntime from DefaultHotSpotLoweringProvider
Doug Simon <doug.simon@oracle.com>
parents:
18540
diff
changeset
|
505 return runtime.getConfig().arrayLengthOffset; |
16328
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
506 } |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
507 |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
508 @Override |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
509 protected LocationIdentity initLocationIdentity() { |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
510 return INIT_LOCATION; |
34ac3ddfd5ac
[SPARC] fixing findbug warnings
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16166
diff
changeset
|
511 } |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
512 } |