annotate graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java @ 7246:cccec951cb76

Move loop unswitching before lowering Add a full canonicalizer just after inlining
author Gilles Duboscq <duboscq@ssw.jku.at>
date Mon, 17 Dec 2012 16:02:43 +0100
parents 3656236c7d27
children dc3e86fd3be1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
1 /*
4281
62cb0e636094 Copyright fixes
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4278
diff changeset
2 * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
4 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
8 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
13 * accompanied this code).
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
14 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
18 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
21 * questions.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
22 */
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
23 package com.oracle.graal.compiler;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
24
5068
6e7c1fb1980f enabled wrappers for native method calls
Christian Haeubl <christian.haeubl@oracle.com>
parents: 5061
diff changeset
25 import java.lang.reflect.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
26 import java.util.*;
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
27 import java.util.concurrent.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
28
6317
3ee3eb48e683 Clean up ComputeLinearScanOrder. Rename to ComputeBlockOrder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 6316
diff changeset
29 import com.oracle.graal.alloc.*;
5510
426c605c9d3c Move cri.ci to api.code.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5507
diff changeset
30 import com.oracle.graal.api.code.*;
5507
dc71b06d09f8 Moving classes from cri.ri to api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5499
diff changeset
31 import com.oracle.graal.api.meta.*;
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
32 import com.oracle.graal.compiler.alloc.*;
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
33 import com.oracle.graal.compiler.gen.*;
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
34 import com.oracle.graal.compiler.target.*;
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
35 import com.oracle.graal.debug.*;
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
36 import com.oracle.graal.lir.*;
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
37 import com.oracle.graal.lir.asm.*;
6523
c8763a2deb0c rename packages in graal.loop to match project name
Doug Simon <doug.simon@oracle.com>
parents: 6520
diff changeset
38 import com.oracle.graal.loop.phases.*;
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
39 import com.oracle.graal.nodes.*;
6529
2e96dc4eb8e2 renamed package: com.oracle.graal.lir.cfg -> com.oracle.graal.nodes.cfg
Doug Simon <doug.simon@oracle.com>
parents: 6526
diff changeset
40 import com.oracle.graal.nodes.cfg.*;
5720
46ad94a0574a moved everything from com.oracle.graal.nodes.cri into com.oracle.graal.nodes.spi
Doug Simon <doug.simon@oracle.com>
parents: 5718
diff changeset
41 import com.oracle.graal.nodes.spi.*;
6525
2c913b643422 rename packages in graal.phases to match project name
Doug Simon <doug.simon@oracle.com>
parents: 6524
diff changeset
42 import com.oracle.graal.phases.*;
6650
ea38da80dd29 refactor PEA into separate classes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6587
diff changeset
43 import com.oracle.graal.phases.PhasePlan.PhasePosition;
6526
ee651c726397 split phases out of graal.phases project into graal.phases.common project
Doug Simon <doug.simon@oracle.com>
parents: 6525
diff changeset
44 import com.oracle.graal.phases.common.*;
6525
2c913b643422 rename packages in graal.phases to match project name
Doug Simon <doug.simon@oracle.com>
parents: 6524
diff changeset
45 import com.oracle.graal.phases.schedule.*;
6524
a206e077ffc8 rename packages in graal.virtual to match project name
Doug Simon <doug.simon@oracle.com>
parents: 6523
diff changeset
46 import com.oracle.graal.virtual.phases.ea.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
47
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
48 public class GraalCompiler {
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
49
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
50 /**
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
51 * The target that this compiler has been configured for.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
52 */
5547
b6617d13ea44 Dropping Ci* prefixes. Some additional renamings in the api.code interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5546
diff changeset
53 public final TargetDescription target;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
54
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
55 /**
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
56 * The runtime that this compiler has been configured for.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
57 */
5718
10341299528c renamings: ExtendedRiRuntime -> GraalCodeCacheProvider, CiLoweringTool -> LoweringTool, RiGraphCache -> GraphCache
Doug Simon <doug.simon@oracle.com>
parents: 5695
diff changeset
58 public final GraalCodeCacheProvider runtime;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
59
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
60 /**
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
61 * The backend that this compiler has been configured for.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
62 */
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
63 public final Backend backend;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
64
6462
b3f5dc099f9d removed XIR
Doug Simon <doug.simon@oracle.com>
parents: 6415
diff changeset
65 public GraalCompiler(GraalCodeCacheProvider runtime, TargetDescription target, Backend backend) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
66 this.runtime = runtime;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
67 this.target = target;
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
68 this.backend = backend;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
69 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
70
6676
090868cbcda6 Graal infrastructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents: 6669
diff changeset
71 public CompilationResult compileMethod(final ResolvedJavaMethod method, final StructuredGraph graph, final GraphCache cache, final PhasePlan plan,
6316
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
72 final OptimisticOptimizations optimisticOpts) {
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6529
diff changeset
73 assert (method.getModifiers() & Modifier.NATIVE) == 0 : "compiling native methods is not supported";
4522
cf13124efdd9 Restructure phi functions in LIR; Re-enabled C1Visualizer output
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4477
diff changeset
74
6316
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
75 return Debug.scope("GraalCompiler", new Object[]{graph, method, this}, new Callable<CompilationResult>() {
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
76
5546
e42c0df7212a Rename CiTargetMethod => CompilationResult.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5541
diff changeset
77 public CompilationResult call() {
7064
8d16b9b2c51e first part of refactoring the InliningPhase
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7063
diff changeset
78 final Assumptions assumptions = new Assumptions(GraalOptions.OptAssumptions);
4613
09402dddc51e Make the graph object always available in context (helps debugging problems during LIRGen)
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 4525
diff changeset
79 final LIR lir = Debug.scope("FrontEnd", new Callable<LIR>() {
6316
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
80
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
81 public LIR call() {
5177
a26b6248d398 added graph caching (-G:+CacheGraphs)
Lukas Stadler <lukas.stadler@jku.at>
parents: 5138
diff changeset
82 return emitHIR(graph, assumptions, cache, plan, optimisticOpts);
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
83 }
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
84 });
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
85 final FrameMap frameMap = Debug.scope("BackEnd", lir, new Callable<FrameMap>() {
6316
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
86
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
87 public FrameMap call() {
6462
b3f5dc099f9d removed XIR
Doug Simon <doug.simon@oracle.com>
parents: 6415
diff changeset
88 return emitLIR(lir, graph, method);
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
89 }
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
90 });
5546
e42c0df7212a Rename CiTargetMethod => CompilationResult.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5541
diff changeset
91 return Debug.scope("CodeGen", frameMap, new Callable<CompilationResult>() {
6316
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
92
5546
e42c0df7212a Rename CiTargetMethod => CompilationResult.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5541
diff changeset
93 public CompilationResult call() {
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
94 return emitCode(assumptions, method, lir, frameMap);
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
95 }
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
96 });
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
97 }
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
98 });
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
99 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
100
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
101 /**
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
102 * Builds the graph, optimizes it.
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
103 */
5718
10341299528c renamings: ExtendedRiRuntime -> GraalCodeCacheProvider, CiLoweringTool -> LoweringTool, RiGraphCache -> GraphCache
Doug Simon <doug.simon@oracle.com>
parents: 5695
diff changeset
104 public LIR emitHIR(StructuredGraph graph, Assumptions assumptions, GraphCache cache, PhasePlan plan, OptimisticOptimizations optimisticOpts) {
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
105
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
106 if (graph.start().next() == null) {
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
107 plan.runPhases(PhasePosition.AFTER_PARSING, graph);
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
108 new DeadCodeEliminationPhase().apply(graph);
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
109 } else {
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
110 Debug.dump(graph, "initial state");
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
111 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
112
5204
0a53ed842cb8 Reordering and adjustments to phases
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5177
diff changeset
113 if (GraalOptions.ProbabilityAnalysis && graph.start().probability() == 0) {
0a53ed842cb8 Reordering and adjustments to phases
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5177
diff changeset
114 new ComputeProbabilityPhase().apply(graph);
0a53ed842cb8 Reordering and adjustments to phases
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5177
diff changeset
115 }
0a53ed842cb8 Reordering and adjustments to phases
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5177
diff changeset
116
5099
e35e2aa5ebad Run the canonicalizer early
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5085
diff changeset
117 if (GraalOptions.OptCanonicalizer) {
e35e2aa5ebad Run the canonicalizer early
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5085
diff changeset
118 new CanonicalizerPhase(target, runtime, assumptions).apply(graph);
e35e2aa5ebad Run the canonicalizer early
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5085
diff changeset
119 }
e35e2aa5ebad Run the canonicalizer early
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5085
diff changeset
120
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
121 if (GraalOptions.Inline && !plan.isPhaseDisabled(InliningPhase.class)) {
5177
a26b6248d398 added graph caching (-G:+CacheGraphs)
Lukas Stadler <lukas.stadler@jku.at>
parents: 5138
diff changeset
122 new InliningPhase(target, runtime, null, assumptions, cache, plan, optimisticOpts).apply(graph);
7073
ea39031737cf bugfix to prevent metadata constants from being emitted inline
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7070
diff changeset
123 new DeadCodeEliminationPhase().apply(graph);
5864
59f209dd356b Be more precise on the set of node that are canonicalized in IterativeCheckCastElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5859
diff changeset
124
5859
16c3284c94cd Try an iterative version of CheckCastElimination + Canonicalization
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5845
diff changeset
125 if (GraalOptions.CheckCastElimination && GraalOptions.OptCanonicalizer) {
7246
cccec951cb76 Move loop unswitching before lowering
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7099
diff changeset
126 new CanonicalizerPhase(target, runtime, assumptions).apply(graph);
6587
795df1687282 renamed CheckCastElimination to ConditionalElimination, plus a few small changes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
127 new IterativeConditionalEliminationPhase(target, runtime, assumptions).apply(graph);
5204
0a53ed842cb8 Reordering and adjustments to phases
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5177
diff changeset
128 }
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
129 }
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
130
6316
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
131 // new ConvertUnreachedToGuardPhase(optimisticOpts).apply(graph);
4648
83b4cc4df77a experimental: added PiNode and PropagateTypesPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 4618
diff changeset
132
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
133 plan.runPhases(PhasePosition.HIGH_LEVEL, graph);
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
134
5675
776366f3a41a A bit of work on counted loops
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5547
diff changeset
135 if (GraalOptions.FullUnroll) {
7064
8d16b9b2c51e first part of refactoring the InliningPhase
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7063
diff changeset
136 new LoopFullUnrollPhase(runtime, assumptions).apply(graph);
5882
fdec6dbeb3a1 canonicalize after FullUnroll
Lukas Stadler <lukas.stadler@jku.at>
parents: 5864
diff changeset
137 if (GraalOptions.OptCanonicalizer) {
fdec6dbeb3a1 canonicalize after FullUnroll
Lukas Stadler <lukas.stadler@jku.at>
parents: 5864
diff changeset
138 new CanonicalizerPhase(target, runtime, assumptions).apply(graph);
fdec6dbeb3a1 canonicalize after FullUnroll
Lukas Stadler <lukas.stadler@jku.at>
parents: 5864
diff changeset
139 }
5675
776366f3a41a A bit of work on counted loops
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5547
diff changeset
140 }
776366f3a41a A bit of work on counted loops
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5547
diff changeset
141
6519
feabae0d6bdc move TailDuplication to before lowering and escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6462
diff changeset
142 if (GraalOptions.OptTailDuplication) {
feabae0d6bdc move TailDuplication to before lowering and escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6462
diff changeset
143 new TailDuplicationPhase().apply(graph);
feabae0d6bdc move TailDuplication to before lowering and escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6462
diff changeset
144 if (GraalOptions.OptCanonicalizer) {
feabae0d6bdc move TailDuplication to before lowering and escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6462
diff changeset
145 new CanonicalizerPhase(target, runtime, assumptions).apply(graph);
feabae0d6bdc move TailDuplication to before lowering and escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6462
diff changeset
146 }
feabae0d6bdc move TailDuplication to before lowering and escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6462
diff changeset
147 }
feabae0d6bdc move TailDuplication to before lowering and escape analysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6462
diff changeset
148
6360
e5203e5843fc first prototype of new PartialEscapeAnalysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6356
diff changeset
149 if (GraalOptions.PartialEscapeAnalysis && !plan.isPhaseDisabled(PartialEscapeAnalysisPhase.class)) {
7012
9b7de658a76a add test for escape analysis of InstanceOf and CheckCast
Lukas Stadler <lukas.stadler@jku.at>
parents: 6678
diff changeset
150 new PartialEscapeAnalysisPhase(target, runtime, assumptions, true).apply(graph);
6360
e5203e5843fc first prototype of new PartialEscapeAnalysis
Lukas Stadler <lukas.stadler@jku.at>
parents: 6356
diff changeset
151 }
5675
776366f3a41a A bit of work on counted loops
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5547
diff changeset
152 if (GraalOptions.OptLoopTransform) {
776366f3a41a A bit of work on counted loops
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5547
diff changeset
153 new LoopTransformHighPhase().apply(graph);
7246
cccec951cb76 Move loop unswitching before lowering
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7099
diff changeset
154 new LoopTransformLowPhase().apply(graph);
5204
0a53ed842cb8 Reordering and adjustments to phases
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5177
diff changeset
155 }
7246
cccec951cb76 Move loop unswitching before lowering
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7099
diff changeset
156 new RemoveValueProxyPhase().apply(graph);
cccec951cb76 Move loop unswitching before lowering
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7099
diff changeset
157
5210
e3e7542d78b7 Loop-closed form GraphBuidling
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5204
diff changeset
158 if (GraalOptions.OptCanonicalizer) {
e3e7542d78b7 Loop-closed form GraphBuidling
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5204
diff changeset
159 new CanonicalizerPhase(target, runtime, assumptions).apply(graph);
e3e7542d78b7 Loop-closed form GraphBuidling
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5204
diff changeset
160 }
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
161
5379
c862951e769d moved checkcast lowering into LoweringPhase and added -G:HIRLowerCheckcast option to enable it (disabled by default) as it is not yet stable
Doug Simon <doug.simon@oracle.com>
parents: 5369
diff changeset
162 new LoweringPhase(runtime, assumptions).apply(graph);
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
163
5383
1436de7b7cab cull unnecessary framestates at merges
Lukas Stadler <lukas.stadler@jku.at>
parents: 5357
diff changeset
164 if (GraalOptions.CullFrameStates) {
1436de7b7cab cull unnecessary framestates at merges
Lukas Stadler <lukas.stadler@jku.at>
parents: 5357
diff changeset
165 new CullFrameStatesPhase().apply(graph);
1436de7b7cab cull unnecessary framestates at merges
Lukas Stadler <lukas.stadler@jku.at>
parents: 5357
diff changeset
166 }
5786
f69a406355b2 new tail duplication phase
Lukas Stadler <lukas.stadler@jku.at>
parents: 5775
diff changeset
167
6670
81ad987772f6 Cleanup GraalOption : removed defunct options
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 6669
diff changeset
168 if (GraalOptions.OptFloatingReads) {
5845
421e767d8038 Make FloatingRead phase respect loop closed form and use PostOrderNodeIterator
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5834
diff changeset
169 int mark = graph.getMark();
421e767d8038 Make FloatingRead phase respect loop closed form and use PostOrderNodeIterator
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5834
diff changeset
170 new FloatingReadPhase().apply(graph);
7099
3656236c7d27 Cleanup of Kind class: remove use of Unsafe class
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7073
diff changeset
171 new CanonicalizerPhase(target, runtime, assumptions, mark).apply(graph);
5845
421e767d8038 Make FloatingRead phase respect loop closed form and use PostOrderNodeIterator
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5834
diff changeset
172 if (GraalOptions.OptReadElimination) {
421e767d8038 Make FloatingRead phase respect loop closed form and use PostOrderNodeIterator
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5834
diff changeset
173 new ReadEliminationPhase().apply(graph);
421e767d8038 Make FloatingRead phase respect loop closed form and use PostOrderNodeIterator
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5834
diff changeset
174 }
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
175 }
5845
421e767d8038 Make FloatingRead phase respect loop closed form and use PostOrderNodeIterator
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5834
diff changeset
176 new RemoveValueProxyPhase().apply(graph);
421e767d8038 Make FloatingRead phase respect loop closed form and use PostOrderNodeIterator
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5834
diff changeset
177
5864
59f209dd356b Be more precise on the set of node that are canonicalized in IterativeCheckCastElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5859
diff changeset
178 if (GraalOptions.OptCanonicalizer) {
59f209dd356b Be more precise on the set of node that are canonicalized in IterativeCheckCastElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5859
diff changeset
179 new CanonicalizerPhase(target, runtime, assumptions).apply(graph);
59f209dd356b Be more precise on the set of node that are canonicalized in IterativeCheckCastElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5859
diff changeset
180 }
59f209dd356b Be more precise on the set of node that are canonicalized in IterativeCheckCastElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5859
diff changeset
181
6671
bffb038abbe6 Add option for EliminatePartiallyRedundantGuards, eliminate at splits after IterativeConditionalElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 6670
diff changeset
182 if (GraalOptions.OptEliminatePartiallyRedundantGuards) {
bffb038abbe6 Add option for EliminatePartiallyRedundantGuards, eliminate at splits after IterativeConditionalElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 6670
diff changeset
183 new EliminatePartiallyRedundantGuardsPhase(false, true).apply(graph);
bffb038abbe6 Add option for EliminatePartiallyRedundantGuards, eliminate at splits after IterativeConditionalElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 6670
diff changeset
184 }
6669
7f6823cc5d26 Simple elimination of some partially redundant guards
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 6657
diff changeset
185
5859
16c3284c94cd Try an iterative version of CheckCastElimination + Canonicalization
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5845
diff changeset
186 if (GraalOptions.CheckCastElimination && GraalOptions.OptCanonicalizer) {
6587
795df1687282 renamed CheckCastElimination to ConditionalElimination, plus a few small changes
Lukas Stadler <lukas.stadler@jku.at>
parents: 6539
diff changeset
187 new IterativeConditionalEliminationPhase(target, runtime, assumptions).apply(graph);
5741
c84c75339af1 Work on loop unswitching, things look ok, still disabled until FloatingRead preserves loop-closed form
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 5730
diff changeset
188 }
5391
5097f21f6c2b add a new simple CheckCast elimination phase
Lukas Stadler <lukas.stadler@jku.at>
parents: 5385
diff changeset
189
6671
bffb038abbe6 Add option for EliminatePartiallyRedundantGuards, eliminate at splits after IterativeConditionalElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 6670
diff changeset
190 if (GraalOptions.OptEliminatePartiallyRedundantGuards) {
bffb038abbe6 Add option for EliminatePartiallyRedundantGuards, eliminate at splits after IterativeConditionalElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 6670
diff changeset
191 new EliminatePartiallyRedundantGuardsPhase(true, true).apply(graph);
bffb038abbe6 Add option for EliminatePartiallyRedundantGuards, eliminate at splits after IterativeConditionalElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 6670
diff changeset
192 }
bffb038abbe6 Add option for EliminatePartiallyRedundantGuards, eliminate at splits after IterativeConditionalElimination
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 6670
diff changeset
193
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
194 plan.runPhases(PhasePosition.MID_LEVEL, graph);
4303
dd67881406c2 add GVN after FloatingReadPhase
Lukas Stadler <lukas.stadler@jku.at>
parents: 4281
diff changeset
195
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
196 plan.runPhases(PhasePosition.LOW_LEVEL, graph);
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
197
5272
a44b5ebb28a0 moved loop safepoint insertion from graph building to just before scheduling, removing the need for safepoint elimination
Doug Simon <doug.simon@oracle.com>
parents: 5251
diff changeset
198 // Add safepoints to loops
a44b5ebb28a0 moved loop safepoint insertion from graph building to just before scheduling, removing the need for safepoint elimination
Doug Simon <doug.simon@oracle.com>
parents: 5251
diff changeset
199 if (GraalOptions.GenLoopSafepoints) {
a44b5ebb28a0 moved loop safepoint insertion from graph building to just before scheduling, removing the need for safepoint elimination
Doug Simon <doug.simon@oracle.com>
parents: 5251
diff changeset
200 new LoopSafepointInsertionPhase().apply(graph);
a44b5ebb28a0 moved loop safepoint insertion from graph building to just before scheduling, removing the need for safepoint elimination
Doug Simon <doug.simon@oracle.com>
parents: 5251
diff changeset
201 }
a44b5ebb28a0 moved loop safepoint insertion from graph building to just before scheduling, removing the need for safepoint elimination
Doug Simon <doug.simon@oracle.com>
parents: 5251
diff changeset
202
4435
57cb8ec5f6bb Restructure block and control flow graph data structures
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4421
diff changeset
203 final SchedulePhase schedule = new SchedulePhase();
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
204 schedule.apply(graph);
4522
cf13124efdd9 Restructure phi functions in LIR; Re-enabled C1Visualizer output
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4477
diff changeset
205 Debug.dump(schedule, "final schedule");
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
206
4435
57cb8ec5f6bb Restructure block and control flow graph data structures
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4421
diff changeset
207 final Block[] blocks = schedule.getCFG().getBlocks();
57cb8ec5f6bb Restructure block and control flow graph data structures
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4421
diff changeset
208 final Block startBlock = schedule.getCFG().getStartBlock();
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
209 assert startBlock != null;
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
210 assert startBlock.numberOfPreds() == 0;
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
211
5013
25a46490146e Use context instead of individual dump calls to pass helper objects to CFG printer
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4648
diff changeset
212 return Debug.scope("ComputeLinearScanOrder", new Callable<LIR>() {
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
213
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
214 @Override
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
215 public LIR call() {
6317
3ee3eb48e683 Clean up ComputeLinearScanOrder. Rename to ComputeBlockOrder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 6316
diff changeset
216 ComputeBlockOrder clso = new ComputeBlockOrder(blocks.length, schedule.getCFG().getLoops().length, startBlock, GraalOptions.OptReorderLoops);
4435
57cb8ec5f6bb Restructure block and control flow graph data structures
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4421
diff changeset
217 List<Block> linearScanOrder = clso.linearScanOrder();
57cb8ec5f6bb Restructure block and control flow graph data structures
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4421
diff changeset
218 List<Block> codeEmittingOrder = clso.codeEmittingOrder();
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
219
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
220 int z = 0;
4435
57cb8ec5f6bb Restructure block and control flow graph data structures
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4421
diff changeset
221 for (Block b : linearScanOrder) {
57cb8ec5f6bb Restructure block and control flow graph data structures
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4421
diff changeset
222 b.linearScanNumber = z++;
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
223 }
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
224
5248
066f1687ba24 rename: nodesFor -> blockToNodesMap
Doug Simon <doug.simon@oracle.com>
parents: 5233
diff changeset
225 LIR lir = new LIR(schedule.getCFG(), schedule.getBlockToNodesMap(), linearScanOrder, codeEmittingOrder);
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
226 Debug.dump(lir, "After linear scan order");
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
227 return lir;
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
228
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
229 }
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
230 });
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
231 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
232
6462
b3f5dc099f9d removed XIR
Doug Simon <doug.simon@oracle.com>
parents: 6415
diff changeset
233 public FrameMap emitLIR(final LIR lir, StructuredGraph graph, final ResolvedJavaMethod method) {
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6529
diff changeset
234 final FrameMap frameMap = backend.newFrameMap(runtime.lookupRegisterConfig(method));
6462
b3f5dc099f9d removed XIR
Doug Simon <doug.simon@oracle.com>
parents: 6415
diff changeset
235 final LIRGenerator lirGenerator = backend.newLIRGenerator(graph, frameMap, method, lir);
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
236
5013
25a46490146e Use context instead of individual dump calls to pass helper objects to CFG printer
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4648
diff changeset
237 Debug.scope("LIRGen", lirGenerator, new Runnable() {
6316
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
238
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
239 public void run() {
4435
57cb8ec5f6bb Restructure block and control flow graph data structures
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4421
diff changeset
240 for (Block b : lir.linearScanOrder()) {
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
241 lirGenerator.doBlock(b);
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
242 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
243
4522
cf13124efdd9 Restructure phi functions in LIR; Re-enabled C1Visualizer output
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4477
diff changeset
244 Debug.dump(lir, "After LIR generation");
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
245 }
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
246 });
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
247
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
248 Debug.scope("Allocator", new Runnable() {
6316
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
249
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
250 public void run() {
6316
2e25b9c14b84 Temporarily remove experimental register allocators.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5891
diff changeset
251 new LinearScan(target, method, lir, lirGenerator, frameMap).allocate();
4265
4643ccd37dac * removed CiStatistics
Lukas Stadler <lukas.stadler@jku.at>
parents: 4263
diff changeset
252 }
4357
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
253 });
719ac1d92a52 More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4353
diff changeset
254 return frameMap;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
255 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
256
5547
b6617d13ea44 Dropping Ci* prefixes. Some additional renamings in the api.code interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5546
diff changeset
257 public CompilationResult emitCode(Assumptions assumptions, ResolvedJavaMethod method, LIR lir, FrameMap frameMap) {
5233
efbb1e33e2f3 removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents: 5215
diff changeset
258 TargetMethodAssembler tasm = backend.newAssembler(frameMap, lir);
efbb1e33e2f3 removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents: 5215
diff changeset
259 backend.emitCode(tasm, method, lir);
5546
e42c0df7212a Rename CiTargetMethod => CompilationResult.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5541
diff changeset
260 CompilationResult targetMethod = tasm.finishTargetMethod(method, false);
7064
8d16b9b2c51e first part of refactoring the InliningPhase
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7063
diff changeset
261 if (!assumptions.isEmpty()) {
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
262 targetMethod.setAssumptions(assumptions);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
263 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
264
5251
467de393651a optimization: frame prologue & epilogue ommitted for methods with no spills, no callee-saved registers, no incoming stack args and no debug info
Doug Simon <doug.simon@oracle.com>
parents: 5249
diff changeset
265 Debug.dump(targetMethod, "After code generation");
4353
043bec543161 More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 4352
diff changeset
266 return targetMethod;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
267 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
268 }