Mercurial > hg > truffle
comparison graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java @ 18993:480bd3b1adcd
Rename BeginNode => AbstractBeginNode.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Wed, 28 Jan 2015 00:50:31 +0100 |
parents | f57d86eb036f |
children | a2cb19764970 |
comparison
equal
deleted
inserted
replaced
18992:b1c03c2bfa40 | 18993:480bd3b1adcd |
---|---|
49 * | 49 * |
50 */ | 50 */ |
51 public class ConvertDeoptimizeToGuardPhase extends Phase { | 51 public class ConvertDeoptimizeToGuardPhase extends Phase { |
52 private SimplifierTool simplifierTool = GraphUtil.getDefaultSimplifier(null, null, null, false); | 52 private SimplifierTool simplifierTool = GraphUtil.getDefaultSimplifier(null, null, null, false); |
53 | 53 |
54 private static BeginNode findBeginNode(FixedNode startNode) { | 54 private static AbstractBeginNode findBeginNode(FixedNode startNode) { |
55 return GraphUtil.predecessorIterable(startNode).filter(BeginNode.class).first(); | 55 return GraphUtil.predecessorIterable(startNode).filter(AbstractBeginNode.class).first(); |
56 } | 56 } |
57 | 57 |
58 @Override | 58 @Override |
59 protected void run(final StructuredGraph graph) { | 59 protected void run(final StructuredGraph graph) { |
60 assert graph.hasValueProxies() : "ConvertDeoptimizeToGuardPhase always creates proxies"; | 60 assert graph.hasValueProxies() : "ConvertDeoptimizeToGuardPhase always creates proxies"; |
61 if (graph.getNodes(DeoptimizeNode.class).isEmpty()) { | 61 if (graph.getNodes(DeoptimizeNode.class).isEmpty()) { |
62 return; | 62 return; |
63 } | 63 } |
64 for (DeoptimizeNode d : graph.getNodes(DeoptimizeNode.class)) { | 64 for (DeoptimizeNode d : graph.getNodes(DeoptimizeNode.class)) { |
65 assert d.isAlive(); | 65 assert d.isAlive(); |
66 visitDeoptBegin(BeginNode.prevBegin(d), d.action(), d.reason(), graph); | 66 visitDeoptBegin(AbstractBeginNode.prevBegin(d), d.action(), d.reason(), graph); |
67 } | 67 } |
68 | 68 |
69 for (FixedGuardNode fixedGuard : graph.getNodes(FixedGuardNode.class)) { | 69 for (FixedGuardNode fixedGuard : graph.getNodes(FixedGuardNode.class)) { |
70 | 70 |
71 BeginNode pred = BeginNode.prevBegin(fixedGuard); | 71 AbstractBeginNode pred = AbstractBeginNode.prevBegin(fixedGuard); |
72 if (pred instanceof MergeNode) { | 72 if (pred instanceof MergeNode) { |
73 MergeNode merge = (MergeNode) pred; | 73 MergeNode merge = (MergeNode) pred; |
74 if (fixedGuard.condition() instanceof CompareNode) { | 74 if (fixedGuard.condition() instanceof CompareNode) { |
75 CompareNode compare = (CompareNode) fixedGuard.condition(); | 75 CompareNode compare = (CompareNode) fixedGuard.condition(); |
76 List<AbstractEndNode> mergePredecessors = merge.cfgPredecessors().snapshot(); | 76 List<AbstractEndNode> mergePredecessors = merge.cfgPredecessors().snapshot(); |
94 if (ys[i] == null) { | 94 if (ys[i] == null) { |
95 continue; | 95 continue; |
96 } | 96 } |
97 if (xs[i] instanceof PrimitiveConstant && ys[i] instanceof PrimitiveConstant && | 97 if (xs[i] instanceof PrimitiveConstant && ys[i] instanceof PrimitiveConstant && |
98 compare.condition().foldCondition(xs[i], ys[i], null, compare.unorderedIsTrue()) == fixedGuard.isNegated()) { | 98 compare.condition().foldCondition(xs[i], ys[i], null, compare.unorderedIsTrue()) == fixedGuard.isNegated()) { |
99 visitDeoptBegin(BeginNode.prevBegin(mergePredecessor), fixedGuard.getAction(), fixedGuard.getReason(), graph); | 99 visitDeoptBegin(AbstractBeginNode.prevBegin(mergePredecessor), fixedGuard.getAction(), fixedGuard.getReason(), graph); |
100 } | 100 } |
101 } | 101 } |
102 } | 102 } |
103 } | 103 } |
104 } | 104 } |
105 | 105 |
106 new DeadCodeEliminationPhase(Optional).apply(graph); | 106 new DeadCodeEliminationPhase(Optional).apply(graph); |
107 } | 107 } |
108 | 108 |
109 private void visitDeoptBegin(BeginNode deoptBegin, DeoptimizationAction deoptAction, DeoptimizationReason deoptReason, StructuredGraph graph) { | 109 private void visitDeoptBegin(AbstractBeginNode deoptBegin, DeoptimizationAction deoptAction, DeoptimizationReason deoptReason, StructuredGraph graph) { |
110 if (deoptBegin instanceof MergeNode) { | 110 if (deoptBegin instanceof MergeNode) { |
111 MergeNode mergeNode = (MergeNode) deoptBegin; | 111 MergeNode mergeNode = (MergeNode) deoptBegin; |
112 Debug.log("Visiting %s", mergeNode); | 112 Debug.log("Visiting %s", mergeNode); |
113 FixedNode next = mergeNode.next(); | 113 FixedNode next = mergeNode.next(); |
114 while (mergeNode.isAlive()) { | 114 while (mergeNode.isAlive()) { |
115 AbstractEndNode end = mergeNode.forwardEnds().first(); | 115 AbstractEndNode end = mergeNode.forwardEnds().first(); |
116 BeginNode newBeginNode = findBeginNode(end); | 116 AbstractBeginNode newBeginNode = findBeginNode(end); |
117 visitDeoptBegin(newBeginNode, deoptAction, deoptReason, graph); | 117 visitDeoptBegin(newBeginNode, deoptAction, deoptReason, graph); |
118 } | 118 } |
119 assert next.isAlive(); | 119 assert next.isAlive(); |
120 BeginNode newBeginNode = findBeginNode(next); | 120 AbstractBeginNode newBeginNode = findBeginNode(next); |
121 visitDeoptBegin(newBeginNode, deoptAction, deoptReason, graph); | 121 visitDeoptBegin(newBeginNode, deoptAction, deoptReason, graph); |
122 return; | 122 return; |
123 } else if (deoptBegin.predecessor() instanceof IfNode) { | 123 } else if (deoptBegin.predecessor() instanceof IfNode) { |
124 IfNode ifNode = (IfNode) deoptBegin.predecessor(); | 124 IfNode ifNode = (IfNode) deoptBegin.predecessor(); |
125 BeginNode otherBegin = ifNode.trueSuccessor(); | 125 AbstractBeginNode otherBegin = ifNode.trueSuccessor(); |
126 LogicNode conditionNode = ifNode.condition(); | 126 LogicNode conditionNode = ifNode.condition(); |
127 FixedGuardNode guard = graph.add(new FixedGuardNode(conditionNode, deoptReason, deoptAction, deoptBegin == ifNode.trueSuccessor())); | 127 FixedGuardNode guard = graph.add(new FixedGuardNode(conditionNode, deoptReason, deoptAction, deoptBegin == ifNode.trueSuccessor())); |
128 FixedWithNextNode pred = (FixedWithNextNode) ifNode.predecessor(); | 128 FixedWithNextNode pred = (FixedWithNextNode) ifNode.predecessor(); |
129 BeginNode survivingSuccessor; | 129 AbstractBeginNode survivingSuccessor; |
130 if (deoptBegin == ifNode.trueSuccessor()) { | 130 if (deoptBegin == ifNode.trueSuccessor()) { |
131 survivingSuccessor = ifNode.falseSuccessor(); | 131 survivingSuccessor = ifNode.falseSuccessor(); |
132 } else { | 132 } else { |
133 survivingSuccessor = ifNode.trueSuccessor(); | 133 survivingSuccessor = ifNode.trueSuccessor(); |
134 } | 134 } |