Mercurial > hg > graal-compiler
annotate graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java @ 23348:9306a9611097
Update JVMCI import: Make CallingConvention.Type extensible; remove unused stackOnly parameter
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Thu, 21 Jan 2016 14:24:24 -0800 |
parents | f868bd0c3f02 |
children | b6c33361df1e |
rev | line source |
---|---|
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
1 /* |
23316
52f4acf6f365
Update import: Move CompilationResult and DataSection from JVMCI to Graal.
Roland Schatz <roland.schatz@oracle.com>
parents:
22927
diff
changeset
|
2 * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
4 * |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
8 * |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
14 * |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
18 * |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
21 * questions. |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
22 */ |
6495
75f130f2b30f
moved AMD64 specific HotSpot code in com.oracle.graal.hotspot.amd64 project
Doug Simon <doug.simon@oracle.com>
parents:
6494
diff
changeset
|
23 package com.oracle.graal.hotspot.amd64; |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
24 |
22614
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
25 import static com.oracle.graal.compiler.common.GraalOptions.CanOmitFrame; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
26 import static com.oracle.graal.compiler.common.GraalOptions.ZapStackOnMethodEntry; |
22790
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
27 import static jdk.vm.ci.amd64.AMD64.r10; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
28 import static jdk.vm.ci.amd64.AMD64.rax; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
29 import static jdk.vm.ci.amd64.AMD64.rsp; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
30 import static jdk.vm.ci.code.ValueUtil.asRegister; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
31 import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; |
22614
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
32 |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
33 import java.util.Set; |
15838
15771ff797b4
Pass the compiled method to LIR factory
Christian Wimmer <christian.wimmer@oracle.com>
parents:
15456
diff
changeset
|
34 |
22790
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
35 import jdk.vm.ci.amd64.AMD64; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
36 import jdk.vm.ci.code.CallingConvention; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
37 import jdk.vm.ci.code.Register; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
38 import jdk.vm.ci.code.RegisterConfig; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
39 import jdk.vm.ci.code.StackSlot; |
23348
9306a9611097
Update JVMCI import: Make CallingConvention.Type extensible; remove unused stackOnly parameter
Christian Wimmer <christian.wimmer@oracle.com>
parents:
23347
diff
changeset
|
40 import jdk.vm.ci.hotspot.HotSpotCallingConventionType; |
22790
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
41 import jdk.vm.ci.hotspot.HotSpotVMConfig; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
42 import jdk.vm.ci.meta.JavaType; |
615f3bbbb174
Update jvmci and truffle import: Rename jdk.internal.jvmci to jdk.vm.ci
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
22788
diff
changeset
|
43 import jdk.vm.ci.meta.ResolvedJavaMethod; |
22054 | 44 |
22614
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
45 import com.oracle.graal.asm.Assembler; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
46 import com.oracle.graal.asm.Label; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
47 import com.oracle.graal.asm.amd64.AMD64Address; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
48 import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
49 import com.oracle.graal.asm.amd64.AMD64MacroAssembler; |
23316
52f4acf6f365
Update import: Move CompilationResult and DataSection from JVMCI to Graal.
Roland Schatz <roland.schatz@oracle.com>
parents:
22927
diff
changeset
|
50 import com.oracle.graal.code.CompilationResult; |
22785
3077ac9a6b0d
Split LIR matching rules out of NodeLIRBuilder to allow independent subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents:
22638
diff
changeset
|
51 import com.oracle.graal.compiler.amd64.AMD64NodeMatchRules; |
22614
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
52 import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
53 import com.oracle.graal.compiler.target.Backend; |
23316
52f4acf6f365
Update import: Move CompilationResult and DataSection from JVMCI to Graal.
Roland Schatz <roland.schatz@oracle.com>
parents:
22927
diff
changeset
|
54 import com.oracle.graal.hotspot.HotSpotDataBuilder; |
22614
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
55 import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
56 import com.oracle.graal.hotspot.HotSpotHostBackend; |
23345
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
57 import com.oracle.graal.hotspot.HotSpotLIRGenerationResult; |
22614
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
58 import com.oracle.graal.hotspot.meta.HotSpotForeignCallsProvider; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
59 import com.oracle.graal.hotspot.meta.HotSpotProviders; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
60 import com.oracle.graal.hotspot.stubs.Stub; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
61 import com.oracle.graal.lir.LIR; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
62 import com.oracle.graal.lir.amd64.AMD64Call; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
63 import com.oracle.graal.lir.amd64.AMD64FrameMap; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
64 import com.oracle.graal.lir.amd64.AMD64FrameMapBuilder; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
65 import com.oracle.graal.lir.asm.CompilationResultBuilder; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
66 import com.oracle.graal.lir.asm.CompilationResultBuilderFactory; |
23316
52f4acf6f365
Update import: Move CompilationResult and DataSection from JVMCI to Graal.
Roland Schatz <roland.schatz@oracle.com>
parents:
22927
diff
changeset
|
67 import com.oracle.graal.lir.asm.DataBuilder; |
22614
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
68 import com.oracle.graal.lir.asm.FrameContext; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
69 import com.oracle.graal.lir.framemap.FrameMap; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
70 import com.oracle.graal.lir.framemap.FrameMapBuilder; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
71 import com.oracle.graal.lir.gen.LIRGenerationResult; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
72 import com.oracle.graal.lir.gen.LIRGeneratorTool; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
73 import com.oracle.graal.nodes.StructuredGraph; |
9f0e536ee385
restricted Unsafe capability access to package or class scope (GRAAL-1257)
Doug Simon <doug.simon@oracle.com>
parents:
22482
diff
changeset
|
74 import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
75 |
5844
a432e6d43aa1
fixed bugs related to -G:+InlineVTableStubs and re-enabled it by default
Doug Simon <doug.simon@oracle.com>
parents:
5841
diff
changeset
|
76 /** |
a432e6d43aa1
fixed bugs related to -G:+InlineVTableStubs and re-enabled it by default
Doug Simon <doug.simon@oracle.com>
parents:
5841
diff
changeset
|
77 * HotSpot AMD64 specific backend. |
a432e6d43aa1
fixed bugs related to -G:+InlineVTableStubs and re-enabled it by default
Doug Simon <doug.simon@oracle.com>
parents:
5841
diff
changeset
|
78 */ |
12580
7876c59a7a2f
refactored all deferred initialization of backends into HotSpotBackend
Doug Simon <doug.simon@oracle.com>
parents:
12557
diff
changeset
|
79 public class AMD64HotSpotBackend extends HotSpotHostBackend { |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
80 |
22637
4dab2545d435
removed HotSpotGraalRuntime singleton - it's now owned by a HotSpotGraalCompiler instance (GRAAL-1235)
Doug Simon <doug.simon@oracle.com>
parents:
22614
diff
changeset
|
81 public AMD64HotSpotBackend(HotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { |
4dab2545d435
removed HotSpotGraalRuntime singleton - it's now owned by a HotSpotGraalCompiler instance (GRAAL-1235)
Doug Simon <doug.simon@oracle.com>
parents:
22614
diff
changeset
|
82 super(config, runtime, providers); |
6483
e11b2c8f374b
modified NewInstanceStubCall to use information provided by the (platform independent) backend instead of AMD64 specific nodes for linking the stub call
Doug Simon <doug.simon@oracle.com>
parents:
6482
diff
changeset
|
83 } |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
84 |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
85 @Override |
18155
448be95baef8
Add Backend.newFrameMapBuilder().
Josef Eisl <josef.eisl@jku.at>
parents:
18152
diff
changeset
|
86 public FrameMapBuilder newFrameMapBuilder(RegisterConfig registerConfig) { |
18458
ff3f0bf30b2e
DelayedFrameMapBuilder: require non null register config.
Josef Eisl <josef.eisl@jku.at>
parents:
18457
diff
changeset
|
87 RegisterConfig registerConfigNonNull = registerConfig == null ? getCodeCache().getRegisterConfig() : registerConfig; |
ff3f0bf30b2e
DelayedFrameMapBuilder: require non null register config.
Josef Eisl <josef.eisl@jku.at>
parents:
18457
diff
changeset
|
88 return new AMD64FrameMapBuilder(newFrameMap(registerConfigNonNull), getCodeCache(), registerConfigNonNull); |
18155
448be95baef8
Add Backend.newFrameMapBuilder().
Josef Eisl <josef.eisl@jku.at>
parents:
18152
diff
changeset
|
89 } |
448be95baef8
Add Backend.newFrameMapBuilder().
Josef Eisl <josef.eisl@jku.at>
parents:
18152
diff
changeset
|
90 |
448be95baef8
Add Backend.newFrameMapBuilder().
Josef Eisl <josef.eisl@jku.at>
parents:
18152
diff
changeset
|
91 @Override |
18432
6b58802e45b2
Revert Backend.frameMap(FrameMapBuilder) to Backend.frameMap(RegisterConfig).
Josef Eisl <josef.eisl@jku.at>
parents:
18424
diff
changeset
|
92 public FrameMap newFrameMap(RegisterConfig registerConfig) { |
22238
9c811a5e6a62
Split HotSpotReferenceMap into separate builder and result class, and move the builder class from jvmci to graal.
Roland Schatz <roland.schatz@oracle.com>
parents:
22054
diff
changeset
|
93 return new AMD64FrameMap(getCodeCache(), registerConfig, this); |
10956 | 94 } |
95 | |
96 @Override | |
23347
f868bd0c3f02
Make CallingConvention in HotSpotHostBackend instead of passing it in as a parameter to GraalCompiler.compile
Christian Wimmer <christian.wimmer@oracle.com>
parents:
23345
diff
changeset
|
97 public LIRGeneratorTool newLIRGenerator(LIRGenerationResult lirGenRes) { |
f868bd0c3f02
Make CallingConvention in HotSpotHostBackend instead of passing it in as a parameter to GraalCompiler.compile
Christian Wimmer <christian.wimmer@oracle.com>
parents:
23345
diff
changeset
|
98 return new AMD64HotSpotLIRGenerator(getProviders(), config(), lirGenRes); |
14809
73774616a6b3
Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents:
14807
diff
changeset
|
99 } |
73774616a6b3
Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents:
14807
diff
changeset
|
100 |
73774616a6b3
Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents:
14807
diff
changeset
|
101 @Override |
23347
f868bd0c3f02
Make CallingConvention in HotSpotHostBackend instead of passing it in as a parameter to GraalCompiler.compile
Christian Wimmer <christian.wimmer@oracle.com>
parents:
23345
diff
changeset
|
102 public LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, StructuredGraph graph, Object stub) { |
f868bd0c3f02
Make CallingConvention in HotSpotHostBackend instead of passing it in as a parameter to GraalCompiler.compile
Christian Wimmer <christian.wimmer@oracle.com>
parents:
23345
diff
changeset
|
103 return new HotSpotLIRGenerationResult(compilationUnitName, lir, frameMapBuilder, makeCallingConvention(graph, (Stub) stub), stub); |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
104 } |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
105 |
14841
47e4d2e01c6e
Split LIRGenerator and fix AMD64 backend.
Josef Eisl <josef.eisl@jku.at>
parents:
14826
diff
changeset
|
106 @Override |
15338
5e544920ad9f
Rename Backend.newNodeLIRGenerator to Backend.newNodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
15337
diff
changeset
|
107 public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { |
22785
3077ac9a6b0d
Split LIR matching rules out of NodeLIRBuilder to allow independent subclasses
Christian Wimmer <christian.wimmer@oracle.com>
parents:
22638
diff
changeset
|
108 return new AMD64HotSpotNodeLIRBuilder(graph, lirGen, new AMD64NodeMatchRules(lirGen)); |
14841
47e4d2e01c6e
Split LIRGenerator and fix AMD64 backend.
Josef Eisl <josef.eisl@jku.at>
parents:
14826
diff
changeset
|
109 } |
47e4d2e01c6e
Split LIRGenerator and fix AMD64 backend.
Josef Eisl <josef.eisl@jku.at>
parents:
14826
diff
changeset
|
110 |
14927
93de07975ea9
Create dedicated BaselineBytecodeParser, BytecodeLIRBuilder and amd64 specialization.
Josef Eisl <josef.eisl@jku.at>
parents:
14921
diff
changeset
|
111 @Override |
23345
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
112 protected void bangStackWithOffset(CompilationResultBuilder crb, int bangOffset) { |
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
113 AMD64MacroAssembler asm = (AMD64MacroAssembler) crb.asm; |
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
114 int pos = asm.position(); |
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
115 asm.movl(new AMD64Address(rsp, -bangOffset), AMD64.rax); |
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
116 assert asm.position() - pos >= PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE; |
7808
932a45568706
Move stack banging code to the AMD64-specific code.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
117 } |
932a45568706
Move stack banging code to the AMD64-specific code.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7530
diff
changeset
|
118 |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
119 /** |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
120 * The size of the instruction used to patch the verified entry point of an nmethod when the |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
121 * nmethod is made non-entrant or a zombie (e.g. during deopt or class unloading). The first |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
122 * instruction emitted at an nmethod's verified entry point must be at least this length to |
13245 | 123 * ensure mt-safe patching. |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
124 */ |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
125 public static final int PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE = 5; |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
126 |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
127 /** |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
128 * Emits code at the verified entry point and return point(s) of a method. |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
129 */ |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
130 class HotSpotFrameContext implements FrameContext { |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
131 |
9451
3ccda80d466b
stack overflow check and deopt/exception handler entry points are omitted from compiled stubs
Doug Simon <doug.simon@oracle.com>
parents:
9415
diff
changeset
|
132 final boolean isStub; |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
133 final boolean omitFrame; |
9451
3ccda80d466b
stack overflow check and deopt/exception handler entry points are omitted from compiled stubs
Doug Simon <doug.simon@oracle.com>
parents:
9415
diff
changeset
|
134 |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
135 HotSpotFrameContext(boolean isStub, boolean omitFrame) { |
9451
3ccda80d466b
stack overflow check and deopt/exception handler entry points are omitted from compiled stubs
Doug Simon <doug.simon@oracle.com>
parents:
9415
diff
changeset
|
136 this.isStub = isStub; |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
137 this.omitFrame = omitFrame; |
9451
3ccda80d466b
stack overflow check and deopt/exception handler entry points are omitted from compiled stubs
Doug Simon <doug.simon@oracle.com>
parents:
9415
diff
changeset
|
138 } |
3ccda80d466b
stack overflow check and deopt/exception handler entry points are omitted from compiled stubs
Doug Simon <doug.simon@oracle.com>
parents:
9415
diff
changeset
|
139 |
13234
7e237378923d
made the frameContext of a CompilationResultBuilder always non-null and added FrameContext.hasFrame() to determine if a frame is actually generated
Doug Simon <doug.simon@oracle.com>
parents:
13229
diff
changeset
|
140 public boolean hasFrame() { |
7e237378923d
made the frameContext of a CompilationResultBuilder always non-null and added FrameContext.hasFrame() to determine if a frame is actually generated
Doug Simon <doug.simon@oracle.com>
parents:
13229
diff
changeset
|
141 return !omitFrame; |
7e237378923d
made the frameContext of a CompilationResultBuilder always non-null and added FrameContext.hasFrame() to determine if a frame is actually generated
Doug Simon <doug.simon@oracle.com>
parents:
13229
diff
changeset
|
142 } |
7e237378923d
made the frameContext of a CompilationResultBuilder always non-null and added FrameContext.hasFrame() to determine if a frame is actually generated
Doug Simon <doug.simon@oracle.com>
parents:
13229
diff
changeset
|
143 |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
144 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
145 public void enter(CompilationResultBuilder crb) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
146 FrameMap frameMap = crb.frameMap; |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
147 int frameSize = frameMap.frameSize(); |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
148 AMD64MacroAssembler asm = (AMD64MacroAssembler) crb.asm; |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
149 if (omitFrame) { |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
150 if (!isStub) { |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
151 asm.nop(PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE); |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
152 } |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
153 } else { |
14031
390c4b742890
made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents:
13895
diff
changeset
|
154 int verifiedEntryPointOffset = asm.position(); |
23345
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
155 if (!isStub) { |
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
156 emitStackOverflowCheck(crb); |
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
157 // assert asm.position() - verifiedEntryPointOffset >= |
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
158 // PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE; |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
159 } |
14031
390c4b742890
made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents:
13895
diff
changeset
|
160 if (!isStub && asm.position() == verifiedEntryPointOffset) { |
13310
733cccc125ed
added subqWide to AMD64Assembler
Doug Simon <doug.simon@oracle.com>
parents:
13252
diff
changeset
|
161 asm.subqWide(rsp, frameSize); |
14031
390c4b742890
made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents:
13895
diff
changeset
|
162 assert asm.position() - verifiedEntryPointOffset >= PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE; |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
163 } else { |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
164 asm.decrementq(rsp, frameSize); |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
165 } |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
166 if (ZapStackOnMethodEntry.getValue()) { |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
167 final int intSize = 4; |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
168 for (int i = 0; i < frameSize / intSize; ++i) { |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
169 asm.movl(new AMD64Address(rsp, i * intSize), 0xC1C1C1C1); |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
170 } |
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
171 } |
22482
aacbf2e9aa42
Remove dead code.
Roland Schatz <roland.schatz@oracle.com>
parents:
22238
diff
changeset
|
172 assert frameMap.getRegisterConfig().getCalleeSaveRegisters() == null; |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
173 } |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
174 } |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
175 |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
176 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
177 public void leave(CompilationResultBuilder crb) { |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
178 if (!omitFrame) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
179 AMD64MacroAssembler asm = (AMD64MacroAssembler) crb.asm; |
22482
aacbf2e9aa42
Remove dead code.
Roland Schatz <roland.schatz@oracle.com>
parents:
22238
diff
changeset
|
180 assert crb.frameMap.getRegisterConfig().getCalleeSaveRegisters() == null; |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
181 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
182 int frameSize = crb.frameMap.frameSize(); |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
183 asm.incrementq(rsp, frameSize); |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
184 } |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
185 } |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
186 } |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
187 |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
188 @Override |
14032
d1c1f103d42c
renamed com.oracle.graal.asm.AbstractAssembler to com.oracle.graal.asm.Assembler
twisti
parents:
14031
diff
changeset
|
189 protected Assembler createAssembler(FrameMap frameMap) { |
18123
3c7e73362d6a
Encapsulate FrameMap.registerConfig & FrameMap.target.
Josef Eisl <josef.eisl@jku.at>
parents:
16895
diff
changeset
|
190 return new AMD64MacroAssembler(getTarget(), frameMap.getRegisterConfig()); |
9432
6680389bd36f
Make assembler creation in backend more extensible.
Roland Schatz <roland.schatz@oracle.com>
parents:
9415
diff
changeset
|
191 } |
6680389bd36f
Make assembler creation in backend more extensible.
Roland Schatz <roland.schatz@oracle.com>
parents:
9415
diff
changeset
|
192 |
6680389bd36f
Make assembler creation in backend more extensible.
Roland Schatz <roland.schatz@oracle.com>
parents:
9415
diff
changeset
|
193 @Override |
18149
aed00dc20923
Pass FrameMap to Backend.newCompilationResultBuilder().
Josef Eisl <josef.eisl@jku.at>
parents:
18148
diff
changeset
|
194 public CompilationResultBuilder newCompilationResultBuilder(LIRGenerationResult lirGenRen, FrameMap frameMap, CompilationResult compilationResult, CompilationResultBuilderFactory factory) { |
5251
467de393651a
optimization: frame prologue & epilogue ommitted for methods with no spills, no callee-saved registers, no incoming stack args and no debug info
Doug Simon <doug.simon@oracle.com>
parents:
5242
diff
changeset
|
195 // Omit the frame if the method: |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7300
diff
changeset
|
196 // - has no spill slots or other slots allocated during register allocation |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7300
diff
changeset
|
197 // - has no callee-saved registers |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7300
diff
changeset
|
198 // - has no incoming arguments passed on the stack |
10761
dd7a8807378b
cannot omit frame for compiled methods that make a foreign call (GRAAL-362)
Doug Simon <doug.simon@oracle.com>
parents:
10732
diff
changeset
|
199 // - has no deoptimization points |
dd7a8807378b
cannot omit frame for compiled methods that make a foreign call (GRAAL-362)
Doug Simon <doug.simon@oracle.com>
parents:
10732
diff
changeset
|
200 // - makes no foreign calls (which require an aligned stack) |
23345
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
201 HotSpotLIRGenerationResult gen = (HotSpotLIRGenerationResult) lirGenRen; |
14796
f5b3292b4ded
Restrict access to members of LIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents:
14142
diff
changeset
|
202 LIR lir = gen.getLIR(); |
14807
c3242028cc44
Introduce specialized LIRGenerationResults for Targets if needed.
Josef Eisl <josef.eisl@jku.at>
parents:
14804
diff
changeset
|
203 assert gen.getDeoptimizationRescueSlot() == null || frameMap.frameNeedsAllocating() : "method that can deoptimize must have a frame"; |
10761
dd7a8807378b
cannot omit frame for compiled methods that make a foreign call (GRAAL-362)
Doug Simon <doug.simon@oracle.com>
parents:
10732
diff
changeset
|
204 boolean omitFrame = CanOmitFrame.getValue() && !frameMap.frameNeedsAllocating() && !lir.hasArgInCallerFrame() && !gen.hasForeignCall(); |
5251
467de393651a
optimization: frame prologue & epilogue ommitted for methods with no spills, no callee-saved registers, no incoming stack args and no debug info
Doug Simon <doug.simon@oracle.com>
parents:
5242
diff
changeset
|
205 |
9613
0c17815817a4
removed LIRGenerator.method field
Doug Simon <doug.simon@oracle.com>
parents:
9612
diff
changeset
|
206 Stub stub = gen.getStub(); |
14032
d1c1f103d42c
renamed com.oracle.graal.asm.AbstractAssembler to com.oracle.graal.asm.Assembler
twisti
parents:
14031
diff
changeset
|
207 Assembler masm = createAssembler(frameMap); |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
208 HotSpotFrameContext frameContext = new HotSpotFrameContext(stub != null, omitFrame); |
23316
52f4acf6f365
Update import: Move CompilationResult and DataSection from JVMCI to Graal.
Roland Schatz <roland.schatz@oracle.com>
parents:
22927
diff
changeset
|
209 DataBuilder dataBuilder = new HotSpotDataBuilder(getCodeCache().getTarget()); |
52f4acf6f365
Update import: Move CompilationResult and DataSection from JVMCI to Graal.
Roland Schatz <roland.schatz@oracle.com>
parents:
22927
diff
changeset
|
210 CompilationResultBuilder crb = factory.createBuilder(getCodeCache(), getForeignCalls(), frameMap, masm, dataBuilder, frameContext, compilationResult); |
15180
7a9531f50cd8
renamed com.oracle.graal.api.code.CompilationResult.frameSize to totalFrameSize
twisti
parents:
15176
diff
changeset
|
211 crb.setTotalFrameSize(frameMap.totalFrameSize()); |
23345
3e4b96f3e4d3
Update graal import: stack banging must take space required for deopt into account
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
23316
diff
changeset
|
212 crb.setMaxInterpreterFrameSize(gen.getMaxInterpreterFrameSize()); |
14807
c3242028cc44
Introduce specialized LIRGenerationResults for Targets if needed.
Josef Eisl <josef.eisl@jku.at>
parents:
14804
diff
changeset
|
213 StackSlot deoptimizationRescueSlot = gen.getDeoptimizationRescueSlot(); |
9451
3ccda80d466b
stack overflow check and deopt/exception handler entry points are omitted from compiled stubs
Doug Simon <doug.simon@oracle.com>
parents:
9415
diff
changeset
|
214 if (deoptimizationRescueSlot != null && stub == null) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
215 crb.compilationResult.setCustomStackAreaOffset(frameMap.offsetForStackSlot(deoptimizationRescueSlot)); |
8282
59744882ddeb
moved logic for reserving a special area/slot in a frame (e.g., for use during deoptimization) out of FrameMap and into platform specific backend class
Doug Simon <doug.simon@oracle.com>
parents:
8281
diff
changeset
|
216 } |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
8370
diff
changeset
|
217 |
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
8370
diff
changeset
|
218 if (stub != null) { |
12610
62fb4919edc9
cleaned up mechanism for saving registers and updating the callee save maps in stubs
Doug Simon <doug.simon@oracle.com>
parents:
12580
diff
changeset
|
219 Set<Register> definedRegisters = gatherDefinedRegisters(lir); |
14807
c3242028cc44
Introduce specialized LIRGenerationResults for Targets if needed.
Josef Eisl <josef.eisl@jku.at>
parents:
14804
diff
changeset
|
220 updateStub(stub, definedRegisters, gen.getCalleeSaveInfo(), frameMap); |
9338
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9200
diff
changeset
|
221 } |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9200
diff
changeset
|
222 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
223 return crb; |
9338
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9200
diff
changeset
|
224 } |
9200
9be78aeab2e1
temporaries are recorded for compiled stubs, allowing for better register allocation around calls to such stubs (GRAAL-210)
Doug Simon <doug.simon@oracle.com>
parents:
8370
diff
changeset
|
225 |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
226 @Override |
14065
5dec26f3d4a4
Use LIR instead of LIRGenerator as parameter in emitCode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
14032
diff
changeset
|
227 public void emitCode(CompilationResultBuilder crb, LIR lir, ResolvedJavaMethod installedCodeOwner) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
228 AMD64MacroAssembler asm = (AMD64MacroAssembler) crb.asm; |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
229 FrameMap frameMap = crb.frameMap; |
18123
3c7e73362d6a
Encapsulate FrameMap.registerConfig & FrameMap.target.
Josef Eisl <josef.eisl@jku.at>
parents:
16895
diff
changeset
|
230 RegisterConfig regConfig = frameMap.getRegisterConfig(); |
22638
70a4415a824b
removed methods from HotSpotGraalRuntimeProvider that access statically available JVMCI functionality (GRAAL-1235)
Doug Simon <doug.simon@oracle.com>
parents:
22637
diff
changeset
|
231 HotSpotVMConfig config = config(); |
13245 | 232 Label verifiedEntry = new Label(); |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
233 |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
234 // Emit the prefix |
13245 | 235 emitCodePrefix(installedCodeOwner, crb, asm, regConfig, config, verifiedEntry); |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
236 |
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
237 // Emit code for the LIR |
14065
5dec26f3d4a4
Use LIR instead of LIRGenerator as parameter in emitCode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
14032
diff
changeset
|
238 emitCodeBody(installedCodeOwner, crb, lir); |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
239 |
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
240 // Emit the suffix |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20872
diff
changeset
|
241 emitCodeSuffix(installedCodeOwner, crb, asm, config, frameMap); |
20003
422e60a2f4b9
Implement dynamic instruction counters on assembly level
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
19830
diff
changeset
|
242 |
422e60a2f4b9
Implement dynamic instruction counters on assembly level
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
19830
diff
changeset
|
243 // Profile assembler instructions |
422e60a2f4b9
Implement dynamic instruction counters on assembly level
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
19830
diff
changeset
|
244 profileInstructions(lir, crb); |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
245 } |
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
246 |
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
247 /** |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
248 * Emits the code prior to the verified entry point. |
14921
88dfaf6448e0
Remove LIRGenerationResult from NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
14888
diff
changeset
|
249 * |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
250 * @param installedCodeOwner see {@link Backend#emitCode} |
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
251 */ |
13245 | 252 public void emitCodePrefix(ResolvedJavaMethod installedCodeOwner, CompilationResultBuilder crb, AMD64MacroAssembler asm, RegisterConfig regConfig, HotSpotVMConfig config, Label verifiedEntry) { |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
12363
diff
changeset
|
253 HotSpotProviders providers = getProviders(); |
15311
820c6d353358
added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents:
15292
diff
changeset
|
254 if (installedCodeOwner != null && !installedCodeOwner.isStatic()) { |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20872
diff
changeset
|
255 crb.recordMark(config.MARKID_UNVERIFIED_ENTRY); |
23348
9306a9611097
Update JVMCI import: Make CallingConvention.Type extensible; remove unused stackOnly parameter
Christian Wimmer <christian.wimmer@oracle.com>
parents:
23347
diff
changeset
|
256 CallingConvention cc = regConfig.getCallingConvention(HotSpotCallingConventionType.JavaCallee, null, new JavaType[]{providers.getMetaAccess().lookupJavaType(Object.class)}, getTarget()); |
7530
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7300
diff
changeset
|
257 Register inlineCacheKlass = rax; // see definition of IC_Klass in |
5e3d1a68664e
applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents:
7300
diff
changeset
|
258 // c1_LIRAssembler_x86.cpp |
6470
b1010f7bc0bf
expanded CallingConvention API class to also include the location of the value (if any) returned by a call
Doug Simon <doug.simon@oracle.com>
parents:
6462
diff
changeset
|
259 Register receiver = asRegister(cc.getArgument(0)); |
8167
7f57c30575c8
Make AMD64Address a low-level representation for use by the assembler only.
Roland Schatz <roland.schatz@oracle.com>
parents:
8166
diff
changeset
|
260 AMD64Address src = new AMD64Address(receiver, config.hubOffset); |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
261 |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
12363
diff
changeset
|
262 if (config.useCompressedClassPointers) { |
10732
0bd794eb8222
Add compressed oop support in HotSpot Backend
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
10666
diff
changeset
|
263 Register register = r10; |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13318
diff
changeset
|
264 AMD64HotSpotMove.decodeKlassPointer(asm, register, providers.getRegisters().getHeapBaseRegister(), src, config.getKlassEncoding()); |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13318
diff
changeset
|
265 if (config.narrowKlassBase != 0) { |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13318
diff
changeset
|
266 // The heap base register was destroyed above, so restore it |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13318
diff
changeset
|
267 asm.movq(providers.getRegisters().getHeapBaseRegister(), config.narrowOopBase); |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13318
diff
changeset
|
268 } |
10732
0bd794eb8222
Add compressed oop support in HotSpot Backend
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
10666
diff
changeset
|
269 asm.cmpq(inlineCacheKlass, register); |
0bd794eb8222
Add compressed oop support in HotSpot Backend
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
10666
diff
changeset
|
270 } else { |
0bd794eb8222
Add compressed oop support in HotSpot Backend
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
10666
diff
changeset
|
271 asm.cmpq(inlineCacheKlass, src); |
0bd794eb8222
Add compressed oop support in HotSpot Backend
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
10666
diff
changeset
|
272 } |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
273 AMD64Call.directConditionalJmp(crb, asm, getForeignCalls().lookupForeignCall(IC_MISS_HANDLER), ConditionFlag.NotEqual); |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
274 } |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
275 |
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
276 asm.align(config.codeEntryAlignment); |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20872
diff
changeset
|
277 crb.recordMark(config.MARKID_OSR_ENTRY); |
13245 | 278 asm.bind(verifiedEntry); |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20872
diff
changeset
|
279 crb.recordMark(config.MARKID_VERIFIED_ENTRY); |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
280 } |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
281 |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
282 /** |
13223
78c808233ff1
ensure instruction at verified entry point is safely patchable (GRAAL-605)
Doug Simon <doug.simon@oracle.com>
parents:
12610
diff
changeset
|
283 * Emits the code which starts at the verified entry point. |
14921
88dfaf6448e0
Remove LIRGenerationResult from NodeLIRBuilder.
Josef Eisl <josef.eisl@jku.at>
parents:
14888
diff
changeset
|
284 * |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
285 * @param installedCodeOwner see {@link Backend#emitCode} |
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
286 */ |
14065
5dec26f3d4a4
Use LIR instead of LIRGenerator as parameter in emitCode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
14032
diff
changeset
|
287 public void emitCodeBody(ResolvedJavaMethod installedCodeOwner, CompilationResultBuilder crb, LIR lir) { |
5dec26f3d4a4
Use LIR instead of LIRGenerator as parameter in emitCode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
14032
diff
changeset
|
288 crb.emit(lir); |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
289 } |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
290 |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
291 /** |
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
292 * @param installedCodeOwner see {@link Backend#emitCode} |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20872
diff
changeset
|
293 * @param config |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
294 */ |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20872
diff
changeset
|
295 public void emitCodeSuffix(ResolvedJavaMethod installedCodeOwner, CompilationResultBuilder crb, AMD64MacroAssembler asm, HotSpotVMConfig config, FrameMap frameMap) { |
12502
28f56bf7c06a
added support code for Truffle to inject special tail-call code into the prefix of OptimizedCallTarget.call(PackedFrame, Arguments)
Doug Simon <doug.simon@oracle.com>
parents:
12431
diff
changeset
|
296 HotSpotProviders providers = getProviders(); |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
297 HotSpotFrameContext frameContext = (HotSpotFrameContext) crb.frameContext; |
13234
7e237378923d
made the frameContext of a CompilationResultBuilder always non-null and added FrameContext.hasFrame() to determine if a frame is actually generated
Doug Simon <doug.simon@oracle.com>
parents:
13229
diff
changeset
|
298 if (!frameContext.isStub) { |
12429
5124eeec1a7b
split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents:
12363
diff
changeset
|
299 HotSpotForeignCallsProvider foreignCalls = providers.getForeignCalls(); |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20872
diff
changeset
|
300 crb.recordMark(config.MARKID_EXCEPTION_HANDLER_ENTRY); |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13223
diff
changeset
|
301 AMD64Call.directCall(crb, asm, foreignCalls.lookupForeignCall(EXCEPTION_HANDLER), null, false, null); |
21413
15a46a918fc1
removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20872
diff
changeset
|
302 crb.recordMark(config.MARKID_DEOPT_HANDLER_ENTRY); |
15456
bb97b75d1d65
AMD64: implemented DeoptimizationStub.deoptimizationHandler
twisti
parents:
15338
diff
changeset
|
303 AMD64Call.directCall(crb, asm, foreignCalls.lookupForeignCall(DEOPTIMIZATION_HANDLER), null, false, null); |
5251
467de393651a
optimization: frame prologue & epilogue ommitted for methods with no spills, no callee-saved registers, no incoming stack args and no debug info
Doug Simon <doug.simon@oracle.com>
parents:
5242
diff
changeset
|
304 } else { |
467de393651a
optimization: frame prologue & epilogue ommitted for methods with no spills, no callee-saved registers, no incoming stack args and no debug info
Doug Simon <doug.simon@oracle.com>
parents:
5242
diff
changeset
|
305 // No need to emit the stubs for entries back into the method since |
467de393651a
optimization: frame prologue & epilogue ommitted for methods with no spills, no callee-saved registers, no incoming stack args and no debug info
Doug Simon <doug.simon@oracle.com>
parents:
5242
diff
changeset
|
306 // it has no calls that can cause such "return" entries |
13829
fd267819dbdb
fixed or removed incorrect assertions
Doug Simon <doug.simon@oracle.com>
parents:
13520
diff
changeset
|
307 |
fd267819dbdb
fixed or removed incorrect assertions
Doug Simon <doug.simon@oracle.com>
parents:
13520
diff
changeset
|
308 if (frameContext.omitFrame) { |
fd267819dbdb
fixed or removed incorrect assertions
Doug Simon <doug.simon@oracle.com>
parents:
13520
diff
changeset
|
309 // Cannot access slots in caller's frame if my frame is omitted |
14065
5dec26f3d4a4
Use LIR instead of LIRGenerator as parameter in emitCode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
14032
diff
changeset
|
310 assert !frameMap.accessesCallerFrame(); |
13829
fd267819dbdb
fixed or removed incorrect assertions
Doug Simon <doug.simon@oracle.com>
parents:
13520
diff
changeset
|
311 } |
5251
467de393651a
optimization: frame prologue & epilogue ommitted for methods with no spills, no callee-saved registers, no incoming stack args and no debug info
Doug Simon <doug.simon@oracle.com>
parents:
5242
diff
changeset
|
312 } |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
313 } |
13837
ed3a1471e133
Add the Graal Native Function Interface
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
13829
diff
changeset
|
314 |
21510
0ee2ed36d079
Backend: add #newRegisterAllocationConfig.
Josef Eisl <josef.eisl@jku.at>
parents:
21413
diff
changeset
|
315 @Override |
0ee2ed36d079
Backend: add #newRegisterAllocationConfig.
Josef Eisl <josef.eisl@jku.at>
parents:
21413
diff
changeset
|
316 public RegisterAllocationConfig newRegisterAllocationConfig(RegisterConfig registerConfig) { |
0ee2ed36d079
Backend: add #newRegisterAllocationConfig.
Josef Eisl <josef.eisl@jku.at>
parents:
21413
diff
changeset
|
317 RegisterConfig registerConfigNonNull = registerConfig == null ? getCodeCache().getRegisterConfig() : registerConfig; |
0ee2ed36d079
Backend: add #newRegisterAllocationConfig.
Josef Eisl <josef.eisl@jku.at>
parents:
21413
diff
changeset
|
318 return new AMD64HotSpotRegisterAllocationConfig(registerConfigNonNull); |
0ee2ed36d079
Backend: add #newRegisterAllocationConfig.
Josef Eisl <josef.eisl@jku.at>
parents:
21413
diff
changeset
|
319 } |
5233
efbb1e33e2f3
removed XIR prologue and epilogues - architecture and runtime specific subclass of Backend is now used instead
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
320 } |