src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/AddressLoweringPhase.java
equal
deleted
inserted
replaced
31 import org.graalvm.compiler.phases.Phase; |
31 import org.graalvm.compiler.phases.Phase; |
32 |
32 |
33 public class AddressLoweringPhase extends Phase { |
33 public class AddressLoweringPhase extends Phase { |
34 |
34 |
35 public abstract static class AddressLowering { |
35 public abstract static class AddressLowering { |
|
36 |
|
37 @SuppressWarnings("unused") |
|
38 public void preProcess(StructuredGraph graph) { |
|
39 } |
|
40 |
|
41 @SuppressWarnings("unused") |
|
42 public void postProcess(AddressNode lowered) { |
|
43 } |
|
44 |
36 public abstract AddressNode lower(ValueNode base, ValueNode offset); |
45 public abstract AddressNode lower(ValueNode base, ValueNode offset); |
37 } |
46 } |
38 |
47 |
39 private final AddressLowering lowering; |
48 private final AddressLowering lowering; |
40 |
49 |
43 assert lowering != null; |
52 assert lowering != null; |
44 } |
53 } |
45 |
54 |
46 @Override |
55 @Override |
47 protected void run(StructuredGraph graph) { |
56 protected void run(StructuredGraph graph) { |
|
57 lowering.preProcess(graph); |
48 for (Node node : graph.getNodes()) { |
58 for (Node node : graph.getNodes()) { |
49 AddressNode lowered; |
59 AddressNode lowered; |
50 if (node instanceof OffsetAddressNode) { |
60 if (node instanceof OffsetAddressNode) { |
51 OffsetAddressNode address = (OffsetAddressNode) node; |
61 OffsetAddressNode address = (OffsetAddressNode) node; |
52 lowered = lowering.lower(address.getBase(), address.getOffset()); |
62 lowered = lowering.lower(address.getBase(), address.getOffset()); |
|
63 lowering.postProcess(lowered); |
53 } else { |
64 } else { |
54 continue; |
65 continue; |
55 } |
66 } |
56 node.replaceAtUsages(lowered); |
67 node.replaceAtUsages(lowered); |
57 GraphUtil.killWithUnusedFloatingInputs(node); |
68 GraphUtil.killWithUnusedFloatingInputs(node); |