annotate graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/MaterializeObjectNode.java @ 7007:94596bbec6f0

provide MetaAccessProvider to EscapeAnalyzable
author Lukas Stadler <lukas.stadler@jku.at>
date Tue, 20 Nov 2012 13:36:22 +0100
parents 51b6e594b0cd
children 742ec0f04559
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
1 /*
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
2 * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
4 *
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
7 * published by the Free Software Foundation.
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
8 *
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
13 * accompanied this code).
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
14 *
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
18 *
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
21 * questions.
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
22 */
6524
a206e077ffc8 rename packages in graal.virtual to match project name
Doug Simon <doug.simon@oracle.com>
parents: 6522
diff changeset
23 package com.oracle.graal.virtual.nodes;
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
24
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
25 import com.oracle.graal.api.meta.*;
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
26 import com.oracle.graal.graph.*;
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
27 import com.oracle.graal.nodes.*;
6411
c5afcc2ebd3d change of project structure: separate compiler and LIR, put EA into separate project
Lukas Stadler <lukas.stadler@jku.at>
parents: 6399
diff changeset
28 import com.oracle.graal.nodes.java.*;
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
29 import com.oracle.graal.nodes.spi.*;
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
30 import com.oracle.graal.nodes.type.*;
6524
a206e077ffc8 rename packages in graal.virtual to match project name
Doug Simon <doug.simon@oracle.com>
parents: 6522
diff changeset
31 import com.oracle.graal.nodes.virtual.*;
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
32
6399
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
33 @NodeInfo(nameTemplate = "Materialize {i#virtualObject}")
6393
adf0879a41c1 more escape analysis infrastructure: change EscapeOp behavior, make MaterializeObjectNodes roots for escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6354
diff changeset
34 public final class MaterializeObjectNode extends FixedWithNextNode implements EscapeAnalyzable, Lowerable, Node.IterableNodeType, Canonicalizable {
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
35
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
36 @Input private final NodeInputList<ValueNode> values;
6394
466e6ceebfed iterative partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6393
diff changeset
37 @Input private final VirtualObjectNode virtualObject;
6666
49cd16dfb10c fix lock-related assertion in PEA
Lukas Stadler <lukas.stadler@jku.at>
parents: 6657
diff changeset
38 private final int lockCount;
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
39
6666
49cd16dfb10c fix lock-related assertion in PEA
Lukas Stadler <lukas.stadler@jku.at>
parents: 6657
diff changeset
40 public MaterializeObjectNode(VirtualObjectNode virtualObject, int lockCount) {
6399
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
41 super(StampFactory.exactNonNull(virtualObject.type()));
6394
466e6ceebfed iterative partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6393
diff changeset
42 this.virtualObject = virtualObject;
6666
49cd16dfb10c fix lock-related assertion in PEA
Lukas Stadler <lukas.stadler@jku.at>
parents: 6657
diff changeset
43 this.lockCount = lockCount;
6399
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
44 this.values = new NodeInputList<>(this, virtualObject.entryCount());
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
45 }
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
46
6354
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
47 public NodeInputList<ValueNode> values() {
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
48 return values;
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
49 }
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
50
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
51 @Override
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
52 public void lower(LoweringTool tool) {
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
53 StructuredGraph graph = (StructuredGraph) graph();
6399
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
54 if (virtualObject instanceof VirtualInstanceNode) {
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
55 VirtualInstanceNode virtual = (VirtualInstanceNode) virtualObject;
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
56
6666
49cd16dfb10c fix lock-related assertion in PEA
Lukas Stadler <lukas.stadler@jku.at>
parents: 6657
diff changeset
57 NewInstanceNode newInstance = graph.add(new NewInstanceNode(virtual.type(), false, lockCount > 0));
6399
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
58 this.replaceAtUsages(newInstance);
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
59 graph.addAfterFixed(this, newInstance);
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
60
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
61 FixedWithNextNode position = newInstance;
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
62 for (int i = 0; i < virtual.entryCount(); i++) {
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
63 StoreFieldNode store = graph.add(new StoreFieldNode(newInstance, virtual.field(i), values.get(i), -1));
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
64 graph.addAfterFixed(position, store);
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
65 position = store;
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
66 }
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
67
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
68 graph.removeFixed(this);
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
69 } else {
6399
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
70 assert virtualObject instanceof VirtualArrayNode;
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
71 VirtualArrayNode virtual = (VirtualArrayNode) virtualObject;
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
72
6399
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
73 ResolvedJavaType element = virtual.componentType();
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
74 NewArrayNode newArray;
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6524
diff changeset
75 if (element.getKind() == Kind.Object) {
6666
49cd16dfb10c fix lock-related assertion in PEA
Lukas Stadler <lukas.stadler@jku.at>
parents: 6657
diff changeset
76 newArray = graph.add(new NewObjectArrayNode(element, ConstantNode.forInt(virtual.entryCount(), graph), false, lockCount > 0));
6399
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
77 } else {
6666
49cd16dfb10c fix lock-related assertion in PEA
Lukas Stadler <lukas.stadler@jku.at>
parents: 6657
diff changeset
78 newArray = graph.add(new NewPrimitiveArrayNode(element, ConstantNode.forInt(virtual.entryCount(), graph), false, lockCount > 0));
6399
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
79 }
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
80 this.replaceAtUsages(newArray);
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
81 graph.addAfterFixed(this, newArray);
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
82
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
83 FixedWithNextNode position = newArray;
6ad5bf2efb5e cleanups, merge EscapeRecord and VirtualObjectNode
Lukas Stadler <lukas.stadler@jku.at>
parents: 6394
diff changeset
84 for (int i = 0; i < virtual.entryCount(); i++) {
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6524
diff changeset
85 StoreIndexedNode store = graph.add(new StoreIndexedNode(newArray, ConstantNode.forInt(i, graph), element.getKind(), values.get(i), -1));
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
86 graph.addAfterFixed(position, store);
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
87 position = store;
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
88 }
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
89
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
90 graph.removeFixed(this);
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
91 }
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
92 }
6354
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
93
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
94 @Override
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
95 public ValueNode canonical(CanonicalizerTool tool) {
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
96 if (usages().isEmpty()) {
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
97 return null;
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
98 } else {
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
99 return this;
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
100 }
6a324c13cfff add fillContents property to New... nodes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6290
diff changeset
101 }
6393
adf0879a41c1 more escape analysis infrastructure: change EscapeOp behavior, make MaterializeObjectNodes roots for escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6354
diff changeset
102
adf0879a41c1 more escape analysis infrastructure: change EscapeOp behavior, make MaterializeObjectNodes roots for escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6354
diff changeset
103 @Override
7007
94596bbec6f0 provide MetaAccessProvider to EscapeAnalyzable
Lukas Stadler <lukas.stadler@jku.at>
parents: 7006
diff changeset
104 public ObjectDesc[] getAllocations(long nextVirtualId, MetaAccessProvider metaAccess) {
7006
51b6e594b0cd refactor EscapeAnalyzeable (remove EscapeOp)
Lukas Stadler <lukas.stadler@jku.at>
parents: 6666
diff changeset
105 if (shouldRevirtualize(this)) {
51b6e594b0cd refactor EscapeAnalyzeable (remove EscapeOp)
Lukas Stadler <lukas.stadler@jku.at>
parents: 6666
diff changeset
106 return new ObjectDesc[] {new ObjectDesc(virtualObject, values.toArray(new ValueNode[values.size()]), lockCount)};
6657
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
107 }
7006
51b6e594b0cd refactor EscapeAnalyzeable (remove EscapeOp)
Lukas Stadler <lukas.stadler@jku.at>
parents: 6666
diff changeset
108 return null;
6393
adf0879a41c1 more escape analysis infrastructure: change EscapeOp behavior, make MaterializeObjectNodes roots for escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6354
diff changeset
109 }
6657
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
110
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
111 private boolean shouldRevirtualize(MaterializeObjectNode materializeObjectNode) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
112 FixedWithNextNode end = materializeObjectNode;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
113 do {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
114 Node next = end.next();
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
115 if (next instanceof MaterializeObjectNode) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
116 if (!shouldRevirtualize((MaterializeObjectNode) next)) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
117 return false;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
118 }
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
119 end = (FixedWithNextNode) next;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
120 } else if (next instanceof CyclicMaterializeStoreNode) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
121 end = (FixedWithNextNode) next;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
122 } else {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
123 break;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
124 }
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
125 } while (true);
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
126 FixedNode suffix = end.next();
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
127 if (suffix instanceof EndNode) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
128 for (PhiNode phi : ((EndNode) suffix).merge().phis()) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
129 int materialized = 0;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
130 boolean used = false;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
131 for (Node input : phi.inputs()) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
132 if (input instanceof MaterializeObjectNode) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
133 materialized++;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
134 }
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
135 if (input == materializeObjectNode) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
136 used = true;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
137 }
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
138 }
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
139 if (used && materialized != phi.valueCount()) {
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
140 return false;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
141 }
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
142 }
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
143 }
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
144
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
145 return true;
768793150bcd more PEA refactoring, multiple iterations
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
146 }
6286
67a357e3e42a infrastructure changes in preparation of partial escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff changeset
147 }