Mercurial > hg > truffle
annotate graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java @ 18918:e8fd0342d9c4
GraphBuilder simplifications.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Wed, 21 Jan 2015 11:55:37 +0100 |
parents | 51680f58e681 |
children | 13e43d2a413e |
rev | line source |
---|---|
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
1 /* |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. |
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.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
28 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
29 import com.oracle.graal.api.code.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
30 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
|
31 import com.oracle.graal.compiler.common.type.*; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
32 import com.oracle.graal.debug.*; |
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
|
33 import com.oracle.graal.nodeinfo.*; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
34 import com.oracle.graal.nodes.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
35 import com.oracle.graal.nodes.calc.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
36 import com.oracle.graal.nodes.java.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
37 import com.oracle.graal.nodes.util.*; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
38 |
15031
14e542e27076
Lift implementation from HIRFrameStateBuilder up to AbstractFrameStateBuilder if possible.
Josef Eisl <josef.eisl@jku.at>
parents:
15022
diff
changeset
|
39 public class HIRFrameStateBuilder extends AbstractFrameStateBuilder<ValueNode, HIRFrameStateBuilder> { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
40 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
41 private static final ValueNode[] EMPTY_ARRAY = new ValueNode[0]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
42 private static final MonitorIdNode[] EMPTY_MONITOR_ARRAY = new MonitorIdNode[0]; |
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 MonitorIdNode[] monitorIds; |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
45 private final StructuredGraph graph; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
46 |
18918
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
47 /** |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
48 * Creates a new frame state builder for the given method and the given target graph. |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
49 * |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
50 * @param method the method whose frame is simulated |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
51 * @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
|
52 */ |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
53 public HIRFrameStateBuilder(ResolvedJavaMethod method, StructuredGraph graph) { |
18374
8971259db8ed
Eliminated the need for Signature.getParameterSlots()
Christian Wimmer <christian.wimmer@oracle.com>
parents:
18230
diff
changeset
|
54 super(method); |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
55 |
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
56 assert graph != null; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
57 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
58 this.monitorIds = EMPTY_MONITOR_ARRAY; |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
59 this.graph = graph; |
18918
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
60 } |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
61 |
e8fd0342d9c4
GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18913
diff
changeset
|
62 public final void initializeForMethodStart(boolean eagerResolve) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
63 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
64 int javaIndex = 0; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
65 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
|
66 if (!method.isStatic()) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
67 // add the receiver |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18374
diff
changeset
|
68 ParameterNode receiver = graph.unique(new ParameterNode(javaIndex, StampFactory.declaredNonNull(method.getDeclaringClass()))); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
69 storeLocal(javaIndex, receiver); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
70 javaIndex = 1; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
71 index = 1; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
72 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
73 Signature sig = method.getSignature(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
74 int max = sig.getParameterCount(false); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
75 ResolvedJavaType accessingClass = method.getDeclaringClass(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
76 for (int i = 0; i < max; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
77 JavaType type = sig.getParameterType(i, accessingClass); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
78 if (eagerResolve) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
79 type = type.resolve(accessingClass); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
80 } |
15022
bceb077143ae
Preserve value range in stamp of ParameterNode.
Roland Schatz <roland.schatz@oracle.com>
parents:
14978
diff
changeset
|
81 Kind kind = type.getKind(); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
82 Stamp stamp; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
83 if (kind == Kind.Object && type instanceof ResolvedJavaType) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
84 stamp = StampFactory.declared((ResolvedJavaType) type); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
85 } else { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
86 stamp = StampFactory.forKind(kind); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
87 } |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18374
diff
changeset
|
88 ParameterNode param = graph.unique(new ParameterNode(index, stamp)); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
89 storeLocal(javaIndex, 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
|
90 javaIndex += kind.getSlotCount(); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
91 index++; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
92 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
93 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
94 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
95 private HIRFrameStateBuilder(HIRFrameStateBuilder other) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
96 super(other); |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
97 assert other.graph != null; |
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
98 graph = other.graph; |
18374
8971259db8ed
Eliminated the need for Signature.getParameterSlots()
Christian Wimmer <christian.wimmer@oracle.com>
parents:
18230
diff
changeset
|
99 monitorIds = other.monitorIds.length == 0 ? other.monitorIds : other.monitorIds.clone(); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
100 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
101 assert locals.length == method.getMaxLocals(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
102 assert stack.length == Math.max(1, method.getMaxStackSize()); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
103 assert lockedObjects.length == monitorIds.length; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
104 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
105 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
106 @Override |
18374
8971259db8ed
Eliminated the need for Signature.getParameterSlots()
Christian Wimmer <christian.wimmer@oracle.com>
parents:
18230
diff
changeset
|
107 protected ValueNode[] allocateArray(int length) { |
8971259db8ed
Eliminated the need for Signature.getParameterSlots()
Christian Wimmer <christian.wimmer@oracle.com>
parents:
18230
diff
changeset
|
108 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
|
109 } |
14e542e27076
Lift implementation from HIRFrameStateBuilder up to AbstractFrameStateBuilder if possible.
Josef Eisl <josef.eisl@jku.at>
parents:
15022
diff
changeset
|
110 |
14e542e27076
Lift implementation from HIRFrameStateBuilder up to AbstractFrameStateBuilder if possible.
Josef Eisl <josef.eisl@jku.at>
parents:
15022
diff
changeset
|
111 @Override |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
112 public String toString() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
113 StringBuilder sb = new StringBuilder(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
114 sb.append("[locals: ["); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
115 for (int i = 0; i < locals.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
116 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
|
117 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
118 sb.append("] stack: ["); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
119 for (int i = 0; i < stackSize; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
120 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
|
121 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
122 sb.append("] locks: ["); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
123 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
124 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
|
125 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
126 sb.append("]"); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
127 if (rethrowException) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
128 sb.append(" rethrowException"); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
129 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
130 sb.append("]"); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
131 return sb.toString(); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
132 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
133 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
134 public FrameState create(int bci) { |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18374
diff
changeset
|
135 return graph.add(new FrameState(method, bci, locals, Arrays.asList(stack).subList(0, stackSize), lockedObjects, monitorIds, rethrowException, false)); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
136 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
137 |
15031
14e542e27076
Lift implementation from HIRFrameStateBuilder up to AbstractFrameStateBuilder if possible.
Josef Eisl <josef.eisl@jku.at>
parents:
15022
diff
changeset
|
138 @Override |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
139 public HIRFrameStateBuilder copy() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
140 return new HIRFrameStateBuilder(this); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
141 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
142 |
15031
14e542e27076
Lift implementation from HIRFrameStateBuilder up to AbstractFrameStateBuilder if possible.
Josef Eisl <josef.eisl@jku.at>
parents:
15022
diff
changeset
|
143 @Override |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
144 public boolean isCompatibleWith(HIRFrameStateBuilder other) { |
14803 | 145 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
|
146 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
|
147 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
148 if (stackSize() != other.stackSize()) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
149 return false; |
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 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
152 ValueNode x = stackAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
153 ValueNode y = other.stackAt(i); |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
154 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
|
155 return false; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
156 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
157 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
158 if (lockedObjects.length != other.lockedObjects.length) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
159 return false; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
160 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
161 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
162 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
|
163 throw new BailoutException("unbalanced monitors"); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
164 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
165 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
166 return true; |
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 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
169 public void merge(MergeNode block, HIRFrameStateBuilder other) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
170 assert isCompatibleWith(other); |
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 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
173 storeLocal(i, merge(localAt(i), other.localAt(i), block)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
174 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
175 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
176 storeStack(i, merge(stackAt(i), other.stackAt(i), block)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
177 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
178 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
179 lockedObjects[i] = merge(lockedObjects[i], other.lockedObjects[i], block); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
180 assert monitorIds[i] == other.monitorIds[i]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
181 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
182 } |
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 private ValueNode merge(ValueNode currentValue, ValueNode otherValue, MergeNode block) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
185 if (currentValue == null || currentValue.isDeleted()) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
186 return null; |
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 } else if (block.isPhiAtMerge(currentValue)) { |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
189 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
|
190 propagateDelete((ValuePhiNode) currentValue); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
191 return null; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
192 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
193 ((PhiNode) currentValue).addInput(otherValue); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
194 return currentValue; |
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 } else if (currentValue != otherValue) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
197 assert !(block instanceof LoopBeginNode) : "Phi functions for loop headers are create eagerly for all locals and stack slots"; |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
198 if (otherValue == null || otherValue.isDeleted() || currentValue.getKind() != otherValue.getKind()) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
199 return null; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
200 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
201 |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18374
diff
changeset
|
202 ValuePhiNode phi = graph.addWithoutUnique(new ValuePhiNode(currentValue.stamp().unrestricted(), block)); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
203 for (int i = 0; i < block.phiPredecessorCount(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
204 phi.addInput(currentValue); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
205 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
206 phi.addInput(otherValue); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
207 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
|
208 return phi; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
209 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
210 } else { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
211 return currentValue; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
212 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
213 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
214 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
215 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
|
216 assert node instanceof ValuePhiNode || node instanceof ProxyNode; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
217 if (node.isDeleted()) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
218 return; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
219 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
220 // 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
|
221 // 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
|
222 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
|
223 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
224 // 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
|
225 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
|
226 node.replaceAtUsages(null); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
227 node.safeDelete(); |
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 (FloatingNode phiUsage : propagateUsages) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
230 propagateDelete(phiUsage); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
231 } |
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 public void insertLoopPhis(LoopBeginNode loopBegin) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
235 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
236 storeLocal(i, createLoopPhi(loopBegin, localAt(i))); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
237 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
238 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
239 storeStack(i, createLoopPhi(loopBegin, stackAt(i))); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
240 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
241 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
242 lockedObjects[i] = createLoopPhi(loopBegin, lockedObjects[i]); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
243 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
244 } |
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 public void insertLoopProxies(LoopExitNode loopExit, HIRFrameStateBuilder loopEntryState) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
247 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
248 ValueNode value = localAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
249 if (value != null && (!loopEntryState.contains(value) || loopExit.loopBegin().isPhiAtMerge(value))) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
250 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
251 storeLocal(i, ProxyNode.forValue(value, loopExit, graph)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
252 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
253 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
254 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
255 ValueNode value = stackAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
256 if (value != null && (!loopEntryState.contains(value) || loopExit.loopBegin().isPhiAtMerge(value))) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
257 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
258 storeStack(i, ProxyNode.forValue(value, loopExit, graph)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
259 } |
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 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
262 ValueNode value = lockedObjects[i]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
263 if (value != null && (!loopEntryState.contains(value) || loopExit.loopBegin().isPhiAtMerge(value))) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
264 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
265 lockedObjects[i] = ProxyNode.forValue(value, loopExit, graph); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
266 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
267 } |
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 |
15145
df2ef5204f2b
Remove AbstractBeginNode, move the framestate from AbstractBeginNode to BeginStateSplitNode.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15032
diff
changeset
|
270 public void insertProxies(BeginNode begin) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
271 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
272 ValueNode value = localAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
273 if (value != null) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
274 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
275 storeLocal(i, ProxyNode.forValue(value, begin, graph)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
276 } |
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 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
279 ValueNode value = stackAt(i); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
280 if (value != null) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
281 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
282 storeStack(i, ProxyNode.forValue(value, begin, graph)); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
283 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
284 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
285 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
286 ValueNode value = lockedObjects[i]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
287 if (value != null) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
288 Debug.log(" inserting proxy for %s", value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
289 lockedObjects[i] = ProxyNode.forValue(value, begin, graph); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
290 } |
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 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
293 |
14978
e302df8bf51c
separate subclasses for value and guard phis and proxies
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14827
diff
changeset
|
294 private ValuePhiNode createLoopPhi(MergeNode block, ValueNode value) { |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
295 if (value == null) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
296 return null; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
297 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
298 assert !block.isPhiAtMerge(value) : "phi function for this block already created"; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
299 |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
18374
diff
changeset
|
300 ValuePhiNode phi = graph.addWithoutUnique(new ValuePhiNode(value.stamp().unrestricted(), block)); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
301 phi.addInput(value); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
302 return phi; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
303 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
304 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
305 public void cleanupDeletedPhis() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
306 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
307 if (localAt(i) != null && localAt(i).isDeleted()) { |
14978
e302df8bf51c
separate subclasses for value and guard phis and proxies
Lukas Stadler <lukas.stadler@oracle.com>
parents:
14827
diff
changeset
|
308 assert localAt(i) instanceof ValuePhiNode || localAt(i) instanceof ProxyNode : "Only phi and value proxies can be deleted during parsing: " + localAt(i); |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
309 storeLocal(i, null); |
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 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
312 } |
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 * 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
|
316 * |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
317 * @param object the object whose monitor will be locked. |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
318 */ |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
319 public void pushLock(ValueNode object, MonitorIdNode monitorId) { |
14817
80147dac0d6e
LIRFrameStateBuilder added
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
14803
diff
changeset
|
320 assert object.isAlive() && object.getKind() == Kind.Object : "unexpected value: " + object; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
321 lockedObjects = Arrays.copyOf(lockedObjects, lockedObjects.length + 1); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
322 monitorIds = Arrays.copyOf(monitorIds, monitorIds.length + 1); |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
323 lockedObjects[lockedObjects.length - 1] = object; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
324 monitorIds[monitorIds.length - 1] = monitorId; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
325 assert lockedObjects.length == monitorIds.length; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
326 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
327 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
328 /** |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
329 * 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
|
330 * |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
331 * @return the object whose monitor was removed from the locks list. |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
332 */ |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
333 public ValueNode popLock() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
334 try { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
335 return lockedObjects[lockedObjects.length - 1]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
336 } finally { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
337 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
|
338 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
|
339 assert lockedObjects.length == monitorIds.length; |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
340 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
341 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
342 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
343 public MonitorIdNode peekMonitorId() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
344 return monitorIds[monitorIds.length - 1]; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
345 } |
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 * @return the current lock depth |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
349 */ |
15558
b8bb78808495
AbstractFrameStateBuilder enable access to locks.
Josef Eisl <josef.eisl@jku.at>
parents:
15361
diff
changeset
|
350 @Override |
14793
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
351 public int lockDepth() { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
352 assert lockedObjects.length == monitorIds.length; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
353 return lockedObjects.length; |
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 |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
356 public boolean contains(ValueNode value) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
357 for (int i = 0; i < localsSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
358 if (localAt(i) == value) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
359 return true; |
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 for (int i = 0; i < stackSize(); i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
363 if (stackAt(i) == value) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
364 return true; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
365 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
366 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
367 assert lockedObjects.length == monitorIds.length; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
368 for (int i = 0; i < lockedObjects.length; i++) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
369 if (lockedObjects[i] == value || monitorIds[i] == value) { |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
370 return true; |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
371 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
372 } |
c4e65d48887c
Added the HIRAbstractFrameStateBuilder
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff
changeset
|
373 return false; |
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 } |