Mercurial > hg > graal-compiler
annotate graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java @ 22992:dd3f7ad81b73
Split com.oracle.graal.loop in 2 parts, Make LoopPolicies extensible
Moved the phases out of com.oracle.graal.loop into com.oracle.graal.loop.phases.
Made LoopPolicies an interface with a default implementation.
Pass a LoopPolicies instance to the different loop phases constructors.
Add abstract classes for loop phases to hold onto the loop polcies.
author | Gilles Duboscq <gilles.m.duboscq@oracle.com> |
---|---|
date | Fri, 13 Nov 2015 14:12:43 +0100 |
parents | 3e8357b49024 |
children | 1c5c04b9aaf1 |
rev | line source |
---|---|
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
1 /* |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
4 * |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
8 * |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
13 * accompanied this code). |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
14 * |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
18 * |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
21 * questions. |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
22 */ |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
23 package com.oracle.graal.hotspot.phases; |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
24 |
22646
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
25 import static com.oracle.graal.phases.common.DeadCodeEliminationPhase.Optionality.Required; |
22790
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22646
diff
changeset
|
26 import jdk.vm.ci.code.BailoutException; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22646
diff
changeset
|
27 import jdk.vm.ci.common.JVMCIError; |
22857
3e8357b49024
Update jvmci import: Rename Compiler to JVMCICompiler.
Roland Schatz <roland.schatz@oracle.com>
parents:
22790
diff
changeset
|
28 import jdk.vm.ci.runtime.JVMCICompiler; |
17065
37d6d174bc40
denote certain applications of DeadCodeEliminationPhase as optional and only run them if -G:-ReduceDCE
Doug Simon <doug.simon@oracle.com>
parents:
16895
diff
changeset
|
29 |
22646
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
30 import com.oracle.graal.debug.Debug; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
31 import com.oracle.graal.graph.Node; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
32 import com.oracle.graal.graph.iterators.NodeIterable; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
33 import com.oracle.graal.loop.LoopEx; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
34 import com.oracle.graal.loop.LoopsData; |
22992
dd3f7ad81b73
Split com.oracle.graal.loop in 2 parts, Make LoopPolicies extensible
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
22857
diff
changeset
|
35 import com.oracle.graal.loop.phases.LoopTransformations; |
22646
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
36 import com.oracle.graal.nodeinfo.InputType; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
37 import com.oracle.graal.nodeinfo.Verbosity; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
38 import com.oracle.graal.nodes.AbstractBeginNode; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
39 import com.oracle.graal.nodes.EntryMarkerNode; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
40 import com.oracle.graal.nodes.FixedNode; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
41 import com.oracle.graal.nodes.FrameState; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
42 import com.oracle.graal.nodes.ProxyNode; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
43 import com.oracle.graal.nodes.StartNode; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
44 import com.oracle.graal.nodes.StructuredGraph; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
45 import com.oracle.graal.nodes.ValueNode; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
46 import com.oracle.graal.nodes.extended.OSRLocalNode; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
47 import com.oracle.graal.nodes.extended.OSRStartNode; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
48 import com.oracle.graal.nodes.util.GraphUtil; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
49 import com.oracle.graal.phases.Phase; |
05183a084a08
updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents:
22300
diff
changeset
|
50 import com.oracle.graal.phases.common.DeadCodeEliminationPhase; |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
51 |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
52 public class OnStackReplacementPhase extends Phase { |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
53 |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
54 @Override |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
55 protected void run(StructuredGraph graph) { |
22857
3e8357b49024
Update jvmci import: Rename Compiler to JVMCICompiler.
Roland Schatz <roland.schatz@oracle.com>
parents:
22790
diff
changeset
|
56 if (graph.getEntryBCI() == JVMCICompiler.INVOCATION_ENTRY_BCI) { |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7300
diff
changeset
|
57 // This happens during inlining in a OSR method, because the same phase plan will be |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7300
diff
changeset
|
58 // used. |
6680
10a3d06d58dc
fix for unnecessary BailoutExceptions in OSR
Lukas Stadler <lukas.stadler@jku.at>
parents:
6677
diff
changeset
|
59 return; |
10a3d06d58dc
fix for unnecessary BailoutExceptions in OSR
Lukas Stadler <lukas.stadler@jku.at>
parents:
6677
diff
changeset
|
60 } |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
61 Debug.dump(graph, "OnStackReplacement initial"); |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
62 EntryMarkerNode osr; |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
63 do { |
19410
61d3cb8e1280
Add generic parameter to NodeClass. Change Graph#getNodes(Class) to Graph#getNodes(NodeClass).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18845
diff
changeset
|
64 NodeIterable<EntryMarkerNode> osrNodes = graph.getNodes(EntryMarkerNode.TYPE); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
65 osr = osrNodes.first(); |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
66 if (osr == null) { |
8462
149dee7367e0
Bailout from OSR compilation when there is more than on EntryMarkerNode
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
7897
diff
changeset
|
67 throw new BailoutException("No OnStackReplacementNode generated"); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
68 } |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
69 if (osrNodes.count() > 1) { |
21543
93c50cefb9e8
moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
19949
diff
changeset
|
70 throw new JVMCIError("Multiple OnStackReplacementNodes generated"); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
71 } |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
72 if (osr.stateAfter().locksSize() != 0) { |
8462
149dee7367e0
Bailout from OSR compilation when there is more than on EntryMarkerNode
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
7897
diff
changeset
|
73 throw new BailoutException("OSR with locks not supported"); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
74 } |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
75 if (osr.stateAfter().stackSize() != 0) { |
17341
e3f3233ec6cd
refactor BailoutException to include information about non-permanent errors
Lukas Stadler <lukas.stadler@oracle.com>
parents:
17114
diff
changeset
|
76 throw new BailoutException("OSR with stack entries not supported: %s", osr.stateAfter().toString(Verbosity.Debugger)); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
77 } |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
78 LoopEx osrLoop = null; |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
79 LoopsData loops = new LoopsData(graph); |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
80 for (LoopEx loop : loops.loops()) { |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
81 if (loop.inside().contains(osr)) { |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
82 osrLoop = loop; |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
83 break; |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
84 } |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
85 } |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
86 if (osrLoop == null) { |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
87 break; |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
88 } |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
89 |
16059
bab1a955411e
Backed out changeset: 23c4dd4f72a3 (avoid duplication of frame states during unrolling)
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16038
diff
changeset
|
90 LoopTransformations.peel(osrLoop); |
19949
efa840053649
Properly handle Guard usages during on stack replacement
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19410
diff
changeset
|
91 osr.replaceAtUsages(InputType.Guard, AbstractBeginNode.prevBegin((FixedNode) osr.predecessor())); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
92 for (Node usage : osr.usages().snapshot()) { |
7897
a58851061377
rename ValueProxyNode to ProxyNode
Lukas Stadler <lukas.stadler@jku.at>
parents:
7877
diff
changeset
|
93 ProxyNode proxy = (ProxyNode) usage; |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
94 proxy.replaceAndDelete(proxy.value()); |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
95 } |
13794
2eb56f87b01e
add GraphUtil.removeFixedWithUnusedInputs
Lukas Stadler <lukas.stadler@jku.at>
parents:
9533
diff
changeset
|
96 GraphUtil.removeFixedWithUnusedInputs(osr); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
97 Debug.dump(graph, "OnStackReplacement loop peeling result"); |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
98 } while (true); |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
99 |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
100 FrameState osrState = osr.stateAfter(); |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
101 osr.setStateAfter(null); |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
17341
diff
changeset
|
102 OSRStartNode osrStart = graph.add(new OSRStartNode()); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
103 StartNode start = graph.start(); |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
104 FixedNode next = osr.next(); |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
105 osr.setNext(null); |
9532
8f854c4deabf
Delay lowering of the platform specific OSR entry
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8524
diff
changeset
|
106 osrStart.setNext(next); |
8f854c4deabf
Delay lowering of the platform specific OSR entry
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8524
diff
changeset
|
107 graph.setStart(osrStart); |
8f854c4deabf
Delay lowering of the platform specific OSR entry
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8524
diff
changeset
|
108 osrStart.setStateAfter(osrState); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
109 |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
110 for (int i = 0; i < osrState.localsSize(); i++) { |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
111 ValueNode value = osrState.localAt(i); |
14131
2c538e48bb1a
Fix bug in OSR compilation.
Roland Schatz <roland.schatz@oracle.com>
parents:
13794
diff
changeset
|
112 if (value instanceof ProxyNode) { |
7897
a58851061377
rename ValueProxyNode to ProxyNode
Lukas Stadler <lukas.stadler@jku.at>
parents:
7877
diff
changeset
|
113 ProxyNode proxy = (ProxyNode) value; |
9533
298e47193781
Fix for delayed OSR: we must drop the precise stamps we have on the OSR locals since they may be too precise because of branch pruining in the graph builder.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
9532
diff
changeset
|
114 /* |
14131
2c538e48bb1a
Fix bug in OSR compilation.
Roland Schatz <roland.schatz@oracle.com>
parents:
13794
diff
changeset
|
115 * we need to drop the stamp since the types we see during OSR may be too precise |
2c538e48bb1a
Fix bug in OSR compilation.
Roland Schatz <roland.schatz@oracle.com>
parents:
13794
diff
changeset
|
116 * (if a branch was not parsed for example). |
9533
298e47193781
Fix for delayed OSR: we must drop the precise stamps we have on the OSR locals since they may be too precise because of branch pruining in the graph builder.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
9532
diff
changeset
|
117 */ |
18845
f57d86eb036f
removed Node factory methods
Doug Simon <doug.simon@oracle.com>
parents:
17341
diff
changeset
|
118 proxy.replaceAndDelete(graph.unique(new OSRLocalNode(i, proxy.stamp().unrestricted()))); |
14131
2c538e48bb1a
Fix bug in OSR compilation.
Roland Schatz <roland.schatz@oracle.com>
parents:
13794
diff
changeset
|
119 } else { |
14151
1a9dca3c3fd7
Relax wrong assertion.
Roland Schatz <roland.schatz@oracle.com>
parents:
14131
diff
changeset
|
120 assert value == null || value instanceof OSRLocalNode; |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
121 } |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
122 } |
19949
efa840053649
Properly handle Guard usages during on stack replacement
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19410
diff
changeset
|
123 osr.replaceAtUsages(InputType.Guard, osrStart); |
efa840053649
Properly handle Guard usages during on stack replacement
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19410
diff
changeset
|
124 assert osr.usages().isEmpty(); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
125 |
9532
8f854c4deabf
Delay lowering of the platform specific OSR entry
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8524
diff
changeset
|
126 GraphUtil.killCFG(start); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
127 |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
128 Debug.dump(graph, "OnStackReplacement result"); |
17114
8ca5e41dde86
DeadCodeElimination is not optional for OnStackReplacementPhase
Doug Simon <doug.simon@oracle.com>
parents:
17094
diff
changeset
|
129 new DeadCodeEliminationPhase(Required).apply(graph); |
6677
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
130 } |
3dddb311395f
hotspot infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
diff
changeset
|
131 } |