Mercurial > hg > graal-compiler
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 |
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 } |