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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
Josef Eisl <josef.eisl@jku.at>
parents: 14793
diff changeset
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 }