Mercurial > hg > truffle
annotate graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java @ 19535:97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Sun, 22 Feb 2015 15:19:54 +0100 |
parents | 9525e4d5b385 |
children | 2c3ea61e8b65 |
rev | line source |
---|---|
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
1 /* |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
2 * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
4 * |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
8 * |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
14 * |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
18 * |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
21 * questions. |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
22 */ |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.java; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
24 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
25 import static com.oracle.graal.graph.iterators.NodePredicates.*; |
16841
cbd42807a31f
moved NodeInfo and friends into separate com.oracle.graal.nodeinfo project so that annotation processor can be applied to the base Node class
Doug Simon <doug.simon@oracle.com>
parents:
15558
diff
changeset
|
26 |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
27 import java.util.*; |
18922
fede93375dcb
Initial version of inlining during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18921
diff
changeset
|
28 import java.util.function.*; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
29 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
30 import com.oracle.graal.api.code.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
31 import com.oracle.graal.api.meta.*; |
15198
2c0cfbf454b5
Move LIRTypeTool and Stamp to graal.compiler.common.
Josef Eisl <josef.eisl@jku.at>
parents:
15145
diff
changeset
|
32 import com.oracle.graal.compiler.common.type.*; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
33 import com.oracle.graal.debug.*; |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
34 import com.oracle.graal.java.BciBlockMapping.*; |
19390
7f4201b633e7
renamed GraphBuilderPlugins to InvocationPlugins and consolidated it into GraphBuilderConfiguration; moved declaration of GraphBuilderPlugin sub-interfaces into GraphBuilderPlugin
Doug Simon <doug.simon@oracle.com>
parents:
19386
diff
changeset
|
35 import com.oracle.graal.java.GraphBuilderPlugin.ParameterPlugin; |
16841
cbd42807a31f
moved NodeInfo and friends into separate com.oracle.graal.nodeinfo project so that annotation processor can be applied to the base Node class
Doug Simon <doug.simon@oracle.com>
parents:
15558
diff
changeset
|
36 import com.oracle.graal.nodeinfo.*; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
37 import com.oracle.graal.nodes.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
38 import com.oracle.graal.nodes.calc.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
39 import com.oracle.graal.nodes.java.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
40 import com.oracle.graal.nodes.util.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
41 |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
42 public final class HIRFrameStateBuilder { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
43 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
44 private static final ValueNode[] EMPTY_ARRAY = new ValueNode[0]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
45 private static final MonitorIdNode[] EMPTY_MONITOR_ARRAY = new MonitorIdNode[0]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
46 |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
47 protected final ResolvedJavaMethod method; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
48 protected int stackSize; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
49 protected final ValueNode[] locals; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
50 protected final ValueNode[] stack; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
51 protected ValueNode[] lockedObjects; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
52 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
53 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
54 * Specifies if asserting type checks are enabled. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
55 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
56 protected final boolean checkTypes; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
57 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
58 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
59 * @see BytecodeFrame#rethrowException |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
60 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
61 protected boolean rethrowException; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
62 |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
63 private MonitorIdNode[] monitorIds; |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
64 private final StructuredGraph graph; |
18922
fede93375dcb
Initial version of inlining during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18921
diff
changeset
|
65 private final Supplier<FrameState> outerFrameStateSupplier; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
66 |
18918
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
67 /** |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
68 * Creates a new frame state builder for the given method and the given target graph. |
18921
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
69 * |
18918
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
70 * @param method the method whose frame is simulated |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
71 * @param graph the target graph of Graal nodes created by the builder |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
72 */ |
19496
9525e4d5b385
disable (asserting) type checks in the FrameStateBuilder when parsing a replacement
Doug Simon <doug.simon@oracle.com>
parents:
19479
diff
changeset
|
73 public HIRFrameStateBuilder(ResolvedJavaMethod method, StructuredGraph graph, boolean checkTypes, Supplier<FrameState> outerFrameStateSupplier) { |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
74 this.method = method; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
75 this.locals = allocateArray(method.getMaxLocals()); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
76 this.stack = allocateArray(Math.max(1, method.getMaxStackSize())); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
77 this.lockedObjects = allocateArray(0); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
78 this.checkTypes = checkTypes; |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
79 |
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
80 assert graph != null; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
81 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
82 this.monitorIds = EMPTY_MONITOR_ARRAY; |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
83 this.graph = graph; |
18922
fede93375dcb
Initial version of inlining during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18921
diff
changeset
|
84 this.outerFrameStateSupplier = outerFrameStateSupplier; |
18918
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
85 } |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
86 |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
87 public void initializeFromArgumentsArray(ValueNode[] arguments) { |
18921
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
88 |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
89 int javaIndex = 0; |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
90 int index = 0; |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
91 if (!method.isStatic()) { |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
92 // set the receiver |
19386
664b396dbe64
Do not use store local in HIRFrameStateBuilder as a simple write to the local array is sufficient.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19175
diff
changeset
|
93 locals[javaIndex] = arguments[index]; |
18921
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
94 javaIndex = 1; |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
95 index = 1; |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
96 } |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
97 Signature sig = method.getSignature(); |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
98 int max = sig.getParameterCount(false); |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
99 for (int i = 0; i < max; i++) { |
19386
664b396dbe64
Do not use store local in HIRFrameStateBuilder as a simple write to the local array is sufficient.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19175
diff
changeset
|
100 locals[javaIndex] = arguments[index]; |
18921
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
101 javaIndex += arguments[index].getKind().getSlotCount(); |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
102 index++; |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
103 } |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
104 } |
13e43d2a413e
Initialize frame state builder created for parse time inlining correctly.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18918
diff
changeset
|
105 |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
106 public void initializeForMethodStart(boolean eagerResolve, ParameterPlugin parameterPlugin) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
107 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
108 int javaIndex = 0; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
109 int index = 0; |
15311
820c6d353358
added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents:
15261
diff
changeset
|
110 if (!method.isStatic()) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
111 // add the receiver |
19112
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
112 FloatingNode receiver = null; |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
113 if (parameterPlugin != null) { |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
114 receiver = parameterPlugin.interceptParameter(index); |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
115 } |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
116 if (receiver == null) { |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
117 receiver = new ParameterNode(javaIndex, StampFactory.declaredNonNull(method.getDeclaringClass())); |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
118 } |
19386
664b396dbe64
Do not use store local in HIRFrameStateBuilder as a simple write to the local array is sufficient.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19175
diff
changeset
|
119 locals[javaIndex] = graph.unique(receiver); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
120 javaIndex = 1; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
121 index = 1; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
122 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
123 Signature sig = method.getSignature(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
124 int max = sig.getParameterCount(false); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
125 ResolvedJavaType accessingClass = method.getDeclaringClass(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
126 for (int i = 0; i < max; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
127 JavaType type = sig.getParameterType(i, accessingClass); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
128 if (eagerResolve) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
129 type = type.resolve(accessingClass); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
130 } |
15022
bceb077143ae
Preserve value range in stamp of ParameterNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
14978
diff
changeset
|
131 Kind kind = type.getKind(); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
132 Stamp stamp; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
133 if (kind == Kind.Object && type instanceof ResolvedJavaType) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
134 stamp = StampFactory.declared((ResolvedJavaType) type); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
135 } else { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
136 stamp = StampFactory.forKind(kind); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
137 } |
19112
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
138 FloatingNode param = null; |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
139 if (parameterPlugin != null) { |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
140 param = parameterPlugin.interceptParameter(index); |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
141 } |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
142 if (param == null) { |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
143 param = new ParameterNode(index, stamp); |
c2019f6e821b
Draft for ParameterPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18995
diff
changeset
|
144 } |
19386
664b396dbe64
Do not use store local in HIRFrameStateBuilder as a simple write to the local array is sufficient.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19175
diff
changeset
|
145 locals[javaIndex] = graph.unique(param); |
18913
51680f58e681
Clean up in Kind class. Introduce Kind#getSlotCount and Kind#needsTwoSlots methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18845
diff
changeset
|
146 javaIndex += kind.getSlotCount(); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
147 index++; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
148 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
149 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
150 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
151 private HIRFrameStateBuilder(HIRFrameStateBuilder other) { |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
152 this.method = other.method; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
153 this.stackSize = other.stackSize; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
154 this.locals = other.locals.clone(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
155 this.stack = other.stack.clone(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
156 this.lockedObjects = other.lockedObjects.length == 0 ? other.lockedObjects : other.lockedObjects.clone(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
157 this.rethrowException = other.rethrowException; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
158 this.checkTypes = other.checkTypes; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
159 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
160 assert locals.length == method.getMaxLocals(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
161 assert stack.length == Math.max(1, method.getMaxStackSize()); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
162 |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
163 assert other.graph != null; |
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
164 graph = other.graph; |
18374
8971259db8ed
Eliminated the need for Signature.getParameterSlots()
Christian Wimmer <christian.wimmer@oracle.com>
parents:
18230
diff
changeset
|
165 monitorIds = other.monitorIds.length == 0 ? other.monitorIds : other.monitorIds.clone(); |
18922
fede93375dcb
Initial version of inlining during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18921
diff
changeset
|
166 this.outerFrameStateSupplier = other.outerFrameStateSupplier; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
167 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
168 assert locals.length == method.getMaxLocals(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
169 assert stack.length == Math.max(1, method.getMaxStackSize()); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
170 assert lockedObjects.length == monitorIds.length; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
171 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
172 |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
173 private static ValueNode[] allocateArray(int length) { |
18374
8971259db8ed
Eliminated the need for Signature.getParameterSlots()
Christian Wimmer <christian.wimmer@oracle.com>
parents:
18230
diff
changeset
|
174 return length == 0 ? EMPTY_ARRAY : new ValueNode[length]; |
15031
14e542e27076
Lift implementation from HIRFrameStateBuilder up to AbstractFrameStateBuilder if possible.
Josef Eisl <josef.eisl@jku.at>
parents:
15022
diff
changeset
|
175 } |
14e542e27076
Lift implementation from HIRFrameStateBuilder up to AbstractFrameStateBuilder if possible.
Josef Eisl <josef.eisl@jku.at>
parents:
15022
diff
changeset
|
176 |
14e542e27076
Lift implementation from HIRFrameStateBuilder up to AbstractFrameStateBuilder if possible.
Josef Eisl <josef.eisl@jku.at>
parents:
15022
diff
changeset
|
177 @Override |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
178 public String toString() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
179 StringBuilder sb = new StringBuilder(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
180 sb.append("[locals: ["); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
181 for (int i = 0; i < locals.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
182 sb.append(i == 0 ? "" : ",").append(locals[i] == null ? "_" : locals[i].toString(Verbosity.Id)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
183 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
184 sb.append("] stack: ["); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
185 for (int i = 0; i < stackSize; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
186 sb.append(i == 0 ? "" : ",").append(stack[i] == null ? "_" : stack[i].toString(Verbosity.Id)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
187 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
188 sb.append("] locks: ["); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
189 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
190 sb.append(i == 0 ? "" : ",").append(lockedObjects[i].toString(Verbosity.Id)).append(" / ").append(monitorIds[i].toString(Verbosity.Id)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
191 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
192 sb.append("]"); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
193 if (rethrowException) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
194 sb.append(" rethrowException"); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
195 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
196 sb.append("]"); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
197 return sb.toString(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
198 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
199 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
200 public FrameState create(int bci) { |
18927
8da21b779982
Initialize FrameState with less copying.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18923
diff
changeset
|
201 FrameState outerFrameState = null; |
8da21b779982
Initialize FrameState with less copying.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18923
diff
changeset
|
202 if (outerFrameStateSupplier != null) { |
8da21b779982
Initialize FrameState with less copying.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18923
diff
changeset
|
203 outerFrameState = outerFrameStateSupplier.get(); |
8da21b779982
Initialize FrameState with less copying.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18923
diff
changeset
|
204 } |
18934
f7c940b59147
Avoid double copy of monitorIds list.
Roland Schatz <roland.schatz@oracle.com>
parents:
18927
diff
changeset
|
205 return graph.add(new FrameState(outerFrameState, method, bci, locals, stack, stackSize, lockedObjects, Arrays.asList(monitorIds), rethrowException, false)); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
206 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
207 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
208 public HIRFrameStateBuilder copy() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
209 return new HIRFrameStateBuilder(this); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
210 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
211 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
212 public boolean isCompatibleWith(HIRFrameStateBuilder other) { |
14803 | 213 assert method.equals(other.method) && graph == other.graph && localsSize() == other.localsSize() : "Can only compare frame states of the same method"; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
214 assert lockedObjects.length == monitorIds.length && other.lockedObjects.length == other.monitorIds.length : "mismatch between lockedObjects and monitorIds"; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
215 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
216 if (stackSize() != other.stackSize()) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
217 return false; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
218 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
219 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
220 ValueNode x = stackAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
221 ValueNode y = other.stackAt(i); |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
222 if (x != y && (x == null || x.isDeleted() || y == null || y.isDeleted() || x.getKind() != y.getKind())) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
223 return false; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
224 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
225 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
226 if (lockedObjects.length != other.lockedObjects.length) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
227 return false; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
228 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
229 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
230 if (GraphUtil.originalValue(lockedObjects[i]) != GraphUtil.originalValue(other.lockedObjects[i]) || monitorIds[i] != other.monitorIds[i]) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
231 throw new BailoutException("unbalanced monitors"); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
232 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
233 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
234 return true; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
235 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
236 |
18995
a2cb19764970
Rename MergeNode to AbstractMergeNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18993
diff
changeset
|
237 public void merge(AbstractMergeNode block, HIRFrameStateBuilder other) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
238 assert isCompatibleWith(other); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
239 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
240 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
241 storeLocal(i, merge(localAt(i), other.localAt(i), block)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
242 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
243 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
244 storeStack(i, merge(stackAt(i), other.stackAt(i), block)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
245 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
246 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
247 lockedObjects[i] = merge(lockedObjects[i], other.lockedObjects[i], block); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
248 assert monitorIds[i] == other.monitorIds[i]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
249 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
250 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
251 |
18995
a2cb19764970
Rename MergeNode to AbstractMergeNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18993
diff
changeset
|
252 private ValueNode merge(ValueNode currentValue, ValueNode otherValue, AbstractMergeNode block) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
253 if (currentValue == null || currentValue.isDeleted()) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
254 return null; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
255 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
256 } else if (block.isPhiAtMerge(currentValue)) { |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
257 if (otherValue == null || otherValue.isDeleted() || currentValue.getKind() != otherValue.getKind()) { |
14978
e302df8bf51c
separate subclasses for value and guard phis and proxies
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14827
diff
changeset
|
258 propagateDelete((ValuePhiNode) currentValue); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
259 return null; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
260 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
261 ((PhiNode) currentValue).addInput(otherValue); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
262 return currentValue; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
263 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
264 } else if (currentValue != otherValue) { |
19173
396ca3a22ee8
Perform analysis for locals changed in the loop and avoid creating phis for loop invariant locals.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19112
diff
changeset
|
265 assert !(block instanceof LoopBeginNode) : "Phi functions for loop headers are create eagerly for changed locals and all stack slots"; |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
266 if (otherValue == null || otherValue.isDeleted() || currentValue.getKind() != otherValue.getKind()) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
267 return null; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
268 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
269 |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18374
diff
changeset
|
270 ValuePhiNode phi = graph.addWithoutUnique(new ValuePhiNode(currentValue.stamp().unrestricted(), block)); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
271 for (int i = 0; i < block.phiPredecessorCount(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
272 phi.addInput(currentValue); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
273 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
274 phi.addInput(otherValue); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
275 assert phi.valueCount() == block.phiPredecessorCount() + 1 : "valueCount=" + phi.valueCount() + " predSize= " + block.phiPredecessorCount(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
276 return phi; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
277 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
278 } else { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
279 return currentValue; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
280 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
281 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
282 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
283 private void propagateDelete(FloatingNode node) { |
14978
e302df8bf51c
separate subclasses for value and guard phis and proxies
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14827
diff
changeset
|
284 assert node instanceof ValuePhiNode || node instanceof ProxyNode; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
285 if (node.isDeleted()) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
286 return; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
287 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
288 // Collect all phi functions that use this phi so that we can delete them recursively (after |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
289 // we delete ourselves to avoid circles). |
14978
e302df8bf51c
separate subclasses for value and guard phis and proxies
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14827
diff
changeset
|
290 List<FloatingNode> propagateUsages = node.usages().filter(FloatingNode.class).filter(isA(ValuePhiNode.class).or(ProxyNode.class)).snapshot(); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
291 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
292 // Remove the phi function from all FrameStates where it is used and then delete it. |
14978
e302df8bf51c
separate subclasses for value and guard phis and proxies
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14827
diff
changeset
|
293 assert node.usages().filter(isNotA(FrameState.class).nor(ValuePhiNode.class).nor(ProxyNode.class)).isEmpty() : "phi function that gets deletes must only be used in frame states"; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
294 node.replaceAtUsages(null); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
295 node.safeDelete(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
296 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
297 for (FloatingNode phiUsage : propagateUsages) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
298 propagateDelete(phiUsage); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
299 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
300 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
301 |
19173
396ca3a22ee8
Perform analysis for locals changed in the loop and avoid creating phis for loop invariant locals.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19112
diff
changeset
|
302 public void insertLoopPhis(LocalLiveness liveness, int loopId, LoopBeginNode loopBegin) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
303 for (int i = 0; i < localsSize(); i++) { |
19175
4cee43cd1315
Avoid creating loop phis only for non-OSR graphs.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19173
diff
changeset
|
304 if (loopBegin.graph().isOSR() || liveness.localIsChangedInLoop(loopId, i)) { |
19173
396ca3a22ee8
Perform analysis for locals changed in the loop and avoid creating phis for loop invariant locals.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19112
diff
changeset
|
305 storeLocal(i, createLoopPhi(loopBegin, localAt(i))); |
396ca3a22ee8
Perform analysis for locals changed in the loop and avoid creating phis for loop invariant locals.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19112
diff
changeset
|
306 } |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
307 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
308 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
309 storeStack(i, createLoopPhi(loopBegin, stackAt(i))); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
310 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
311 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
312 lockedObjects[i] = createLoopPhi(loopBegin, lockedObjects[i]); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
313 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
314 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
315 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
316 public void insertLoopProxies(LoopExitNode loopExit, HIRFrameStateBuilder loopEntryState) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
317 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
318 ValueNode value = localAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
319 if (value != null && (!loopEntryState.contains(value) || loopExit.loopBegin().isPhiAtMerge(value))) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
320 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
321 storeLocal(i, ProxyNode.forValue(value, loopExit, graph)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
322 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
323 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
324 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
325 ValueNode value = stackAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
326 if (value != null && (!loopEntryState.contains(value) || loopExit.loopBegin().isPhiAtMerge(value))) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
327 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
328 storeStack(i, ProxyNode.forValue(value, loopExit, graph)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
329 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
330 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
331 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
332 ValueNode value = lockedObjects[i]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
333 if (value != null && (!loopEntryState.contains(value) || loopExit.loopBegin().isPhiAtMerge(value))) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
334 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
335 lockedObjects[i] = ProxyNode.forValue(value, loopExit, graph); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
336 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
337 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
338 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
339 |
18993
480bd3b1adcd
Rename BeginNode => AbstractBeginNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18934
diff
changeset
|
340 public void insertProxies(AbstractBeginNode begin) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
341 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
342 ValueNode value = localAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
343 if (value != null) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
344 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
345 storeLocal(i, ProxyNode.forValue(value, begin, graph)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
346 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
347 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
348 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
349 ValueNode value = stackAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
350 if (value != null) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
351 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
352 storeStack(i, ProxyNode.forValue(value, begin, graph)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
353 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
354 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
355 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
356 ValueNode value = lockedObjects[i]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
357 if (value != null) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
358 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
359 lockedObjects[i] = ProxyNode.forValue(value, begin, graph); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
360 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
361 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
362 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
363 |
18995
a2cb19764970
Rename MergeNode to AbstractMergeNode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18993
diff
changeset
|
364 private ValuePhiNode createLoopPhi(AbstractMergeNode block, ValueNode value) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
365 if (value == null) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
366 return null; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
367 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
368 assert !block.isPhiAtMerge(value) : "phi function for this block already created"; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
369 |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18374
diff
changeset
|
370 ValuePhiNode phi = graph.addWithoutUnique(new ValuePhiNode(value.stamp().unrestricted(), block)); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
371 phi.addInput(value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
372 return phi; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
373 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
374 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
375 /** |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
376 * Adds a locked monitor to this frame state. |
15022
bceb077143ae
Preserve value range in stamp of ParameterNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
14978
diff
changeset
|
377 * |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
378 * @param object the object whose monitor will be locked. |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
379 */ |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
380 public void pushLock(ValueNode object, MonitorIdNode monitorId) { |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
381 assert object.isAlive() && object.getKind() == Kind.Object : "unexpected value: " + object; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
382 lockedObjects = Arrays.copyOf(lockedObjects, lockedObjects.length + 1); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
383 monitorIds = Arrays.copyOf(monitorIds, monitorIds.length + 1); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
384 lockedObjects[lockedObjects.length - 1] = object; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
385 monitorIds[monitorIds.length - 1] = monitorId; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
386 assert lockedObjects.length == monitorIds.length; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
387 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
388 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
389 /** |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
390 * Removes a locked monitor from this frame state. |
15022
bceb077143ae
Preserve value range in stamp of ParameterNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
14978
diff
changeset
|
391 * |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
392 * @return the object whose monitor was removed from the locks list. |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
393 */ |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
394 public ValueNode popLock() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
395 try { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
396 return lockedObjects[lockedObjects.length - 1]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
397 } finally { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
398 lockedObjects = lockedObjects.length == 1 ? EMPTY_ARRAY : Arrays.copyOf(lockedObjects, lockedObjects.length - 1); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
399 monitorIds = monitorIds.length == 1 ? EMPTY_MONITOR_ARRAY : Arrays.copyOf(monitorIds, monitorIds.length - 1); |
15361
2682747f7108
Refactoring in InliningUtil.processFrameStates, add some bci/monitor related asserts
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15311
diff
changeset
|
400 assert lockedObjects.length == monitorIds.length; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
401 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
402 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
403 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
404 public MonitorIdNode peekMonitorId() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
405 return monitorIds[monitorIds.length - 1]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
406 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
407 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
408 /** |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
409 * @return the current lock depth |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
410 */ |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
411 public int lockDepth() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
412 assert lockedObjects.length == monitorIds.length; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
413 return lockedObjects.length; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
414 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
415 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
416 public boolean contains(ValueNode value) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
417 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
418 if (localAt(i) == value) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
419 return true; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
420 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
421 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
422 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
423 if (stackAt(i) == value) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
424 return true; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
425 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
426 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
427 assert lockedObjects.length == monitorIds.length; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
428 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
429 if (lockedObjects[i] == value || monitorIds[i] == value) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
430 return true; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
431 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
432 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
433 return false; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
434 } |
19535
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
435 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
436 public void clearNonLiveLocals(BciBlock block, LocalLiveness liveness, boolean liveIn) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
437 /* |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
438 * (lstadler) if somebody is tempted to remove/disable this clearing code: it's possible to |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
439 * remove it for normal compilations, but not for OSR compilations - otherwise dead object |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
440 * slots at the OSR entry aren't cleared. it is also not enough to rely on PiNodes with |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
441 * Kind.Illegal, because the conflicting branch might not have been parsed. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
442 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
443 if (liveness == null) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
444 return; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
445 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
446 if (liveIn) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
447 for (int i = 0; i < locals.length; i++) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
448 if (!liveness.localIsLiveIn(block, i)) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
449 locals[i] = null; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
450 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
451 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
452 } else { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
453 for (int i = 0; i < locals.length; i++) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
454 if (!liveness.localIsLiveOut(block, i)) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
455 locals[i] = null; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
456 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
457 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
458 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
459 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
460 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
461 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
462 * @see BytecodeFrame#rethrowException |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
463 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
464 public boolean rethrowException() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
465 return rethrowException; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
466 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
467 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
468 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
469 * @see BytecodeFrame#rethrowException |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
470 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
471 public void setRethrowException(boolean b) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
472 rethrowException = b; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
473 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
474 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
475 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
476 * Returns the size of the local variables. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
477 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
478 * @return the size of the local variables |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
479 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
480 public int localsSize() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
481 return locals.length; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
482 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
483 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
484 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
485 * Gets the current size (height) of the stack. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
486 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
487 public int stackSize() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
488 return stackSize; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
489 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
490 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
491 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
492 * Gets the value in the local variables at the specified index, without any sanity checking. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
493 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
494 * @param i the index into the locals |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
495 * @return the instruction that produced the value for the specified local |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
496 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
497 public ValueNode localAt(int i) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
498 return locals[i]; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
499 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
500 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
501 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
502 * Get the value on the stack at the specified stack index. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
503 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
504 * @param i the index into the stack, with {@code 0} being the bottom of the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
505 * @return the instruction at the specified position in the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
506 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
507 public ValueNode stackAt(int i) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
508 return stack[i]; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
509 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
510 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
511 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
512 * Gets the value in the lock at the specified index, without any sanity checking. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
513 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
514 * @param i the index into the lock |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
515 * @return the instruction that produced the value for the specified lock |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
516 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
517 public ValueNode lockAt(int i) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
518 return lockedObjects[i]; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
519 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
520 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
521 public void storeLock(int i, ValueNode lock) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
522 lockedObjects[i] = lock; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
523 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
524 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
525 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
526 * Loads the local variable at the specified index, checking that the returned value is non-null |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
527 * and that two-stack values are properly handled. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
528 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
529 * @param i the index of the local variable to load |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
530 * @return the instruction that produced the specified local |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
531 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
532 public ValueNode loadLocal(int i) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
533 ValueNode x = locals[i]; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
534 assert assertLoadLocal(i, x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
535 return x; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
536 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
537 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
538 private boolean assertLoadLocal(int i, ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
539 assert x != null : i; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
540 assert !checkTypes || (x.getKind().getSlotCount() == 1 || locals[i + 1] == null); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
541 assert !checkTypes || (i == 0 || locals[i - 1] == null || locals[i - 1].getKind().getSlotCount() == 1); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
542 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
543 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
544 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
545 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
546 * Stores a given local variable at the specified index. If the value occupies two slots, then |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
547 * the next local variable index is also overwritten. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
548 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
549 * @param i the index at which to store |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
550 * @param x the instruction which produces the value for the local |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
551 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
552 public void storeLocal(int i, ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
553 assert assertStoreLocal(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
554 locals[i] = x; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
555 if (x != null && x.getKind().needsTwoSlots()) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
556 // if this is a double word, then kill i+1 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
557 locals[i + 1] = null; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
558 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
559 if (x != null && i > 0) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
560 ValueNode p = locals[i - 1]; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
561 if (p != null && p.getKind().needsTwoSlots()) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
562 // if there was a double word at i - 1, then kill it |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
563 locals[i - 1] = null; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
564 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
565 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
566 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
567 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
568 private boolean assertStoreLocal(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
569 assert x == null || !checkTypes || (x.getKind() != Kind.Void && x.getKind() != Kind.Illegal) : "unexpected value: " + x; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
570 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
571 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
572 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
573 public void storeStack(int i, ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
574 assert assertStoreStack(i, x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
575 stack[i] = x; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
576 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
577 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
578 private boolean assertStoreStack(int i, ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
579 assert x == null || (stack[i] == null || x.getKind() == stack[i].getKind()) : "Method does not handle changes from one-slot to two-slot values or non-alive values"; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
580 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
581 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
582 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
583 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
584 * Pushes an instruction onto the stack with the expected type. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
585 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
586 * @param kind the type expected for this instruction |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
587 * @param x the instruction to push onto the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
588 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
589 public void push(Kind kind, ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
590 assert assertPush(kind, x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
591 xpush(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
592 if (kind.needsTwoSlots()) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
593 xpush(null); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
594 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
595 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
596 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
597 private boolean assertPush(Kind kind, ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
598 assert !checkTypes || (x.getKind() != Kind.Void && x.getKind() != Kind.Illegal); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
599 assert x != null && (!checkTypes || x.getKind() == kind); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
600 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
601 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
602 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
603 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
604 * Pushes a value onto the stack without checking the type. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
605 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
606 * @param x the instruction to push onto the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
607 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
608 public void xpush(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
609 assert assertXpush(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
610 stack[stackSize++] = x; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
611 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
612 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
613 private boolean assertXpush(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
614 assert !checkTypes || (x == null || (x.getKind() != Kind.Void && x.getKind() != Kind.Illegal)); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
615 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
616 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
617 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
618 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
619 * Pushes a value onto the stack and checks that it is an int. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
620 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
621 * @param x the instruction to push onto the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
622 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
623 public void ipush(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
624 assert assertInt(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
625 xpush(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
626 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
627 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
628 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
629 * Pushes a value onto the stack and checks that it is a float. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
630 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
631 * @param x the instruction to push onto the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
632 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
633 public void fpush(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
634 assert assertFloat(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
635 xpush(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
636 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
637 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
638 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
639 * Pushes a value onto the stack and checks that it is an object. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
640 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
641 * @param x the instruction to push onto the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
642 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
643 public void apush(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
644 assert assertObject(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
645 xpush(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
646 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
647 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
648 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
649 * Pushes a value onto the stack and checks that it is a long. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
650 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
651 * @param x the instruction to push onto the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
652 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
653 public void lpush(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
654 assert assertLong(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
655 xpush(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
656 xpush(null); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
657 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
658 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
659 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
660 * Pushes a value onto the stack and checks that it is a double. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
661 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
662 * @param x the instruction to push onto the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
663 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
664 public void dpush(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
665 assert assertDouble(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
666 xpush(x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
667 xpush(null); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
668 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
669 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
670 public void pushReturn(Kind kind, ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
671 if (kind != Kind.Void) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
672 push(kind.getStackKind(), x); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
673 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
674 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
675 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
676 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
677 * Pops an instruction off the stack with the expected type. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
678 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
679 * @param kind the expected type |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
680 * @return the instruction on the top of the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
681 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
682 public ValueNode pop(Kind kind) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
683 if (kind.needsTwoSlots()) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
684 xpop(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
685 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
686 assert assertPop(kind); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
687 return xpop(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
688 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
689 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
690 private boolean assertPop(Kind kind) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
691 assert kind != Kind.Void; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
692 ValueNode x = xpeek(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
693 assert x != null && (!checkTypes || x.getKind() == kind); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
694 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
695 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
696 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
697 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
698 * Pops a value off of the stack without checking the type. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
699 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
700 * @return x the instruction popped off the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
701 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
702 public ValueNode xpop() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
703 return stack[--stackSize]; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
704 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
705 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
706 private ValueNode xpeek() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
707 return stack[stackSize - 1]; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
708 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
709 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
710 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
711 * Pops a value off of the stack and checks that it is an int. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
712 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
713 * @return x the instruction popped off the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
714 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
715 public ValueNode ipop() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
716 assert assertIntPeek(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
717 return xpop(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
718 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
719 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
720 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
721 * Pops a value off of the stack and checks that it is a float. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
722 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
723 * @return x the instruction popped off the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
724 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
725 public ValueNode fpop() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
726 assert assertFloatPeek(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
727 return xpop(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
728 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
729 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
730 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
731 * Pops a value off of the stack and checks that it is an object. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
732 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
733 * @return x the instruction popped off the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
734 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
735 public ValueNode apop() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
736 assert assertObjectPeek(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
737 return xpop(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
738 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
739 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
740 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
741 * Pops a value off of the stack and checks that it is a long. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
742 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
743 * @return x the instruction popped off the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
744 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
745 public ValueNode lpop() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
746 assert assertHighPeek(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
747 xpop(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
748 assert assertLongPeek(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
749 return xpop(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
750 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
751 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
752 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
753 * Pops a value off of the stack and checks that it is a double. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
754 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
755 * @return x the instruction popped off the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
756 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
757 public ValueNode dpop() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
758 assert assertHighPeek(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
759 xpop(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
760 assert assertDoublePeek(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
761 return xpop(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
762 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
763 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
764 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
765 * Pop the specified number of slots off of this stack and return them as an array of |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
766 * instructions. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
767 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
768 * @return an array containing the arguments off of the stack |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
769 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
770 public ValueNode[] popArguments(int argSize) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
771 ValueNode[] result = allocateArray(argSize); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
772 int newStackSize = stackSize; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
773 for (int i = argSize - 1; i >= 0; i--) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
774 newStackSize--; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
775 if (stack[newStackSize] == null) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
776 /* Two-slot value. */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
777 newStackSize--; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
778 assert stack[newStackSize].getKind().needsTwoSlots(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
779 } else { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
780 assert !checkTypes || (stack[newStackSize].getKind().getSlotCount() == 1); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
781 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
782 result[i] = stack[newStackSize]; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
783 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
784 stackSize = newStackSize; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
785 return result; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
786 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
787 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
788 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
789 * Peeks an element from the operand stack. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
790 * |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
791 * @param argumentNumber The number of the argument, relative from the top of the stack (0 = |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
792 * top). Long and double arguments only count as one argument, i.e., null-slots are |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
793 * ignored. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
794 * @return The peeked argument. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
795 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
796 public ValueNode peek(int argumentNumber) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
797 int idx = stackSize() - 1; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
798 for (int i = 0; i < argumentNumber; i++) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
799 if (stackAt(idx) == null) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
800 idx--; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
801 assert stackAt(idx).getKind().needsTwoSlots(); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
802 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
803 idx--; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
804 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
805 return stackAt(idx); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
806 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
807 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
808 /** |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
809 * Clears all values on this stack. |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
810 */ |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
811 public void clearStack() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
812 stackSize = 0; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
813 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
814 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
815 private boolean assertLongPeek() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
816 return assertLong(xpeek()); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
817 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
818 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
819 private static boolean assertLong(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
820 assert x != null && (x.getKind() == Kind.Long); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
821 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
822 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
823 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
824 private boolean assertIntPeek() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
825 return assertInt(xpeek()); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
826 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
827 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
828 private static boolean assertInt(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
829 assert x != null && (x.getKind() == Kind.Int); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
830 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
831 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
832 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
833 private boolean assertFloatPeek() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
834 return assertFloat(xpeek()); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
835 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
836 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
837 private static boolean assertFloat(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
838 assert x != null && (x.getKind() == Kind.Float); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
839 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
840 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
841 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
842 private boolean assertObjectPeek() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
843 return assertObject(xpeek()); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
844 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
845 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
846 private boolean assertObject(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
847 assert x != null && (!checkTypes || (x.getKind() == Kind.Object)); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
848 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
849 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
850 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
851 private boolean assertDoublePeek() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
852 return assertDouble(xpeek()); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
853 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
854 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
855 private static boolean assertDouble(ValueNode x) { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
856 assert x != null && (x.getKind() == Kind.Double); |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
857 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
858 } |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
859 |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
860 private boolean assertHighPeek() { |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
861 assert xpeek() == null; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
862 return true; |
97b35083d49d
Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
19496
diff
changeset
|
863 } |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
864 } |