Mercurial > hg > graal-jvmci-8
comparison graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/phases/InlineTrivialGettersPhase.java @ 11570:f6cb27e8c9ee
Avoid direct usage of CanonicalizerPhase.Instance in partial evaluator.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Tue, 10 Sep 2013 13:39:33 +0200 |
parents | 0097fb11c16f |
children |
comparison
equal
deleted
inserted
replaced
11569:2f6734f8126a | 11570:f6cb27e8c9ee |
---|---|
20 * or visit www.oracle.com if you need additional information or have any | 20 * or visit www.oracle.com if you need additional information or have any |
21 * questions. | 21 * questions. |
22 */ | 22 */ |
23 package com.oracle.graal.truffle.phases; | 23 package com.oracle.graal.truffle.phases; |
24 | 24 |
25 import static com.oracle.graal.phases.GraalOptions.*; | |
26 | |
27 import com.oracle.graal.api.code.*; | |
28 import com.oracle.graal.api.meta.*; | 25 import com.oracle.graal.api.meta.*; |
29 import com.oracle.graal.debug.*; | 26 import com.oracle.graal.debug.*; |
30 import com.oracle.graal.java.*; | 27 import com.oracle.graal.java.*; |
31 import com.oracle.graal.nodes.*; | 28 import com.oracle.graal.nodes.*; |
32 import com.oracle.graal.nodes.java.*; | 29 import com.oracle.graal.nodes.java.*; |
33 import com.oracle.graal.nodes.java.MethodCallTargetNode.InvokeKind; | 30 import com.oracle.graal.nodes.java.MethodCallTargetNode.InvokeKind; |
34 import com.oracle.graal.phases.*; | 31 import com.oracle.graal.phases.*; |
35 import com.oracle.graal.phases.common.*; | 32 import com.oracle.graal.phases.common.*; |
36 import com.oracle.graal.phases.common.CanonicalizerPhase.CustomCanonicalizer; | 33 import com.oracle.graal.phases.tiers.*; |
37 import com.oracle.graal.truffle.*; | 34 import com.oracle.graal.truffle.*; |
38 | 35 |
39 /** | 36 /** |
40 * Inline all trivial getters (i.e. simple field loads). | 37 * Inline all trivial getters (i.e. simple field loads). |
41 */ | 38 */ |
42 public class InlineTrivialGettersPhase extends Phase { | 39 public class InlineTrivialGettersPhase extends BasePhase<PhaseContext> { |
43 | 40 |
44 private static final int TRIVIAL_GETTER_SIZE = 5; | 41 private static final int TRIVIAL_GETTER_SIZE = 5; |
45 private final MetaAccessProvider metaAccessProvider; | 42 private final MetaAccessProvider metaAccessProvider; |
46 private final Assumptions assumptions; | 43 private final CanonicalizerPhase canonicalizer; |
47 private final CustomCanonicalizer customCanonicalizer; | |
48 | 44 |
49 public InlineTrivialGettersPhase(MetaAccessProvider metaAccessProvider, Assumptions assumptions, CustomCanonicalizer customCanonicalizer) { | 45 public InlineTrivialGettersPhase(MetaAccessProvider metaAccessProvider, CanonicalizerPhase canonicalizer) { |
50 this.metaAccessProvider = metaAccessProvider; | 46 this.metaAccessProvider = metaAccessProvider; |
51 this.assumptions = assumptions; | 47 this.canonicalizer = canonicalizer; |
52 this.customCanonicalizer = customCanonicalizer; | |
53 } | 48 } |
54 | 49 |
55 @Override | 50 @Override |
56 protected void run(StructuredGraph graph) { | 51 protected void run(StructuredGraph graph, PhaseContext context) { |
57 for (MethodCallTargetNode methodCallTarget : graph.getNodes(MethodCallTargetNode.class)) { | 52 for (MethodCallTargetNode methodCallTarget : graph.getNodes(MethodCallTargetNode.class)) { |
58 if (methodCallTarget.isAlive()) { | 53 if (methodCallTarget.isAlive()) { |
59 InvokeKind invokeKind = methodCallTarget.invokeKind(); | 54 InvokeKind invokeKind = methodCallTarget.invokeKind(); |
60 if (invokeKind == InvokeKind.Special) { | 55 if (invokeKind == InvokeKind.Special) { |
61 ResolvedJavaMethod targetMethod = methodCallTarget.targetMethod(); | 56 ResolvedJavaMethod targetMethod = methodCallTarget.targetMethod(); |
64 StructuredGraph inlineGraph = new StructuredGraph(targetMethod); | 59 StructuredGraph inlineGraph = new StructuredGraph(targetMethod); |
65 new GraphBuilderPhase(metaAccessProvider, GraphBuilderConfiguration.getDefault(), TruffleCompilerImpl.Optimizations).apply(inlineGraph); | 60 new GraphBuilderPhase(metaAccessProvider, GraphBuilderConfiguration.getDefault(), TruffleCompilerImpl.Optimizations).apply(inlineGraph); |
66 int mark = graph.getMark(); | 61 int mark = graph.getMark(); |
67 InliningUtil.inline(methodCallTarget.invoke(), inlineGraph, false); | 62 InliningUtil.inline(methodCallTarget.invoke(), inlineGraph, false); |
68 Debug.dump(graph, "After inlining trivial getter %s", targetMethod.toString()); | 63 Debug.dump(graph, "After inlining trivial getter %s", targetMethod.toString()); |
69 new CanonicalizerPhase.Instance(metaAccessProvider, assumptions, !AOTCompilation.getValue(), mark, customCanonicalizer).apply(graph); | 64 canonicalizer.applyIncremental(graph, context, mark); |
70 } | 65 } |
71 } | 66 } |
72 } | 67 } |
73 } | 68 } |
74 } | 69 } |