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 }