annotate graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScan.java @ 22790:615f3bbbb174

Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Thu, 08 Oct 2015 17:41:33 -0700
parents 05183a084a08
children b62242b9ddd7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21240
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
1 /*
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
2 * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved.
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
4 *
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
7 * published by the Free Software Foundation.
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
8 *
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
13 * accompanied this code).
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
14 *
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
18 *
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
21 * questions.
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
22 */
22352
e6ea77e2a770 Move different register allocators into sub-packages.
Josef Eisl <josef.eisl@jku.at>
parents: 22300
diff changeset
23 package com.oracle.graal.lir.alloc.lsra.ssa;
21240
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
24
22646
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
25 import java.util.List;
22267
bbfbb5613a62 LinearScan: pass block order to constructor.
Josef Eisl <josef.eisl@jku.at>
parents: 22054
diff changeset
26
22790
615f3bbbb174 Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22646
diff changeset
27 import jdk.vm.ci.code.TargetDescription;
22352
e6ea77e2a770 Move different register allocators into sub-packages.
Josef Eisl <josef.eisl@jku.at>
parents: 22300
diff changeset
28
22646
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
29 import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig;
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
30 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
31 import com.oracle.graal.debug.Debug;
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
32 import com.oracle.graal.debug.Debug.Scope;
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
33 import com.oracle.graal.lir.alloc.lsra.LinearScan;
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
34 import com.oracle.graal.lir.alloc.lsra.LinearScanEliminateSpillMovePhase;
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
35 import com.oracle.graal.lir.alloc.lsra.LinearScanLifetimeAnalysisPhase;
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
36 import com.oracle.graal.lir.alloc.lsra.LinearScanResolveDataFlowPhase;
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
37 import com.oracle.graal.lir.alloc.lsra.MoveResolver;
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
38 import com.oracle.graal.lir.gen.LIRGenerationResult;
21240
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
39 import com.oracle.graal.lir.gen.LIRGeneratorTool.SpillMoveFactory;
22646
05183a084a08 updated imports to be explicit and added checkstyle rule to forbid * imports
Doug Simon <doug.simon@oracle.com>
parents: 22573
diff changeset
40 import com.oracle.graal.lir.ssa.SSAUtil;
21240
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
41
22352
e6ea77e2a770 Move different register allocators into sub-packages.
Josef Eisl <josef.eisl@jku.at>
parents: 22300
diff changeset
42 public final class SSALinearScan extends LinearScan {
21240
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
43
22352
e6ea77e2a770 Move different register allocators into sub-packages.
Josef Eisl <josef.eisl@jku.at>
parents: 22300
diff changeset
44 public SSALinearScan(TargetDescription target, LIRGenerationResult res, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig regAllocConfig,
e6ea77e2a770 Move different register allocators into sub-packages.
Josef Eisl <josef.eisl@jku.at>
parents: 22300
diff changeset
45 List<? extends AbstractBlockBase<?>> sortedBlocks) {
22267
bbfbb5613a62 LinearScan: pass block order to constructor.
Josef Eisl <josef.eisl@jku.at>
parents: 22054
diff changeset
46 super(target, res, spillMoveFactory, regAllocConfig, sortedBlocks);
21240
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
47 }
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
48
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
49 @Override
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
50 protected MoveResolver createMoveResolver() {
21246
b2b3c514a391 MoveResolver: don't call check from constructor.
Josef Eisl <josef.eisl@jku.at>
parents: 21245
diff changeset
51 SSAMoveResolver moveResolver = new SSAMoveResolver(this);
b2b3c514a391 MoveResolver: don't call check from constructor.
Josef Eisl <josef.eisl@jku.at>
parents: 21245
diff changeset
52 assert moveResolver.checkEmpty();
b2b3c514a391 MoveResolver: don't call check from constructor.
Josef Eisl <josef.eisl@jku.at>
parents: 21245
diff changeset
53 return moveResolver;
21240
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
54 }
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
55
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
56 @Override
21339
1c56b7be2731 LinearScan: renamed sub phases.
Josef Eisl <josef.eisl@jku.at>
parents: 21337
diff changeset
57 protected LinearScanLifetimeAnalysisPhase createLifetimeAnalysisPhase() {
21340
dd013bfdccc3 SSALinearScan: rename sub-phases.
Josef Eisl <josef.eisl@jku.at>
parents: 21339
diff changeset
58 return new SSALinearScanLifetimeAnalysisPhase(this);
21245
a2430e146460 SSALinearScan: add register hints to PHIs.
Josef Eisl <josef.eisl@jku.at>
parents: 21243
diff changeset
59 }
a2430e146460 SSALinearScan: add register hints to PHIs.
Josef Eisl <josef.eisl@jku.at>
parents: 21243
diff changeset
60
21335
f2e3054bd164 SSALinearScan: add SSAResolveDataFlow.
Josef Eisl <josef.eisl@jku.at>
parents: 21323
diff changeset
61 @Override
21339
1c56b7be2731 LinearScan: renamed sub phases.
Josef Eisl <josef.eisl@jku.at>
parents: 21337
diff changeset
62 protected LinearScanResolveDataFlowPhase createResolveDataFlowPhase() {
21340
dd013bfdccc3 SSALinearScan: rename sub-phases.
Josef Eisl <josef.eisl@jku.at>
parents: 21339
diff changeset
63 return new SSALinarScanResolveDataFlowPhase(this);
21335
f2e3054bd164 SSALinearScan: add SSAResolveDataFlow.
Josef Eisl <josef.eisl@jku.at>
parents: 21323
diff changeset
64 }
f2e3054bd164 SSALinearScan: add SSAResolveDataFlow.
Josef Eisl <josef.eisl@jku.at>
parents: 21323
diff changeset
65
21337
583a64c48dda SSALinearScan: add SSAEliminateSpillMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21335
diff changeset
66 @Override
21339
1c56b7be2731 LinearScan: renamed sub phases.
Josef Eisl <josef.eisl@jku.at>
parents: 21337
diff changeset
67 protected LinearScanEliminateSpillMovePhase createSpillMoveEliminationPhase() {
21340
dd013bfdccc3 SSALinearScan: rename sub-phases.
Josef Eisl <josef.eisl@jku.at>
parents: 21339
diff changeset
68 return new SSALinearScanEliminateSpillMovePhase(this);
21240
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
69 }
21337
583a64c48dda SSALinearScan: add SSAEliminateSpillMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21335
diff changeset
70
21440
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
71 @Override
22573
74b3e5c0209c suppressed -Xlint:try warnings
Doug Simon <doug.simon@oracle.com>
parents: 22390
diff changeset
72 @SuppressWarnings("try")
21440
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
73 protected void beforeSpillMoveElimination() {
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
74 /*
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
75 * PHI Ins are needed for the RegisterVerifier, otherwise PHIs where the Out and In value
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
76 * matches (ie. there is no resolution move) are falsely detected as errors.
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
77 */
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
78 try (Scope s1 = Debug.scope("Remove Phi In")) {
22352
e6ea77e2a770 Move different register allocators into sub-packages.
Josef Eisl <josef.eisl@jku.at>
parents: 22300
diff changeset
79 for (AbstractBlockBase<?> toBlock : sortedBlocks()) {
21440
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
80 if (toBlock.getPredecessorCount() > 1) {
22357
dcf959fb2223 Rename SSAUtils->SSAUtils.
Josef Eisl <josef.eisl@jku.at>
parents: 22352
diff changeset
81 SSAUtil.removePhiIn(getLIR(), toBlock);
21440
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
82 }
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
83 }
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
84 }
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
85 }
1c8383a27c1b LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan.
Josef Eisl <josef.eisl@jku.at>
parents: 21340
diff changeset
86
21240
1e9242c9735e Introduce SSALinearScan and SSAMoveResolver.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
87 }