Mercurial > hg > truffle
annotate graal/com.oracle.graal.lir/src/com/oracle/graal/lir/DelayedFrameMapBuilder.java @ 18432:6b58802e45b2
Revert Backend.frameMap(FrameMapBuilder) to Backend.frameMap(RegisterConfig).
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Mon, 10 Nov 2014 18:37:28 +0100 |
parents | 84ac6a1a0dcb |
children | a0cd3a1e7d7d |
rev | line source |
---|---|
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
1 /* |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
2 * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
4 * |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
8 * |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
13 * accompanied this code). |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
14 * |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
18 * |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
21 * questions. |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
22 */ |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
23 package com.oracle.graal.lir; |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
24 |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
25 import java.util.*; |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
26 |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
27 import com.oracle.graal.api.code.*; |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
28 import com.oracle.graal.api.meta.*; |
18426
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
29 import com.oracle.graal.asm.*; |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
30 import com.oracle.graal.compiler.common.*; |
18423
c656c5772cfa
Pass LIRGenerationResult to FrameMapBuilder.buildFrameMap().
Josef Eisl <josef.eisl@jku.at>
parents:
18422
diff
changeset
|
31 import com.oracle.graal.lir.gen.*; |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
32 |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
33 /** |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
34 * A FrameMapBuilder that records allocation. |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
35 */ |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
36 public class DelayedFrameMapBuilder implements FrameMapBuilder { |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
37 |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
38 @FunctionalInterface |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
39 public interface FrameMapFactory { |
18432
6b58802e45b2
Revert Backend.frameMap(FrameMapBuilder) to Backend.frameMap(RegisterConfig).
Josef Eisl <josef.eisl@jku.at>
parents:
18431
diff
changeset
|
40 FrameMap newFrameMap(RegisterConfig registerConfig); |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
41 } |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
42 |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
43 private final RegisterConfig registerConfig; |
18422
a06ab51f9196
Add FrameMapBuilder.getCodeCache().
Josef Eisl <josef.eisl@jku.at>
parents:
18421
diff
changeset
|
44 private final CodeCacheProvider codeCache; |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
45 private final FrameMapFactory factory; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
46 private final List<TrackedVirtualStackSlot> stackSlots; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
47 private final List<CallingConvention> calls; |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
48 |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
49 public DelayedFrameMapBuilder(FrameMapFactory factory, CodeCacheProvider codeCache, RegisterConfig registerConfig) { |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
50 this.registerConfig = registerConfig == null ? codeCache.getRegisterConfig() : registerConfig; |
18422
a06ab51f9196
Add FrameMapBuilder.getCodeCache().
Josef Eisl <josef.eisl@jku.at>
parents:
18421
diff
changeset
|
51 this.codeCache = codeCache; |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
52 this.factory = factory; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
53 this.stackSlots = new ArrayList<>(); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
54 this.calls = new ArrayList<>(); |
18431
84ac6a1a0dcb
Introduce FrameMappingTool.
Josef Eisl <josef.eisl@jku.at>
parents:
18429
diff
changeset
|
55 this.mappables = new ArrayList<>(); |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
56 } |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
57 |
18426
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
58 private Set<VirtualStackSlot> freedSlots; |
18431
84ac6a1a0dcb
Introduce FrameMappingTool.
Josef Eisl <josef.eisl@jku.at>
parents:
18429
diff
changeset
|
59 private final List<FrameMappable> mappables; |
18426
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
60 |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
61 public VirtualStackSlot allocateSpillSlot(LIRKind kind) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
62 if (freedSlots != null) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
63 for (Iterator<VirtualStackSlot> iter = freedSlots.iterator(); iter.hasNext();) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
64 VirtualStackSlot s = iter.next(); |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
65 if (s.getLIRKind().equals(kind)) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
66 iter.remove(); |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
67 if (freedSlots.isEmpty()) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
68 freedSlots = null; |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
69 } |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
70 return s; |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
71 } |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
72 } |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
73 } |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
74 SimpleVirtualStackSlot slot = new SimpleVirtualStackSlot(kind); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
75 stackSlots.add(slot); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
76 return slot; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
77 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
78 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
79 public abstract class TrackedVirtualStackSlot extends VirtualStackSlot { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
80 /** |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
81 * |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
82 */ |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
83 private static final long serialVersionUID = 408446797222290182L; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
84 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
85 public TrackedVirtualStackSlot(LIRKind lirKind) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
86 super(lirKind); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
87 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
88 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
89 public abstract StackSlot transform(FrameMap frameMap); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
90 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
91 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
92 private class SimpleVirtualStackSlot extends TrackedVirtualStackSlot { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
93 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
94 private static final long serialVersionUID = 7654295701165421750L; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
95 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
96 public SimpleVirtualStackSlot(LIRKind lirKind) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
97 super(lirKind); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
98 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
99 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
100 @Override |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
101 public StackSlot transform(FrameMap frameMap) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
102 int size = frameMap.spillSlotSize(getLIRKind()); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
103 frameMap.spillSize = NumUtil.roundUp(frameMap.spillSize + size, size); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
104 return frameMap.allocateNewSpillSlot(getLIRKind(), 0); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
105 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
106 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
107 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
108 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
109 private class VirtualStackSlotRange extends TrackedVirtualStackSlot { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
110 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
111 private static final long serialVersionUID = 5152592950118317121L; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
112 private final BitSet objects; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
113 private final int slots; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
114 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
115 public VirtualStackSlotRange(int slots, BitSet objects) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
116 super(LIRKind.reference(Kind.Object)); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
117 this.slots = slots; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
118 this.objects = (BitSet) objects.clone(); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
119 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
120 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
121 @Override |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
122 public StackSlot transform(FrameMap frameMap) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
123 frameMap.spillSize += (slots * frameMap.getTarget().wordSize); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
124 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
125 if (!objects.isEmpty()) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
126 assert objects.length() <= slots; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
127 StackSlot result = null; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
128 for (int slotIndex = 0; slotIndex < slots; slotIndex++) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
129 StackSlot objectSlot = null; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
130 if (objects.get(slotIndex)) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
131 objectSlot = frameMap.allocateNewSpillSlot(LIRKind.reference(Kind.Object), slotIndex * frameMap.getTarget().wordSize); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
132 frameMap.addObjectStackSlot(objectSlot); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
133 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
134 if (slotIndex == 0) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
135 if (objectSlot != null) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
136 result = objectSlot; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
137 } else { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
138 result = frameMap.allocateNewSpillSlot(LIRKind.value(frameMap.getTarget().wordKind), 0); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
139 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
140 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
141 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
142 assert result != null; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
143 return result; |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
144 |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
145 } else { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
146 return frameMap.allocateNewSpillSlot(LIRKind.value(frameMap.getTarget().wordKind), 0); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
147 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
148 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
149 |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
150 } |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
151 |
18428
0826409daa24
Use VirtualStackSlot for outObjectStackSlots in FrameMapBuilder.allocateStackSlots().
Josef Eisl <josef.eisl@jku.at>
parents:
18427
diff
changeset
|
152 public VirtualStackSlot allocateStackSlots(int slots, BitSet objects, List<VirtualStackSlot> outObjectStackSlots) { |
18427
9bf59aa9d8c6
Move allocateStackSlots logic from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18426
diff
changeset
|
153 if (slots == 0) { |
9bf59aa9d8c6
Move allocateStackSlots logic from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18426
diff
changeset
|
154 return null; |
9bf59aa9d8c6
Move allocateStackSlots logic from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18426
diff
changeset
|
155 } |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
156 if (outObjectStackSlots != null) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
157 throw GraalInternalError.unimplemented(); |
18427
9bf59aa9d8c6
Move allocateStackSlots logic from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18426
diff
changeset
|
158 } |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
159 VirtualStackSlotRange slot = new VirtualStackSlotRange(slots, objects); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
160 stackSlots.add(slot); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
161 return slot; |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
162 } |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
163 |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
164 public RegisterConfig getRegisterConfig() { |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
165 return registerConfig; |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
166 } |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
167 |
18422
a06ab51f9196
Add FrameMapBuilder.getCodeCache().
Josef Eisl <josef.eisl@jku.at>
parents:
18421
diff
changeset
|
168 public CodeCacheProvider getCodeCache() { |
a06ab51f9196
Add FrameMapBuilder.getCodeCache().
Josef Eisl <josef.eisl@jku.at>
parents:
18421
diff
changeset
|
169 return codeCache; |
a06ab51f9196
Add FrameMapBuilder.getCodeCache().
Josef Eisl <josef.eisl@jku.at>
parents:
18421
diff
changeset
|
170 } |
a06ab51f9196
Add FrameMapBuilder.getCodeCache().
Josef Eisl <josef.eisl@jku.at>
parents:
18421
diff
changeset
|
171 |
18426
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
172 public void freeSpillSlot(VirtualStackSlot slot) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
173 if (freedSlots == null) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
174 freedSlots = new HashSet<>(); |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
175 } |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
176 freedSlots.add(slot); |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
177 } |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
178 |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
179 public void callsMethod(CallingConvention cc) { |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
180 calls.add(cc); |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
181 } |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
182 |
18423
c656c5772cfa
Pass LIRGenerationResult to FrameMapBuilder.buildFrameMap().
Josef Eisl <josef.eisl@jku.at>
parents:
18422
diff
changeset
|
183 public FrameMap buildFrameMap(LIRGenerationResult res) { |
18432
6b58802e45b2
Revert Backend.frameMap(FrameMapBuilder) to Backend.frameMap(RegisterConfig).
Josef Eisl <josef.eisl@jku.at>
parents:
18431
diff
changeset
|
184 FrameMap frameMap = factory.newFrameMap(registerConfig); |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
185 HashMap<VirtualStackSlot, StackSlot> mapping = new HashMap<>(); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
186 // fill |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
187 mapStackSlots(frameMap, mapping); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
188 for (CallingConvention cc : calls) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
189 frameMap.callsMethod(cc); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
190 } |
18431
84ac6a1a0dcb
Introduce FrameMappingTool.
Josef Eisl <josef.eisl@jku.at>
parents:
18429
diff
changeset
|
191 // rewrite |
84ac6a1a0dcb
Introduce FrameMappingTool.
Josef Eisl <josef.eisl@jku.at>
parents:
18429
diff
changeset
|
192 mappables.forEach(m -> m.map(mapping::get)); |
84ac6a1a0dcb
Introduce FrameMappingTool.
Josef Eisl <josef.eisl@jku.at>
parents:
18429
diff
changeset
|
193 // |
18426
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
194 if (freedSlots != null) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
195 // If the freed slots cover the complete spill area (except for the return |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
196 // address slot), then the spill size is reset to its initial value. |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
197 // Without this, frameNeedsAllocating() would never return true. |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
198 int total = 0; |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
199 for (VirtualStackSlot s : freedSlots) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
200 total += frameMap.getTarget().getSizeInBytes(s.getKind()); |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
201 } |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
202 if (total == frameMap.spillSize - frameMap.initialSpillSize) { |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
203 // reset spill area size |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
204 frameMap.spillSize = frameMap.initialSpillSize; |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
205 } |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
206 freedSlots = null; |
b2b37b36a254
Move freeSpillSlot() from FrameMap to ForwardingFrameMapBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
18425
diff
changeset
|
207 } |
18155
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
208 frameMap.finish(); |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
209 return frameMap; |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
210 } |
115c9fac7542
Move FrameMapBuilderImpl to com.oracle.graal.lir.
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
211 |
18429
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
212 protected void mapStackSlots(FrameMap frameMap, HashMap<VirtualStackSlot, StackSlot> mapping) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
213 for (TrackedVirtualStackSlot virtualSlot : stackSlots) { |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
214 StackSlot slot = virtualSlot.transform(frameMap); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
215 mapping.put(virtualSlot, slot); |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
216 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
217 } |
79268cfc256a
StackSlot is no longer a VirtualStackSlot (rename ForwardingFrameMapBuilder to DelayedFrameMapBuilder).
Josef Eisl <josef.eisl@jku.at>
parents:
18428
diff
changeset
|
218 |
18431
84ac6a1a0dcb
Introduce FrameMappingTool.
Josef Eisl <josef.eisl@jku.at>
parents:
18429
diff
changeset
|
219 public void requireMapping(FrameMappable mappable) { |
84ac6a1a0dcb
Introduce FrameMappingTool.
Josef Eisl <josef.eisl@jku.at>
parents:
18429
diff
changeset
|
220 this.mappables.add(mappable); |
84ac6a1a0dcb
Introduce FrameMappingTool.
Josef Eisl <josef.eisl@jku.at>
parents:
18429
diff
changeset
|
221 } |
84ac6a1a0dcb
Introduce FrameMappingTool.
Josef Eisl <josef.eisl@jku.at>
parents:
18429
diff
changeset
|
222 |
18163
c88ab4f1f04a
re-enabled Checkstyle with the release of 6.0 that supports Java 8; fixed existing Checkstyle warnings
Doug Simon <doug.simon@oracle.com>
parents:
18155
diff
changeset
|
223 } |