Mercurial > hg > truffle
annotate graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java @ 16092:51ba6c521922
Refactor LIRGeneratorTool methods.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Fri, 13 Jun 2014 11:08:16 +0200 |
parents | b38191cd1665 |
children | c0b8d395368b |
rev | line source |
---|---|
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
1 /* |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
2 * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
4 * |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
8 * |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
13 * accompanied this code). |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
14 * |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
18 * |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
21 * questions. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
22 */ |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
23 package com.oracle.graal.lir.gen; |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
24 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
25 import com.oracle.graal.api.code.*; |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
26 import com.oracle.graal.api.meta.*; |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
27 import com.oracle.graal.compiler.common.*; |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
28 import com.oracle.graal.compiler.common.calc.*; |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
29 import com.oracle.graal.compiler.common.cfg.*; |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
30 import com.oracle.graal.compiler.common.spi.*; |
15301
468b2428c403
Change DeoptimizingNode and Access to LIRFrameState in *LIRGenerator*.
Josef Eisl <josef.eisl@jku.at>
parents:
15299
diff
changeset
|
31 import com.oracle.graal.lir.*; |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
32 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
33 public interface LIRGeneratorTool extends ArithmeticLIRGenerator { |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
34 |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
35 CodeGenProviders getProviders(); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
36 |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
37 TargetDescription target(); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
38 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
39 MetaAccessProvider getMetaAccess(); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
40 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
41 CodeCacheProvider getCodeCache(); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
42 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
43 ForeignCallsProvider getForeignCalls(); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
44 |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
45 AbstractBlock<?> getCurrentBlock(); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
46 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
47 LIRGenerationResult getResult(); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
48 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
49 boolean hasBlockEnd(AbstractBlock<?> block); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
50 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
51 void doBlockStart(AbstractBlock<?> block); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
52 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
53 void doBlockEnd(AbstractBlock<?> block); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
54 |
15301
468b2428c403
Change DeoptimizingNode and Access to LIRFrameState in *LIRGenerator*.
Josef Eisl <josef.eisl@jku.at>
parents:
15299
diff
changeset
|
55 Value emitLoad(PlatformKind kind, Value address, LIRFrameState state); |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
56 |
15301
468b2428c403
Change DeoptimizingNode and Access to LIRFrameState in *LIRGenerator*.
Josef Eisl <josef.eisl@jku.at>
parents:
15299
diff
changeset
|
57 void emitStore(PlatformKind kind, Value address, Value input, LIRFrameState state); |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
58 |
15554
cf994cc23b54
Move emitNullCheck from NodeLIRBuilderTool to LIRGeneratorTool.
Josef Eisl <josef.eisl@jku.at>
parents:
15331
diff
changeset
|
59 void emitNullCheck(Value address, LIRFrameState state); |
cf994cc23b54
Move emitNullCheck from NodeLIRBuilderTool to LIRGeneratorTool.
Josef Eisl <josef.eisl@jku.at>
parents:
15331
diff
changeset
|
60 |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
61 Value emitCompareAndSwap(Value address, Value expectedValue, Value newValue, Value trueValue, Value falseValue); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
62 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
63 /** |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
64 * Emit an atomic read-and-add instruction. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
65 * |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
66 * @param address address of the value to be read and written |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
67 * @param delta the value to be added |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
68 */ |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
69 default Value emitAtomicReadAndAdd(Value address, Value delta) { |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
70 throw GraalInternalError.unimplemented(); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
71 } |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
72 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
73 /** |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
74 * Emit an atomic read-and-write instruction. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
75 * |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
76 * @param address address of the value to be read and written |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
77 * @param newValue the new value to be written |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
78 */ |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
79 default Value emitAtomicReadAndWrite(Value address, Value newValue) { |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
80 throw GraalInternalError.unimplemented(); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
81 } |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
82 |
15301
468b2428c403
Change DeoptimizingNode and Access to LIRFrameState in *LIRGenerator*.
Josef Eisl <josef.eisl@jku.at>
parents:
15299
diff
changeset
|
83 void emitDeoptimize(Value actionAndReason, Value failedSpeculation, LIRFrameState state); |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
84 |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
85 Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args); |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
86 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
87 /** |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
88 * Checks whether the supplied constant can be used without loading it into a register for most |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
89 * operations, i.e., for commonly used arithmetic, logical, and comparison operations. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
90 * |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
91 * @param c The constant to check. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
92 * @return True if the constant can be used directly, false if the constant needs to be in a |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
93 * register. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
94 */ |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
95 boolean canInlineConstant(Constant c); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
96 |
15947
3eedf7a653ea
Remove unused oop compression code from backends.
Roland Schatz <roland.schatz@oracle.com>
parents:
15554
diff
changeset
|
97 /** |
3eedf7a653ea
Remove unused oop compression code from backends.
Roland Schatz <roland.schatz@oracle.com>
parents:
15554
diff
changeset
|
98 * Checks whether the supplied constant can be used without loading it into a register for store |
3eedf7a653ea
Remove unused oop compression code from backends.
Roland Schatz <roland.schatz@oracle.com>
parents:
15554
diff
changeset
|
99 * operations, i.e., on the right hand side of a memory access. |
3eedf7a653ea
Remove unused oop compression code from backends.
Roland Schatz <roland.schatz@oracle.com>
parents:
15554
diff
changeset
|
100 * |
3eedf7a653ea
Remove unused oop compression code from backends.
Roland Schatz <roland.schatz@oracle.com>
parents:
15554
diff
changeset
|
101 * @param c The constant to check. |
3eedf7a653ea
Remove unused oop compression code from backends.
Roland Schatz <roland.schatz@oracle.com>
parents:
15554
diff
changeset
|
102 * @return True if the constant can be used directly, false if the constant needs to be in a |
3eedf7a653ea
Remove unused oop compression code from backends.
Roland Schatz <roland.schatz@oracle.com>
parents:
15554
diff
changeset
|
103 * register. |
3eedf7a653ea
Remove unused oop compression code from backends.
Roland Schatz <roland.schatz@oracle.com>
parents:
15554
diff
changeset
|
104 */ |
3eedf7a653ea
Remove unused oop compression code from backends.
Roland Schatz <roland.schatz@oracle.com>
parents:
15554
diff
changeset
|
105 boolean canStoreConstant(Constant c); |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
106 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
107 RegisterAttributes attributes(Register register); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
108 |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
109 Variable newVariable(PlatformKind kind); |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
110 |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
111 Variable emitMove(Value input); |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
112 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
113 void emitMove(AllocatableValue dst, Value src); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
114 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
115 /** |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
116 * Emits an op that loads the address of some raw data. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
117 * |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
118 * @param dst the variable into which the address is loaded |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
119 * @param data the data to be installed with the generated code |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
120 */ |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
121 void emitData(AllocatableValue dst, byte[] data); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
122 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
123 Value emitAddress(Value base, long displacement, Value index, int scale); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
124 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
125 Value emitAddress(StackSlot slot); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
126 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
127 void emitMembar(int barriers); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
128 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
129 void emitUnwind(Value operand); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
130 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
131 /** |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
132 * Called just before register allocation is performed on the LIR owned by this generator. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
133 * Overriding implementations of this method must call the overridden method. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
134 */ |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
135 void beforeRegisterAllocation(); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
136 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
137 void emitIncomingValues(Value[] params); |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
138 |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
139 /** |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
140 * Emits a return instruction. Implementations need to insert a move if the input is not in the |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
141 * correct location. |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
142 */ |
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
143 void emitReturn(Value input); |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
144 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
145 AllocatableValue asAllocatable(Value value); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
146 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
147 Variable load(Value value); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
148 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
149 Value loadNonConst(Value value); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
150 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
151 /** |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
152 * Returns true if the redundant move elimination optimization should be done after register |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
153 * allocation. |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
154 */ |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
155 boolean canEliminateRedundantMoves(); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
156 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
157 /** |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
158 * Determines if only oop maps are required for the code generated from the LIR. |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
159 */ |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
160 boolean needOnlyOopMaps(); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
161 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
162 /** |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
163 * Gets the ABI specific operand used to return a value of a given kind from a method. |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
164 * |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
165 * @param kind the kind of value being returned |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
166 * @return the operand representing the ABI defined location used return a value of kind |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
167 * {@code kind} |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
168 */ |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
169 AllocatableValue resultOperandFor(Kind kind); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
170 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
171 void append(LIRInstruction op); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
172 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
173 void emitJump(LabelRef label); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
174 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
175 void emitCompareBranch(PlatformKind cmpKind, Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef trueDestination, LabelRef falseDestination, |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
176 double trueDestinationProbability); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
177 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
178 void emitOverflowCheckBranch(LabelRef overflow, LabelRef noOverflow, double overflowProbability); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
179 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
180 void emitIntegerTestBranch(Value left, Value right, LabelRef trueDestination, LabelRef falseDestination, double trueSuccessorProbability); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
181 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
182 Variable emitConditionalMove(PlatformKind cmpKind, Value leftVal, Value right, Condition cond, boolean unorderedIsTrue, Value trueValue, Value falseValue); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
183 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
184 Variable emitIntegerTestMove(Value leftVal, Value right, Value trueValue, Value falseValue); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
185 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
186 void emitStrategySwitch(Constant[] keyConstants, double[] keyProbabilities, LabelRef[] keyTargets, LabelRef defaultTarget, Variable value); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
187 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
188 void emitStrategySwitch(SwitchStrategy strategy, Variable key, LabelRef[] keyTargets, LabelRef defaultTarget); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
189 |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
190 CallingConvention getCallingConvention(); |
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
191 |
16092
51ba6c521922
Refactor LIRGeneratorTool methods.
Roland Schatz <roland.schatz@oracle.com>
parents:
16073
diff
changeset
|
192 Value emitBitCount(Value operand); |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
193 |
16092
51ba6c521922
Refactor LIRGeneratorTool methods.
Roland Schatz <roland.schatz@oracle.com>
parents:
16073
diff
changeset
|
194 Value emitBitScanForward(Value operand); |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
195 |
16092
51ba6c521922
Refactor LIRGeneratorTool methods.
Roland Schatz <roland.schatz@oracle.com>
parents:
16073
diff
changeset
|
196 Value emitBitScanReverse(Value operand); |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
197 |
16092
51ba6c521922
Refactor LIRGeneratorTool methods.
Roland Schatz <roland.schatz@oracle.com>
parents:
16073
diff
changeset
|
198 Value emitByteSwap(Value operand); |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
199 |
16092
51ba6c521922
Refactor LIRGeneratorTool methods.
Roland Schatz <roland.schatz@oracle.com>
parents:
16073
diff
changeset
|
200 Value emitArrayEquals(Kind kind, Value array1, Value array2, Value length); |
15331
71cdf5518dab
Use LIRGeneratorTool in NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15301
diff
changeset
|
201 |
15298
e4d6c613d552
Move LIRGeneratorTool to graal.lir (errors).
Josef Eisl <josef.eisl@jku.at>
parents:
diff
changeset
|
202 } |