annotate graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java @ 16190:3e40052d3b91

made CollapseFrameForSingleSideEffectPhase clean up dead nodes
author Doug Simon <doug.simon@oracle.com>
date Thu, 19 Jun 2014 12:07:02 +0200
parents 4e3c2247daf4
children 06c15e88d383
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7271
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
1 /*
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
4 *
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
8 *
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
13 * accompanied this code).
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
14 *
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
18 *
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
21 * questions.
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
22 */
8415
2361bf148c06 rename packages: *snippets* -> *replacements*
Doug Simon <doug.simon@oracle.com>
parents: 7901
diff changeset
23 package com.oracle.graal.replacements;
7271
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
24
16190
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
25 import static com.oracle.graal.api.code.BytecodeFrame.*;
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
26
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
27 import java.util.*;
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
28
15263
0b25b81414c9 Move various bci constants from FrameState (gral.nodes) to BytecodeFrame (graal.api.code)
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15145
diff changeset
29 import com.oracle.graal.api.code.*;
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
30 import com.oracle.graal.graph.*;
7271
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
31 import com.oracle.graal.nodes.*;
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
32 import com.oracle.graal.nodes.util.*;
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
33 import com.oracle.graal.phases.*;
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
34 import com.oracle.graal.phases.graph.*;
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
35 import com.oracle.graal.phases.graph.ReentrantNodeIterator.LoopInfo;
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
36 import com.oracle.graal.phases.graph.ReentrantNodeIterator.NodeIteratorClosure;
7271
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
37
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
38 /**
15263
0b25b81414c9 Move various bci constants from FrameState (gral.nodes) to BytecodeFrame (graal.api.code)
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15145
diff changeset
39 * This phase ensures that there's a single {@linkplain BytecodeFrame#AFTER_BCI collapsed frame
0b25b81414c9 Move various bci constants from FrameState (gral.nodes) to BytecodeFrame (graal.api.code)
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15145
diff changeset
40 * state} per path.
15467
4e3c2247daf4 simplify ReentrantNodeIterator
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15263
diff changeset
41 *
13618
b87fcab6624a Replacements: use enum to describe framestate action
Bernhard Urban <bernhard.urban@jku.at>
parents: 11785
diff changeset
42 * Removes other frame states from {@linkplain StateSplit#hasSideEffect() non-side-effecting} nodes
15263
0b25b81414c9 Move various bci constants from FrameState (gral.nodes) to BytecodeFrame (graal.api.code)
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15145
diff changeset
43 * in the graph, and replaces them with {@linkplain BytecodeFrame#INVALID_FRAMESTATE_BCI invalid
0b25b81414c9 Move various bci constants from FrameState (gral.nodes) to BytecodeFrame (graal.api.code)
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15145
diff changeset
44 * frame states}.
15467
4e3c2247daf4 simplify ReentrantNodeIterator
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15263
diff changeset
45 *
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
46 * The invalid frame states ensure that no deoptimization to a snippet frame state will happen.
7271
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
47 */
13618
b87fcab6624a Replacements: use enum to describe framestate action
Bernhard Urban <bernhard.urban@jku.at>
parents: 11785
diff changeset
48 public class CollapseFrameForSingleSideEffectPhase extends Phase {
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
49
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
50 private static class IterationState {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
51 public final IterationState previous;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
52 public final Node node;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
53 public final Collection<IterationState> merge;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
54 public final boolean invalid;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
55
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
56 private IterationState(IterationState previous, Node node, Collection<IterationState> merge, boolean invalid) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
57 this.previous = previous;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
58 this.node = node;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
59 this.merge = merge;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
60 this.invalid = invalid;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
61 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
62
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
63 public IterationState() {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
64 this(null, null, null, false);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
65 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
66
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
67 public IterationState addSideEffect(StateSplit sideEffect) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
68 return new IterationState(this, sideEffect.asNode(), null, true);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
69 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
70
15145
df2ef5204f2b Remove AbstractBeginNode, move the framestate from AbstractBeginNode to BeginStateSplitNode.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 14734
diff changeset
71 public IterationState addBranch(BeginNode begin) {
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
72 return new IterationState(this, begin, null, this.invalid);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
73 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
74
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
75 public static IterationState merge(MergeNode merge, Collection<IterationState> before, boolean invalid) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
76 return new IterationState(null, merge, before, invalid);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
77 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
78
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
79 public void markAll(NodeBitMap set) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
80 IterationState state = this;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
81 while (state != null && state.node != null && !set.contains(state.node)) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
82 set.mark(state.node);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
83 if (state.merge != null) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
84 for (IterationState branch : state.merge) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
85 branch.markAll(set);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
86 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
87 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
88 state = state.previous;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
89 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
90 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
91
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
92 public void markMasked(NodeBitMap unmasked, NodeBitMap masked) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
93 IterationState state = this;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
94 while (state != null && state.node != null && !masked.contains(state.node)) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
95 if (state.node instanceof StateSplit) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
96 unmasked.mark(state.node);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
97 StateSplit split = (StateSplit) state.node;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
98 if (split.hasSideEffect() && state.previous != null) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
99 state.previous.markAll(masked);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
100 return;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
101 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
102 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
103
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
104 if (state.merge != null) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
105 for (IterationState branch : state.merge) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
106 branch.markMasked(unmasked, masked);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
107 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
108 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
109 state = state.previous;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
110 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
111 }
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
112 }
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
113
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
114 @Override
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
115 protected void run(StructuredGraph graph) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
116 CollapseFrameForSingleSideEffectClosure closure = new CollapseFrameForSingleSideEffectClosure();
15467
4e3c2247daf4 simplify ReentrantNodeIterator
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15263
diff changeset
117 ReentrantNodeIterator.apply(closure, graph.start(), new IterationState());
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
118 closure.finishProcessing(graph);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
119 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
120
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
121 private static class CollapseFrameForSingleSideEffectClosure extends NodeIteratorClosure<IterationState> {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
122
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
123 private List<IterationState> returnStates = new ArrayList<>();
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
124 private List<IterationState> unwindStates = new ArrayList<>();
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
125
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
126 @Override
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
127 protected IterationState processNode(FixedNode node, IterationState currentState) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
128 IterationState state = currentState;
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
129 if (node instanceof StateSplit) {
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
130 StateSplit stateSplit = (StateSplit) node;
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
131 FrameState frameState = stateSplit.stateAfter();
7271
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
132 if (frameState != null) {
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
133 if (stateSplit.hasSideEffect()) {
16190
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
134 setStateAfter(node.graph(), stateSplit, INVALID_FRAMESTATE_BCI, false);
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
135 state = state.addSideEffect(stateSplit);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
136 } else if (currentState.invalid) {
16190
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
137 setStateAfter(node.graph(), stateSplit, INVALID_FRAMESTATE_BCI, false);
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
138 } else {
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
139 stateSplit.setStateAfter(null);
16190
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
140 if (frameState.usages().isEmpty()) {
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
141 GraphUtil.killWithUnusedFloatingInputs(frameState);
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
142 }
7271
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
143 }
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
144 }
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
145 }
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
146 if (node instanceof ReturnNode) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
147 returnStates.add(currentState);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
148 } else if (node instanceof UnwindNode) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
149 unwindStates.add(currentState);
11717
8a3b59397044 The SnippetFrameStateCleanupPhase now sets invalid framestates on the paths of side effecting instruction except for the last one where an AFTER_BCI is used.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 9623
diff changeset
150 }
8a3b59397044 The SnippetFrameStateCleanupPhase now sets invalid framestates on the paths of side effecting instruction except for the last one where an AFTER_BCI is used.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 9623
diff changeset
151 return state;
7271
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
152 }
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
153
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
154 @Override
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
155 protected IterationState merge(MergeNode merge, List<IterationState> states) {
11785
713a08116e97 Fix SnippetFrameStateCleanupPhase's handling of Merges: if there is no statesplit after a merge, the last statesplit inside the merges's incomming branches should get an AFTER_BCI
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11717
diff changeset
156 boolean invalid = false;
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
157 for (IterationState state : states) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
158 if (state.invalid) {
11785
713a08116e97 Fix SnippetFrameStateCleanupPhase's handling of Merges: if there is no statesplit after a merge, the last statesplit inside the merges's incomming branches should get an AFTER_BCI
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11717
diff changeset
159 invalid = true;
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
160 break;
11785
713a08116e97 Fix SnippetFrameStateCleanupPhase's handling of Merges: if there is no statesplit after a merge, the last statesplit inside the merges's incomming branches should get an AFTER_BCI
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11717
diff changeset
161 }
713a08116e97 Fix SnippetFrameStateCleanupPhase's handling of Merges: if there is no statesplit after a merge, the last statesplit inside the merges's incomming branches should get an AFTER_BCI
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11717
diff changeset
162 }
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
163 return IterationState.merge(merge, states, invalid);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
164 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
165
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
166 public void finishProcessing(StructuredGraph graph) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
167 NodeBitMap maskedSideEffects = new NodeBitMap(graph);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
168 NodeBitMap returnSideEffects = new NodeBitMap(graph);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
169 NodeBitMap unwindSideEffects = new NodeBitMap(graph);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
170
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
171 for (IterationState returnState : returnStates) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
172 returnState.markMasked(returnSideEffects, maskedSideEffects);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
173 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
174 for (IterationState unwindState : unwindStates) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
175 unwindState.markMasked(unwindSideEffects, maskedSideEffects);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
176 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
177
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
178 for (Node returnSideEffect : returnSideEffects) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
179 if (!unwindSideEffects.contains(returnSideEffect) && !maskedSideEffects.contains(returnSideEffect)) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
180 StateSplit split = (StateSplit) returnSideEffect;
16190
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
181 setStateAfter(graph, split, AFTER_BCI, true);
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
182 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
183 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
184
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
185 for (Node unwindSideEffect : unwindSideEffects) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
186 if (!returnSideEffects.contains(unwindSideEffect) && !maskedSideEffects.contains(unwindSideEffect)) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
187 StateSplit split = (StateSplit) unwindSideEffect;
16190
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
188 setStateAfter(graph, split, AFTER_EXCEPTION_BCI, true);
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
189 }
11785
713a08116e97 Fix SnippetFrameStateCleanupPhase's handling of Merges: if there is no statesplit after a merge, the last statesplit inside the merges's incomming branches should get an AFTER_BCI
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11717
diff changeset
190 }
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
191 }
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
192
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
193 @Override
15145
df2ef5204f2b Remove AbstractBeginNode, move the framestate from AbstractBeginNode to BeginStateSplitNode.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 14734
diff changeset
194 protected IterationState afterSplit(BeginNode node, IterationState oldState) {
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
195 return oldState.addBranch(node);
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
196 }
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
197
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
198 @Override
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
199 protected Map<LoopExitNode, IterationState> processLoop(LoopBeginNode loop, IterationState initialState) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
200 LoopInfo<IterationState> info = ReentrantNodeIterator.processLoop(this, loop, initialState);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
201
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
202 boolean isNowInvalid = initialState.invalid;
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
203 for (IterationState endState : info.endStates.values()) {
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
204 isNowInvalid |= endState.invalid;
7901
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
205 }
93a133fc03ce clear frame states in snippets and replace with sentries
Lukas Stadler <lukas.stadler@jku.at>
parents: 7530
diff changeset
206
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
207 if (isNowInvalid) {
16190
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
208 setStateAfter(loop.graph(), loop, INVALID_FRAMESTATE_BCI, false);
13751
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
209 }
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
210
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
211 IterationState endState = IterationState.merge(loop, info.endStates.values(), isNowInvalid);
9de3efd2ea8f Fix CollapseFrameForSingleSideEffectPhase.
Roland Schatz <roland.schatz@oracle.com>
parents: 13618
diff changeset
212 return ReentrantNodeIterator.processLoop(this, loop, endState).exitStates;
11717
8a3b59397044 The SnippetFrameStateCleanupPhase now sets invalid framestates on the paths of side effecting instruction except for the last one where an AFTER_BCI is used.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 9623
diff changeset
213 }
8a3b59397044 The SnippetFrameStateCleanupPhase now sets invalid framestates on the paths of side effecting instruction except for the last one where an AFTER_BCI is used.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 9623
diff changeset
214
16190
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
215 /**
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
216 * Creates and sets a special frame state for a node. If the existing frame state is
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
217 * non-null and has no other usages, it is deleted via
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
218 * {@link GraphUtil#killWithUnusedFloatingInputs(Node)}.
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
219 *
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
220 * @param graph the graph context
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
221 * @param node the node whose frame state is updated
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
222 * @param bci {@link BytecodeFrame#AFTER_BCI}, {@link BytecodeFrame#AFTER_EXCEPTION_BCI} or
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
223 * {@link BytecodeFrame#INVALID_FRAMESTATE_BCI}
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
224 * @param replaceOnly only perform the update if the node currently has a non-null frame
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
225 * state
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
226 */
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
227 private static void setStateAfter(StructuredGraph graph, StateSplit node, int bci, boolean replaceOnly) {
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
228 assert bci == AFTER_BCI || bci == AFTER_EXCEPTION_BCI || bci == INVALID_FRAMESTATE_BCI;
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
229 FrameState currentStateAfter = node.stateAfter();
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
230 if (currentStateAfter != null || !replaceOnly) {
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
231 node.setStateAfter(graph.add(new FrameState(bci)));
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
232 if (currentStateAfter != null && currentStateAfter.usages().isEmpty()) {
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
233 GraphUtil.killWithUnusedFloatingInputs(currentStateAfter);
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
234 }
3e40052d3b91 made CollapseFrameForSingleSideEffectPhase clean up dead nodes
Doug Simon <doug.simon@oracle.com>
parents: 15467
diff changeset
235 }
11717
8a3b59397044 The SnippetFrameStateCleanupPhase now sets invalid framestates on the paths of side effecting instruction except for the last one where an AFTER_BCI is used.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 9623
diff changeset
236 }
7271
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
237 }
9c06e8bd8769 added phase to remove unnecessary frame states from substitution snippets
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
238 }