annotate graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java @ 15964:9d7b2134c4ce

less canonicalization during Truffle partial evaluation
author Lukas Stadler <lukas.stadler@oracle.com>
date Wed, 28 May 2014 18:45:06 +0200
parents cf51d3ade2fb
children 1461d7627707
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15644
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
1 /*
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
4 *
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
8 *
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
13 * accompanied this code).
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
14 *
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
18 *
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
21 * questions.
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
22 */
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
23 package com.oracle.graal.phases.common.inlining.info;
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
24
15957
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
25 import java.util.*;
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
26
15644
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
27 import com.oracle.graal.api.code.Assumptions;
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
28 import com.oracle.graal.api.meta.ResolvedJavaMethod;
15957
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
29 import com.oracle.graal.graph.*;
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
30 import com.oracle.graal.nodes.*;
15644
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
31 import com.oracle.graal.phases.common.inlining.InliningUtil;
15798
8c5bcddb4320 [inlining-6] moved Inlineable to dedicated package for inlineable elements
Miguel Garcia <miguel.m.garcia@oracle.com>
parents: 15644
diff changeset
32 import com.oracle.graal.phases.common.inlining.info.elem.Inlineable;
15799
99366262abb5 [inlining-6] InlineableMacroNode now in package for inlineable elements
Miguel Garcia <miguel.m.garcia@oracle.com>
parents: 15798
diff changeset
33 import com.oracle.graal.phases.common.inlining.info.elem.InlineableMacroNode;
15800
4850ba90e664 [inlining-6] InlineableGraph now in package for inlineable elements
Miguel Garcia <miguel.m.garcia@oracle.com>
parents: 15799
diff changeset
34 import com.oracle.graal.phases.common.inlining.info.elem.InlineableGraph;
15644
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
35
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
36 public abstract class AbstractInlineInfo implements InlineInfo {
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
37
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
38 protected final Invoke invoke;
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
39
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
40 public AbstractInlineInfo(Invoke invoke) {
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
41 this.invoke = invoke;
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
42 }
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
43
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
44 @Override
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
45 public StructuredGraph graph() {
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
46 return invoke.asNode().graph();
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
47 }
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
48
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
49 @Override
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
50 public Invoke invoke() {
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
51 return invoke;
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
52 }
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
53
15957
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
54 protected static Collection<Node> inline(Invoke invoke, ResolvedJavaMethod concrete, Inlineable inlineable, Assumptions assumptions, boolean receiverNullCheck) {
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
55 Collection<Node> parameterUsages = new ArrayList<>();
15644
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
56 if (inlineable instanceof InlineableGraph) {
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
57 StructuredGraph calleeGraph = ((InlineableGraph) inlineable).getGraph();
15957
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
58 Map<Node, Node> duplicateMap = InliningUtil.inline(invoke, calleeGraph, receiverNullCheck);
15964
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
59 getInlinedParameterUsages(parameterUsages, calleeGraph, duplicateMap);
15644
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
60 } else {
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
61 assert inlineable instanceof InlineableMacroNode;
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
62
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
63 Class<? extends FixedWithNextNode> macroNodeClass = ((InlineableMacroNode) inlineable).getMacroNodeClass();
15957
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
64 FixedWithNextNode macroNode = InliningUtil.inlineMacroNode(invoke, concrete, macroNodeClass);
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
65 parameterUsages.add(macroNode);
15644
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
66 }
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
67
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
68 InliningUtil.InlinedBytecodes.add(concrete.getCodeSize());
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
69 assumptions.recordMethodContents(concrete);
15957
cf51d3ade2fb less canonicalization during InliningPhase
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15800
diff changeset
70 return parameterUsages;
15644
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
71 }
15964
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
72
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
73 public static void getInlinedParameterUsages(Collection<Node> parameterUsages, StructuredGraph calleeGraph, Map<Node, Node> duplicateMap) {
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
74 for (ParameterNode parameter : calleeGraph.getNodes(ParameterNode.class)) {
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
75 for (Node usage : parameter.usages()) {
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
76 Node node = duplicateMap.get(usage);
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
77 if (node != null && node.isAlive()) {
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
78 parameterUsages.add(node);
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
79 }
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
80 }
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
81 }
9d7b2134c4ce less canonicalization during Truffle partial evaluation
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15957
diff changeset
82 }
15644
cd436bc5d63a [inlining] moving InlineInfo and subclasses to package inlining.info
Miguel Garcia <miguel.m.garcia@oracle.com>
parents:
diff changeset
83 }