43 import org.graalvm.compiler.nodes.BinaryOpLogicNode;
44 import org.graalvm.compiler.nodes.ConstantNode;
45 import org.graalvm.compiler.nodes.EndNode;
46 import org.graalvm.compiler.nodes.IfNode;
47 import org.graalvm.compiler.nodes.LogicNode;
48 import org.graalvm.compiler.nodes.MergeNode;
49 import org.graalvm.compiler.nodes.NodeView;
50 import org.graalvm.compiler.nodes.PhiNode;
51 import org.graalvm.compiler.nodes.PiNode;
52 import org.graalvm.compiler.nodes.StructuredGraph;
53 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
54 import org.graalvm.compiler.nodes.UnaryOpLogicNode;
55 import org.graalvm.compiler.nodes.ValueNode;
56 import org.graalvm.compiler.nodes.ValuePhiNode;
57 import org.graalvm.compiler.nodes.calc.BinaryNode;
58 import org.graalvm.compiler.nodes.calc.ConditionalNode;
59 import org.graalvm.compiler.nodes.calc.UnaryNode;
60 import org.graalvm.compiler.nodes.cfg.Block;
61 import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
62 import org.graalvm.compiler.nodes.cfg.ControlFlowGraph.RecursiveVisitor;
63 import org.graalvm.compiler.nodes.extended.IntegerSwitchNode;
64 import org.graalvm.compiler.nodes.memory.FixedAccessNode;
65 import org.graalvm.compiler.nodes.memory.FloatingAccessNode;
66 import org.graalvm.compiler.nodes.memory.FloatingReadNode;
67 import org.graalvm.compiler.nodes.memory.MemoryAccess;
68 import org.graalvm.compiler.nodes.memory.MemoryPhiNode;
69 import org.graalvm.compiler.nodes.util.GraphUtil;
70 import org.graalvm.compiler.phases.BasePhase;
71 import org.graalvm.compiler.phases.Phase;
72 import org.graalvm.compiler.phases.graph.ScheduledNodeIterator;
73 import org.graalvm.compiler.phases.schedule.SchedulePhase;
74 import org.graalvm.compiler.phases.schedule.SchedulePhase.SchedulingStrategy;
75 import org.graalvm.compiler.phases.tiers.LowTierContext;
76 import org.graalvm.compiler.phases.tiers.PhaseContext;
77
78 import jdk.vm.ci.meta.Constant;
79 import jdk.vm.ci.meta.MetaAccessProvider;
80 import jdk.vm.ci.meta.TriState;
81
82 /**
97
98 @Override
99 public float codeSizeIncrease() {
100 return 2.0f;
101 }
102
103 private static class FixReadsClosure extends ScheduledNodeIterator {
104
105 @Override
106 protected void processNode(Node node) {
107 if (node instanceof AbstractMergeNode) {
108 AbstractMergeNode mergeNode = (AbstractMergeNode) node;
109 for (MemoryPhiNode memoryPhi : mergeNode.memoryPhis().snapshot()) {
110 // Memory phi nodes are no longer necessary at this point.
111 memoryPhi.replaceAtUsages(null);
112 memoryPhi.safeDelete();
113 }
114 } else if (node instanceof FloatingAccessNode) {
115 FloatingAccessNode floatingAccessNode = (FloatingAccessNode) node;
116 floatingAccessNode.setLastLocationAccess(null);
117 FixedAccessNode fixedAccess = floatingAccessNode.asFixedNode();
118 replaceCurrent(fixedAccess);
119 } else if (node instanceof PiNode) {
120 PiNode piNode = (PiNode) node;
121 if (piNode.stamp(NodeView.DEFAULT).isCompatible(piNode.getOriginalNode().stamp(NodeView.DEFAULT))) {
122 // Pi nodes are no longer necessary at this point.
123 piNode.replaceAndDelete(piNode.getOriginalNode());
124 }
125 } else if (node instanceof MemoryAccess) {
126 MemoryAccess memoryAccess = (MemoryAccess) node;
127 memoryAccess.setLastLocationAccess(null);
128 }
129 }
130
131 }
132
133 protected static class RawConditionalEliminationVisitor implements RecursiveVisitor<Integer> {
134
135 protected final NodeMap<StampElement> stampMap;
136 protected final NodeStack undoOperations;
|
43 import org.graalvm.compiler.nodes.BinaryOpLogicNode;
44 import org.graalvm.compiler.nodes.ConstantNode;
45 import org.graalvm.compiler.nodes.EndNode;
46 import org.graalvm.compiler.nodes.IfNode;
47 import org.graalvm.compiler.nodes.LogicNode;
48 import org.graalvm.compiler.nodes.MergeNode;
49 import org.graalvm.compiler.nodes.NodeView;
50 import org.graalvm.compiler.nodes.PhiNode;
51 import org.graalvm.compiler.nodes.PiNode;
52 import org.graalvm.compiler.nodes.StructuredGraph;
53 import org.graalvm.compiler.nodes.StructuredGraph.ScheduleResult;
54 import org.graalvm.compiler.nodes.UnaryOpLogicNode;
55 import org.graalvm.compiler.nodes.ValueNode;
56 import org.graalvm.compiler.nodes.ValuePhiNode;
57 import org.graalvm.compiler.nodes.calc.BinaryNode;
58 import org.graalvm.compiler.nodes.calc.ConditionalNode;
59 import org.graalvm.compiler.nodes.calc.UnaryNode;
60 import org.graalvm.compiler.nodes.cfg.Block;
61 import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
62 import org.graalvm.compiler.nodes.cfg.ControlFlowGraph.RecursiveVisitor;
63 import org.graalvm.compiler.nodes.extended.GuardingNode;
64 import org.graalvm.compiler.nodes.extended.IntegerSwitchNode;
65 import org.graalvm.compiler.nodes.memory.FixedAccessNode;
66 import org.graalvm.compiler.nodes.memory.FloatingAccessNode;
67 import org.graalvm.compiler.nodes.memory.FloatingReadNode;
68 import org.graalvm.compiler.nodes.memory.MemoryAccess;
69 import org.graalvm.compiler.nodes.memory.MemoryPhiNode;
70 import org.graalvm.compiler.nodes.util.GraphUtil;
71 import org.graalvm.compiler.phases.BasePhase;
72 import org.graalvm.compiler.phases.Phase;
73 import org.graalvm.compiler.phases.graph.ScheduledNodeIterator;
74 import org.graalvm.compiler.phases.schedule.SchedulePhase;
75 import org.graalvm.compiler.phases.schedule.SchedulePhase.SchedulingStrategy;
76 import org.graalvm.compiler.phases.tiers.LowTierContext;
77 import org.graalvm.compiler.phases.tiers.PhaseContext;
78
79 import jdk.vm.ci.meta.Constant;
80 import jdk.vm.ci.meta.MetaAccessProvider;
81 import jdk.vm.ci.meta.TriState;
82
83 /**
98
99 @Override
100 public float codeSizeIncrease() {
101 return 2.0f;
102 }
103
104 private static class FixReadsClosure extends ScheduledNodeIterator {
105
106 @Override
107 protected void processNode(Node node) {
108 if (node instanceof AbstractMergeNode) {
109 AbstractMergeNode mergeNode = (AbstractMergeNode) node;
110 for (MemoryPhiNode memoryPhi : mergeNode.memoryPhis().snapshot()) {
111 // Memory phi nodes are no longer necessary at this point.
112 memoryPhi.replaceAtUsages(null);
113 memoryPhi.safeDelete();
114 }
115 } else if (node instanceof FloatingAccessNode) {
116 FloatingAccessNode floatingAccessNode = (FloatingAccessNode) node;
117 floatingAccessNode.setLastLocationAccess(null);
118 GuardingNode guard = floatingAccessNode.getGuard();
119 if (guard != null) {
120 floatingAccessNode.setGuard(null);
121 GraphUtil.tryKillUnused(guard.asNode());
122 }
123 FixedAccessNode fixedAccess = floatingAccessNode.asFixedNode();
124 replaceCurrent(fixedAccess);
125 } else if (node instanceof PiNode) {
126 PiNode piNode = (PiNode) node;
127 if (piNode.stamp(NodeView.DEFAULT).isCompatible(piNode.getOriginalNode().stamp(NodeView.DEFAULT))) {
128 // Pi nodes are no longer necessary at this point.
129 piNode.replaceAndDelete(piNode.getOriginalNode());
130 }
131 } else if (node instanceof MemoryAccess) {
132 MemoryAccess memoryAccess = (MemoryAccess) node;
133 memoryAccess.setLastLocationAccess(null);
134 }
135 }
136
137 }
138
139 protected static class RawConditionalEliminationVisitor implements RecursiveVisitor<Integer> {
140
141 protected final NodeMap<StampElement> stampMap;
142 protected final NodeStack undoOperations;
|