annotate graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java @ 14853:6bde7deb5be1

Adopt HSAILLIRGenerator.
author Josef Eisl <josef.eisl@jku.at>
date Thu, 27 Mar 2014 15:55:08 +0100
parents f49e2f9cbdc3
children f6630873316b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
1 /*
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
4 *
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
8 *
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
13 * accompanied this code).
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
14 *
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
18 *
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
21 * questions.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
22 */
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
23 package com.oracle.graal.hotspot.hsail;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
24
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
25 import static com.oracle.graal.api.code.CallingConvention.Type.*;
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
26 import static com.oracle.graal.api.code.CodeUtil.*;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
27 import static com.oracle.graal.api.code.ValueUtil.*;
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
28 import static com.oracle.graal.compiler.GraalCompiler.*;
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
29 import static com.oracle.graal.api.meta.LocationIdentity.*;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
30
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
31 import java.lang.reflect.*;
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
32 import java.util.*;
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
33
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
34 import com.amd.okra.*;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
35 import com.oracle.graal.api.code.*;
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
36 import com.oracle.graal.api.code.Assumptions.Assumption;
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
37 import com.oracle.graal.api.code.CallingConvention.Type;
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
38 import com.oracle.graal.api.code.CompilationResult.Call;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
39 import com.oracle.graal.api.code.CompilationResult.CodeAnnotation;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
40 import com.oracle.graal.api.code.CompilationResult.DataPatch;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
41 import com.oracle.graal.api.code.CompilationResult.ExceptionHandler;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
42 import com.oracle.graal.api.code.CompilationResult.Infopoint;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
43 import com.oracle.graal.api.code.CompilationResult.Mark;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
44 import com.oracle.graal.api.meta.*;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
45 import com.oracle.graal.asm.*;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
46 import com.oracle.graal.asm.hsail.*;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
47 import com.oracle.graal.compiler.gen.*;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
48 import com.oracle.graal.debug.*;
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
49 import com.oracle.graal.debug.Debug.Scope;
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
50 import com.oracle.graal.gpu.*;
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
51 import com.oracle.graal.graph.*;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
52 import com.oracle.graal.hotspot.*;
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
53 import com.oracle.graal.hotspot.bridge.CompilerToVM.CodeInstallResult;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
54 import com.oracle.graal.hotspot.meta.*;
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
55 import com.oracle.graal.hotspot.nodes.*;
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
56 import com.oracle.graal.hsail.*;
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
57 import com.oracle.graal.java.*;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
58 import com.oracle.graal.lir.*;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
59 import com.oracle.graal.lir.asm.*;
10956
563c6d1994c0 added architecture specific frame maps
twisti
parents: 10662
diff changeset
60 import com.oracle.graal.lir.hsail.*;
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
61 import com.oracle.graal.lir.hsail.HSAILControlFlow.DeoptimizeOp;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
62 import com.oracle.graal.nodes.*;
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
63 import com.oracle.graal.nodes.StructuredGraph.GuardsStage;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
64 import com.oracle.graal.nodes.extended.*;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
65 import com.oracle.graal.nodes.java.*;
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
66 import com.oracle.graal.nodes.type.*;
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
67 import com.oracle.graal.phases.*;
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
68 import com.oracle.graal.phases.tiers.*;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
69
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
70 /**
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
71 * HSAIL specific backend.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
72 */
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
73 public class HSAILHotSpotBackend extends HotSpotBackend {
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
74
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
75 private Map<String, String> paramTypeMap = new HashMap<>();
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
76 private final boolean deviceInitialized;
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
77 // TODO: get maximum Concurrency from okra
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
78 private int maxDeoptIndex = 8 * 40 * 64; // see gpu_hsail.hpp
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
79
12431
7080a96be216 rename: graalRuntime -> runtime, getGraalRuntime -> getRuntime
Doug Simon <doug.simon@oracle.com>
parents: 12429
diff changeset
80 public HSAILHotSpotBackend(HotSpotGraalRuntime runtime, HotSpotProviders providers) {
7080a96be216 rename: graalRuntime -> runtime, getGraalRuntime -> getRuntime
Doug Simon <doug.simon@oracle.com>
parents: 12429
diff changeset
81 super(runtime, providers);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
82 paramTypeMap.put("HotSpotResolvedPrimitiveType<int>", "s32");
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
83 paramTypeMap.put("HotSpotResolvedPrimitiveType<float>", "f32");
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
84 paramTypeMap.put("HotSpotResolvedPrimitiveType<double>", "f64");
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
85 paramTypeMap.put("HotSpotResolvedPrimitiveType<long>", "s64");
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
86
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
87 // The order of the conjunction below is important: the OkraUtil
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
88 // call may provision the native library required by the initialize() call
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
89 deviceInitialized = OkraUtil.okraLibExists() && initialize();
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
90 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
91
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11739
diff changeset
92 @Override
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11739
diff changeset
93 public boolean shouldAllocateRegisters() {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11739
diff changeset
94 return true;
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11739
diff changeset
95 }
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11739
diff changeset
96
13308
d3b3c6e17d40 HSAIL: added Math intrinsifications
Doug Simon <doug.simon@oracle.com>
parents: 13234
diff changeset
97 /**
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
98 * Initializes the GPU device.
14774
8594b26fc5d8 fixed incorrect uses of Debug.log API
Doug Simon <doug.simon@oracle.com>
parents: 14768
diff changeset
99 *
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
100 * @return whether or not initialization was successful
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
101 */
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
102 private static native boolean initialize();
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
103
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
104 /**
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
105 * Control how many threads run on simulator (used only from junit tests).
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
106 */
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
107 public void setSimulatorSingleThreaded() {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
108 String simThrEnv = System.getenv("SIMTHREADS");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
109 if (simThrEnv == null || !simThrEnv.equals("1")) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
110 setSimulatorSingleThreaded0();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
111 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
112 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
113
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
114 private static native void setSimulatorSingleThreaded0();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
115
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
116 /**
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
117 * Determines if the GPU device (or simulator) is available and initialized.
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
118 */
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
119 public boolean isDeviceInitialized() {
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
120 return deviceInitialized;
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
121 }
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
122
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
123 /**
13308
d3b3c6e17d40 HSAIL: added Math intrinsifications
Doug Simon <doug.simon@oracle.com>
parents: 13234
diff changeset
124 * Completes the initialization of the HSAIL backend. This includes initializing the providers
d3b3c6e17d40 HSAIL: added Math intrinsifications
Doug Simon <doug.simon@oracle.com>
parents: 13234
diff changeset
125 * and registering any method substitutions specified by the HSAIL backend.
d3b3c6e17d40 HSAIL: added Math intrinsifications
Doug Simon <doug.simon@oracle.com>
parents: 13234
diff changeset
126 */
12797
5341a7fca039 made HSAIL reuse HotSpotLoweringProvider, just with a different set of registers
Doug Simon <doug.simon@oracle.com>
parents: 12664
diff changeset
127 @Override
5341a7fca039 made HSAIL reuse HotSpotLoweringProvider, just with a different set of registers
Doug Simon <doug.simon@oracle.com>
parents: 12664
diff changeset
128 public void completeInitialization() {
5341a7fca039 made HSAIL reuse HotSpotLoweringProvider, just with a different set of registers
Doug Simon <doug.simon@oracle.com>
parents: 12664
diff changeset
129 final HotSpotProviders providers = getProviders();
5341a7fca039 made HSAIL reuse HotSpotLoweringProvider, just with a different set of registers
Doug Simon <doug.simon@oracle.com>
parents: 12664
diff changeset
130 HotSpotVMConfig config = getRuntime().getConfig();
13308
d3b3c6e17d40 HSAIL: added Math intrinsifications
Doug Simon <doug.simon@oracle.com>
parents: 13234
diff changeset
131 // Initialize the lowering provider.
12797
5341a7fca039 made HSAIL reuse HotSpotLoweringProvider, just with a different set of registers
Doug Simon <doug.simon@oracle.com>
parents: 12664
diff changeset
132 final HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer();
5341a7fca039 made HSAIL reuse HotSpotLoweringProvider, just with a different set of registers
Doug Simon <doug.simon@oracle.com>
parents: 12664
diff changeset
133 lowerer.initialize(providers, config);
13308
d3b3c6e17d40 HSAIL: added Math intrinsifications
Doug Simon <doug.simon@oracle.com>
parents: 13234
diff changeset
134
d3b3c6e17d40 HSAIL: added Math intrinsifications
Doug Simon <doug.simon@oracle.com>
parents: 13234
diff changeset
135 // Register the replacements used by the HSAIL backend.
13902
bdeadcd7101d HSAIL: disable String.equals() substitutions
Doug Simon <doug.simon@oracle.com>
parents: 13900
diff changeset
136 HSAILHotSpotReplacementsImpl replacements = (HSAILHotSpotReplacementsImpl) providers.getReplacements();
bdeadcd7101d HSAIL: disable String.equals() substitutions
Doug Simon <doug.simon@oracle.com>
parents: 13900
diff changeset
137 replacements.completeInitialization();
12797
5341a7fca039 made HSAIL reuse HotSpotLoweringProvider, just with a different set of registers
Doug Simon <doug.simon@oracle.com>
parents: 12664
diff changeset
138 }
5341a7fca039 made HSAIL reuse HotSpotLoweringProvider, just with a different set of registers
Doug Simon <doug.simon@oracle.com>
parents: 12664
diff changeset
139
11739
b8695542d41b added HSAIL register configuration
Doug Simon <doug.simon@oracle.com>
parents: 10956
diff changeset
140 /**
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
141 * Compiles and installs a given method to a GPU binary.
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
142 */
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
143 public HotSpotNmethod compileAndInstallKernel(Method method) {
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
144 ResolvedJavaMethod javaMethod = getProviders().getMetaAccess().lookupJavaMethod(method);
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
145 return installKernel(javaMethod, compileKernel(javaMethod, true));
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
146 }
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
147
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
148 /**
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
149 * Compiles a given method to HSAIL code.
14774
8594b26fc5d8 fixed incorrect uses of Debug.log API
Doug Simon <doug.simon@oracle.com>
parents: 14768
diff changeset
150 *
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
151 * @param makeBinary specifies whether a GPU binary should also be generated for the HSAIL code.
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
152 * If true, the returned value is guaranteed to have a non-zero
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
153 * {@linkplain ExternalCompilationResult#getEntryPoint() entry point}.
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
154 * @return the HSAIL code compiled from {@code method}'s bytecode
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
155 */
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
156 public ExternalCompilationResult compileKernel(ResolvedJavaMethod method, boolean makeBinary) {
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
157 StructuredGraph graph = new StructuredGraph(method);
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
158 HotSpotProviders providers = getProviders();
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
159 MetaAccessProvider metaAccess = getProviders().getMetaAccess();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
160
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
161 // changed this from default to help us generate deopts when needed
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
162 OptimisticOptimizations optimisticOpts = OptimisticOptimizations.ALL;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
163 optimisticOpts.remove(OptimisticOptimizations.Optimization.UseExceptionProbabilityForOperations);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
164 new GraphBuilderPhase.Instance(metaAccess, GraphBuilderConfiguration.getSnippetDefault(), optimisticOpts).apply(graph);
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
165 PhaseSuite<HighTierContext> graphBuilderSuite = providers.getSuites().getDefaultGraphBuilderSuite();
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
166 CallingConvention cc = getCallingConvention(providers.getCodeCache(), Type.JavaCallee, graph.method(), false);
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
167
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
168 // append special HSAILNonNullParametersPhase
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
169 int numArgs = cc.getArguments().length;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
170 graphBuilderSuite.appendPhase(new HSAILNonNullParametersPhase(numArgs));
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
171
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
172 Suites suites = providers.getSuites().getDefaultSuites();
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
173 ExternalCompilationResult hsailCode = compileGraph(graph, null, cc, method, providers, this, this.getTarget(), null, graphBuilderSuite, optimisticOpts, getProfilingInfo(graph), null, suites,
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
174 new ExternalCompilationResult(), CompilationResultBuilderFactory.Default);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
175
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
176 // this code added to dump infopoints
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
177 try (Scope s = Debug.scope("CodeGen")) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
178 if (Debug.isLogEnabled()) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
179 // show infopoints
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
180 List<Infopoint> infoList = hsailCode.getInfopoints();
14774
8594b26fc5d8 fixed incorrect uses of Debug.log API
Doug Simon <doug.simon@oracle.com>
parents: 14768
diff changeset
181 Debug.log("%d HSAIL infopoints", infoList.size());
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
182 for (Infopoint info : infoList) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
183 Debug.log(info.toString());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
184 Debug.log(info.debugInfo.frame().toString());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
185 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
186 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
187 } catch (Throwable e) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
188 throw Debug.handle(e);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
189 }
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
190
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
191 if (makeBinary) {
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
192 if (!deviceInitialized) {
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
193 throw new GraalInternalError("Cannot generate GPU kernel if device is not initialized");
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
194 }
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
195 try (Scope ds = Debug.scope("GeneratingKernelBinary")) {
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
196 long kernel = generateKernel(hsailCode.getTargetCode(), method.getName());
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
197 if (kernel == 0) {
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
198 throw new GraalInternalError("Failed to compile HSAIL kernel");
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
199 }
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
200 hsailCode.setEntryPoint(kernel);
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
201 } catch (Throwable e) {
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
202 throw Debug.handle(e);
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
203 }
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
204 }
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
205 return hsailCode;
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
206 }
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
207
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
208 private static class HSAILNonNullParametersPhase extends Phase {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
209 // we use this to limit the stamping to exclude the final argument in an obj stream method
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
210 private int numArgs;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
211
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
212 public HSAILNonNullParametersPhase(int numArgs) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
213 this.numArgs = numArgs;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
214 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
215
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
216 @Override
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
217 protected void run(StructuredGraph graph) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
218 int argCount = 0;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
219 for (ParameterNode param : graph.getNodes(ParameterNode.class)) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
220 argCount++;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
221 if (argCount < numArgs && param.stamp() instanceof ObjectStamp) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
222 param.setStamp(StampFactory.declaredNonNull(((ObjectStamp) param.stamp()).type()));
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
223 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
224 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
225 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
226 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
227
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
228 /**
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
229 * Generates a GPU binary from HSAIL code.
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
230 */
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
231 private static native long generateKernel(byte[] hsailCode, String name);
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
232
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
233 /**
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
234 * Installs the {@linkplain ExternalCompilationResult#getEntryPoint() GPU binary} associated
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
235 * with some given HSAIL code in the code cache and returns a {@link HotSpotNmethod} handle to
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
236 * the installed code.
14774
8594b26fc5d8 fixed incorrect uses of Debug.log API
Doug Simon <doug.simon@oracle.com>
parents: 14768
diff changeset
237 *
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
238 * @param hsailCode HSAIL compilation result for which a GPU binary has been generated
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
239 * @return a handle to the binary as installed in the HotSpot code cache
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
240 */
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
241 public final HotSpotNmethod installKernel(ResolvedJavaMethod method, ExternalCompilationResult hsailCode) {
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
242 assert hsailCode.getEntryPoint() != 0L;
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
243 // code below here lifted from HotSpotCodeCacheProviders.addExternalMethod
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
244 // used to be return getProviders().getCodeCache().addExternalMethod(method, hsailCode);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
245 HotSpotResolvedJavaMethod javaMethod = (HotSpotResolvedJavaMethod) method;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
246 if (hsailCode.getId() == -1) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
247 hsailCode.setId(javaMethod.allocateCompileId(hsailCode.getEntryBCI()));
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
248 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
249 CompilationResult compilationResult = hsailCode;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
250 StructuredGraph hostGraph = hsailCode.getHostGraph();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
251 if (hostGraph != null) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
252 // TODO get rid of the unverified entry point in the host code
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
253 try (Scope ds = Debug.scope("GeneratingHostGraph")) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
254 HotSpotBackend hostBackend = getRuntime().getHostBackend();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
255 JavaType[] parameterTypes = new JavaType[hostGraph.getNodes(ParameterNode.class).count()];
14774
8594b26fc5d8 fixed incorrect uses of Debug.log API
Doug Simon <doug.simon@oracle.com>
parents: 14768
diff changeset
256 Debug.log("Param count: %d", parameterTypes.length);
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
257 for (int i = 0; i < parameterTypes.length; i++) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
258 ParameterNode parameter = hostGraph.getParameter(i);
14774
8594b26fc5d8 fixed incorrect uses of Debug.log API
Doug Simon <doug.simon@oracle.com>
parents: 14768
diff changeset
259 Debug.log("Param [%d]=%d", i, parameter);
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
260 parameterTypes[i] = parameter.stamp().javaType(hostBackend.getProviders().getMetaAccess());
14774
8594b26fc5d8 fixed incorrect uses of Debug.log API
Doug Simon <doug.simon@oracle.com>
parents: 14768
diff changeset
261 Debug.log(" %s", parameterTypes[i]);
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
262 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
263 CallingConvention cc = hostBackend.getProviders().getCodeCache().getRegisterConfig().getCallingConvention(Type.JavaCallee, method.getSignature().getReturnType(null), parameterTypes,
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
264 hostBackend.getTarget(), false);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
265 CompilationResult hostCode = compileGraph(hostGraph, null, cc, method, hostBackend.getProviders(), hostBackend, this.getTarget(), null,
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
266 hostBackend.getProviders().getSuites().getDefaultGraphBuilderSuite(), OptimisticOptimizations.NONE, null, null,
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
267 hostBackend.getProviders().getSuites().getDefaultSuites(), new CompilationResult(), CompilationResultBuilderFactory.Default);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
268 compilationResult = merge(hostCode, hsailCode);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
269 } catch (Throwable e) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
270 throw Debug.handle(e);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
271 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
272 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
273
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
274 HotSpotNmethod code = new HotSpotNmethod(javaMethod, hsailCode.getName(), false, true);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
275 HotSpotCompiledNmethod compiled = new HotSpotCompiledNmethod(getTarget(), javaMethod, compilationResult);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
276 CodeInstallResult result = getRuntime().getCompilerToVM().installCode(compiled, code, null);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
277 if (result != CodeInstallResult.OK) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
278 return null;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
279 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
280 return code;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
281 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
282
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
283 private static ExternalCompilationResult merge(CompilationResult hostCode, ExternalCompilationResult hsailCode) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
284 ExternalCompilationResult result = new ExternalCompilationResult();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
285
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
286 // from hsail code
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
287 result.setEntryPoint(hsailCode.getEntryPoint());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
288 result.setId(hsailCode.getId());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
289 result.setEntryBCI(hsailCode.getEntryBCI());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
290 assert hsailCode.getMarks().isEmpty();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
291 assert hsailCode.getExceptionHandlers().isEmpty();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
292 assert hsailCode.getDataReferences().isEmpty();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
293
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
294 // from host code
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
295 result.setFrameSize(hostCode.getFrameSize());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
296 result.setCustomStackAreaOffset(hostCode.getCustomStackAreaOffset());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
297 result.setRegisterRestoreEpilogueOffset(hostCode.getRegisterRestoreEpilogueOffset());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
298 result.setTargetCode(hostCode.getTargetCode(), hostCode.getTargetCodeSize());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
299 for (CodeAnnotation annotation : hostCode.getAnnotations()) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
300 result.addAnnotation(annotation);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
301 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
302 CompilationResult.Mark[] noMarks = {};
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
303 for (Mark mark : hostCode.getMarks()) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
304 result.recordMark(mark.pcOffset, mark.id, noMarks);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
305 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
306 for (ExceptionHandler handler : hostCode.getExceptionHandlers()) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
307 result.recordExceptionHandler(handler.pcOffset, handler.handlerPos);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
308 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
309 for (DataPatch patch : hostCode.getDataReferences()) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
310 if (patch.data != null) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
311 if (patch.inline) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
312 result.recordInlineData(patch.pcOffset, patch.data);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
313 } else {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
314 result.recordDataReference(patch.pcOffset, patch.data);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
315 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
316 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
317 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
318 for (Infopoint infopoint : hostCode.getInfopoints()) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
319 if (infopoint instanceof Call) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
320 Call call = (Call) infopoint;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
321 result.recordCall(call.pcOffset, call.size, call.target, call.debugInfo, call.direct);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
322 } else {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
323 result.recordInfopoint(infopoint.pcOffset, infopoint.debugInfo, infopoint.reason);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
324 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
325 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
326
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
327 // merged
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
328 Assumptions mergedAssumptions = new Assumptions(true);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
329 if (hostCode.getAssumptions() != null) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
330 for (Assumption assumption : hostCode.getAssumptions().getAssumptions()) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
331 if (assumption != null) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
332 mergedAssumptions.record(assumption);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
333 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
334 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
335 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
336 if (hsailCode.getAssumptions() != null) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
337 for (Assumption assumption : hsailCode.getAssumptions().getAssumptions()) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
338 if (assumption != null) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
339 mergedAssumptions.record(assumption);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
340 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
341 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
342 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
343 if (!mergedAssumptions.isEmpty()) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
344 result.setAssumptions(mergedAssumptions);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
345 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
346 return result;
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
347 }
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
348
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
349 public boolean executeKernel(HotSpotInstalledCode kernel, int jobSize, Object[] args) throws InvalidInstalledCodeException {
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
350 if (!deviceInitialized) {
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
351 throw new GraalInternalError("Cannot execute GPU kernel if device is not initialized");
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
352 }
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
353 Object[] oopsSaveArea = new Object[maxDeoptIndex * 16];
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
354 return executeKernel0(kernel, jobSize, args, oopsSaveArea);
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
355 }
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
356
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
357 private static native boolean executeKernel0(HotSpotInstalledCode kernel, int jobSize, Object[] args, Object[] oopsSave) throws InvalidInstalledCodeException;
13819
49db2c1e3bee added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents: 13784
diff changeset
358
13784
219a84093dda moved HSAIL compilation harness logic into HSAILHotSpotBackend and deleted HSAILCompilationResult
Doug Simon <doug.simon@oracle.com>
parents: 13318
diff changeset
359 /**
11739
b8695542d41b added HSAIL register configuration
Doug Simon <doug.simon@oracle.com>
parents: 10956
diff changeset
360 * Use the HSAIL register set when the compilation target is HSAIL.
b8695542d41b added HSAIL register configuration
Doug Simon <doug.simon@oracle.com>
parents: 10956
diff changeset
361 */
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
362 @Override
10956
563c6d1994c0 added architecture specific frame maps
twisti
parents: 10662
diff changeset
363 public FrameMap newFrameMap() {
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
364 return new HSAILFrameMap(getCodeCache());
10956
563c6d1994c0 added architecture specific frame maps
twisti
parents: 10662
diff changeset
365 }
563c6d1994c0 added architecture specific frame maps
twisti
parents: 10662
diff changeset
366
563c6d1994c0 added architecture specific frame maps
twisti
parents: 10662
diff changeset
367 @Override
14846
43cd57700476 Apply LIRGenerator refactoring to HSAIL backend.
Josef Eisl <josef.eisl@jku.at>
parents: 14809
diff changeset
368 public LIRGenerator newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) {
43cd57700476 Apply LIRGenerator refactoring to HSAIL backend.
Josef Eisl <josef.eisl@jku.at>
parents: 14809
diff changeset
369 return new HSAILHotSpotLIRGenerator(getProviders(), getRuntime().getConfig(), cc, lirGenRes);
14809
73774616a6b3 Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents: 14804
diff changeset
370 }
73774616a6b3 Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents: 14804
diff changeset
371
73774616a6b3 Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents: 14804
diff changeset
372 @Override
73774616a6b3 Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents: 14804
diff changeset
373 public LIRGenerationResult newLIRGenerationResult(LIR lir, FrameMap frameMap, Object stub) {
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
374 return new HSAILHotSpotLIRGenerationResult(lir, frameMap);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
375 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
376
14846
43cd57700476 Apply LIRGenerator refactoring to HSAIL backend.
Josef Eisl <josef.eisl@jku.at>
parents: 14809
diff changeset
377 @Override
43cd57700476 Apply LIRGenerator refactoring to HSAIL backend.
Josef Eisl <josef.eisl@jku.at>
parents: 14809
diff changeset
378 public NodeLIRGenerator newNodeLIRGenerator(StructuredGraph graph, LIRGenerationResult lirGenRes, LIRGenerator lirGen) {
43cd57700476 Apply LIRGenerator refactoring to HSAIL backend.
Josef Eisl <josef.eisl@jku.at>
parents: 14809
diff changeset
379 return new HSAILHotSpotNodeLIRGenerator(graph, lirGenRes, lirGen);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
380 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
381
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
382 class HotSpotFrameContext implements FrameContext {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
383
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
384 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
385 return true;
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
386 }
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
387
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
388 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13105
diff changeset
389 public void enter(CompilationResultBuilder crb) {
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
390 Debug.log("Nothing to do here");
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
391 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
392
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
393 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13105
diff changeset
394 public void leave(CompilationResultBuilder crb) {
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
395 Debug.log("Nothing to do here");
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
396 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
397 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
398
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
399 /**
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
400 * a class to allow us to save lirGen.
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
401 */
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
402 static class HSAILCompilationResultBuilder extends CompilationResultBuilder {
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
403 public HSAILHotSpotLIRGenerationResult lirGenRes;
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
404
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
405 public HSAILCompilationResultBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, FrameContext frameContext,
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
406 CompilationResult compilationResult, HSAILHotSpotLIRGenerationResult lirGenRes) {
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
407 super(codeCache, foreignCalls, frameMap, asm, frameContext, compilationResult);
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
408 this.lirGenRes = lirGenRes;
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
409 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
410 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
411
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
412 @Override
14032
d1c1f103d42c renamed com.oracle.graal.asm.AbstractAssembler to com.oracle.graal.asm.Assembler
twisti
parents: 14031
diff changeset
413 protected Assembler createAssembler(FrameMap frameMap) {
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
414 return new HSAILAssembler(getTarget());
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
415 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
416
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
417 @Override
14809
73774616a6b3 Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents: 14804
diff changeset
418 public CompilationResultBuilder newCompilationResultBuilder(LIRGenerationResult lirGenRes, CompilationResult compilationResult, CompilationResultBuilderFactory factory) {
73774616a6b3 Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents: 14804
diff changeset
419 FrameMap frameMap = lirGenRes.getFrameMap();
14032
d1c1f103d42c renamed com.oracle.graal.asm.AbstractAssembler to com.oracle.graal.asm.Assembler
twisti
parents: 14031
diff changeset
420 Assembler masm = createAssembler(frameMap);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
421 HotSpotFrameContext frameContext = new HotSpotFrameContext();
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
422 // save lirGen for later use by setHostGraph
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
423 CompilationResultBuilder crb = new HSAILCompilationResultBuilder(getCodeCache(), getForeignCalls(), frameMap, masm, frameContext, compilationResult,
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
424 (HSAILHotSpotLIRGenerationResult) lirGenRes);
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13105
diff changeset
425 crb.setFrameSize(frameMap.frameSize());
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13105
diff changeset
426 return crb;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
427 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
428
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
429 @Override
14065
5dec26f3d4a4 Use LIR instead of LIRGenerator as parameter in emitCode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 14032
diff changeset
430 public void emitCode(CompilationResultBuilder crb, LIR lir, ResolvedJavaMethod method) {
5dec26f3d4a4 Use LIR instead of LIRGenerator as parameter in emitCode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 14032
diff changeset
431 assert method != null : lir + " is not associated with a method";
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
432
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
433 boolean usesDeoptInfo = true; // TODO: make this conditional on something?
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
434
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
435 // Emit the prologue.
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
436 HSAILAssembler asm = (HSAILAssembler) crb.asm;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
437 asm.emitString0("version 0:95: $full : $large;\n");
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
438
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
439 Signature signature = method.getSignature();
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
440 int sigParamCount = signature.getParameterCount(false);
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
441 // We're subtracting 1 because we're not making the final gid as a parameter.
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
442
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
443 int nonConstantParamCount = sigParamCount - 1;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
444 boolean isStatic = (Modifier.isStatic(method.getModifiers()));
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
445 // Determine if this is an object lambda.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
446 boolean isObjectLambda = true;
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
447
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
448 if (signature.getParameterType(nonConstantParamCount, null).getKind() == Kind.Int) {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
449 isObjectLambda = false;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
450 } else {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
451 // Add space for gid int reg.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
452 nonConstantParamCount++;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
453 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
454
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
455 // If this is an instance method, include mappings for the "this" parameter
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
456 // as the first parameter.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
457 if (!isStatic) {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
458 nonConstantParamCount++;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
459 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
460 // Add in any "constant" parameters (currently none).
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
461 int totalParamCount = nonConstantParamCount;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
462 JavaType[] paramtypes = new JavaType[totalParamCount];
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
463 String[] paramNames = new String[totalParamCount];
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
464 int pidx = 0;
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
465 MetaAccessProvider metaAccess = getProviders().getMetaAccess();
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
466 for (int i = 0; i < totalParamCount; i++) {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
467 if (i == 0 && !isStatic) {
12363
78e5badf4b8e moved lookupForeignCall() from CodeCacheProvider to ForeignCallsProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 12045
diff changeset
468 paramtypes[i] = metaAccess.lookupJavaType(Object.class);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
469 paramNames[i] = "%_this";
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
470 } else if (i < nonConstantParamCount) {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
471 if (isObjectLambda && (i == (nonConstantParamCount))) {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
472 // Set up the gid register mapping.
12363
78e5badf4b8e moved lookupForeignCall() from CodeCacheProvider to ForeignCallsProvider (GRAAL-511)
Doug Simon <doug.simon@oracle.com>
parents: 12045
diff changeset
473 paramtypes[i] = metaAccess.lookupJavaType(int.class);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
474 paramNames[i] = "%_gid";
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
475 } else {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
476 paramtypes[i] = signature.getParameterType(pidx++, null);
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
477 paramNames[i] = "%_arg" + i;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
478 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
479 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
480 }
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
481
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
482 asm.emitString0("// " + (isStatic ? "static" : "instance") + " method " + method + "\n");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
483 asm.emitString0("kernel &run ( \n");
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
484
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13105
diff changeset
485 FrameMap frameMap = crb.frameMap;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
486 RegisterConfig regConfig = frameMap.registerConfig;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
487 // Build list of param types which does include the gid (for cc register mapping query).
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
488 JavaType[] ccParamTypes = new JavaType[nonConstantParamCount + 1];
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
489 // Include the gid.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
490 System.arraycopy(paramtypes, 0, ccParamTypes, 0, nonConstantParamCount);
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
491
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
492 // Last entry is always int (its register gets used in the workitemabsid instruction)
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
493 // this is true even for object stream labmdas
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
494 if (sigParamCount > 0) {
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
495 ccParamTypes[ccParamTypes.length - 1] = metaAccess.lookupJavaType(int.class);
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
496 }
12429
5124eeec1a7b split HotSpotRuntime into separate provider implementations
Doug Simon <doug.simon@oracle.com>
parents: 12363
diff changeset
497 CallingConvention cc = regConfig.getCallingConvention(JavaCallee, null, ccParamTypes, getTarget(), false);
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
498
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
499 /**
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
500 * Compute the hsail size mappings up to but not including the last non-constant parameter
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
501 * (which is the gid).
14774
8594b26fc5d8 fixed incorrect uses of Debug.log API
Doug Simon <doug.simon@oracle.com>
parents: 14768
diff changeset
502 *
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
503 */
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
504 String[] paramHsailSizes = new String[totalParamCount];
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
505 for (int i = 0; i < totalParamCount; i++) {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
506 String paramtypeStr = paramtypes[i].toString();
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
507 String sizeStr = paramTypeMap.get(paramtypeStr);
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
508 // Catch all for any unmapped paramtype that is u64 (address of an object).
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
509 paramHsailSizes[i] = (sizeStr != null ? sizeStr : "u64");
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
510 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
511 // Emit the kernel function parameters.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
512 for (int i = 0; i < totalParamCount; i++) {
13900
d9aad522d355 HSAIL: fixed bug in kernel argument logic
Doug Simon <doug.simon@oracle.com>
parents: 13839
diff changeset
513 String str = "align 8 kernarg_" + paramHsailSizes[i] + " " + paramNames[i];
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
514
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
515 if (usesDeoptInfo || (i != totalParamCount - 1)) {
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
516 str += ",";
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
517 }
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
518 asm.emitString(str);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
519 }
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
520
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
521 if (usesDeoptInfo) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
522 // add in the deoptInfo parameter
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
523 asm.emitString("kernarg_u64 " + asm.getDeoptInfoName());
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
524 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
525
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
526 asm.emitString(") {");
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
527
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
528 /*
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
529 * End of parameters start of prolog code. Emit the load instructions for loading of the
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
530 * kernel non-constant parameters into registers. The constant class parameters will not be
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
531 * loaded up front but will be loaded as needed.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
532 */
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
533 for (int i = 0; i < nonConstantParamCount; i++) {
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
534 asm.emitString("ld_kernarg_" + paramHsailSizes[i] + " " + HSAIL.mapRegister(cc.getArgument(i)) + ", [" + paramNames[i] + "];");
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
535 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
536
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
537 /*
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
538 * Emit the workitemaid instruction for loading the hidden gid parameter. This is assigned
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
539 * the register as if it were the last of the nonConstant parameters.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
540 */
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
541 String workItemReg = "$s" + Integer.toString(asRegister(cc.getArgument(nonConstantParamCount)).encoding());
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
542 asm.emitString("workitemabsid_u32 " + workItemReg + ", 0;");
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
543
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
544 final int offsetToDeoptSaveStates = getRuntime().getConfig().hsailSaveStatesOffset0;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
545 final int sizeofKernelDeopt = getRuntime().getConfig().hsailSaveStatesOffset1 - getRuntime().getConfig().hsailSaveStatesOffset0;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
546 final int offsetToDeopt = getRuntime().getConfig().hsailDeoptOffset;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
547 final int offsetToNeverRanArray = getRuntime().getConfig().hsailNeverRanArrayOffset;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
548 final int offsetToDeoptNextIndex = getRuntime().getConfig().hsailDeoptNextIndexOffset;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
549 final String deoptInProgressLabel = "@LHandleDeoptInProgress";
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
550
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
551 if (usesDeoptInfo) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
552 AllocatableValue scratch64 = HSAIL.d16.asValue(Kind.Object);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
553 AllocatableValue scratch32 = HSAIL.s34.asValue(Kind.Int);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
554 HSAILAddress deoptInfoAddr = new HSAILAddressValue(Kind.Int, scratch64, offsetToDeopt).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
555 asm.emitLoadKernelArg(scratch64, asm.getDeoptInfoName(), "u64");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
556 asm.emitComment("// Check if a deopt has occurred and abort if true before doing any work");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
557 asm.emitLoadAcquire(scratch32, deoptInfoAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
558 asm.emitCompare(scratch32, Constant.forInt(0), "ne", false, false);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
559 asm.cbr(deoptInProgressLabel);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
560 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
561
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
562 /*
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
563 * Note the logic used for this spillseg size is to leave space and then go back and patch
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
564 * in the correct size once we have generated all the instructions. This should probably be
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
565 * done in a more robust way by implementing something like asm.insertString.
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
566 */
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
567 int spillsegDeclarationPosition = asm.position() + 1;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
568 String spillsegTemplate = "align 4 spill_u8 %spillseg[123456];";
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
569 asm.emitString(spillsegTemplate);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
570 // Emit object array load prologue here.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
571 if (isObjectLambda) {
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
572 boolean useCompressedOops = getRuntime().getConfig().useCompressedOops;
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
573 final int arrayElementsOffset = HotSpotGraalRuntime.getArrayBaseOffset(Kind.Object);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
574 String iterationObjArgReg = HSAIL.mapRegister(cc.getArgument(nonConstantParamCount - 1));
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
575 // iterationObjArgReg will be the highest $d register in use (it is the last parameter)
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
576 // so tempReg can be the next higher $d register
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
577 String tmpReg = "$d" + (asRegister(cc.getArgument(nonConstantParamCount - 1)).encoding() + 1);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
578 // Convert gid to long.
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
579 asm.emitString("cvt_u64_s32 " + tmpReg + ", " + workItemReg + "; // Convert gid to long");
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
580 // Adjust index for sizeof ref. Where to pull this size from?
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
581 asm.emitString("mul_u64 " + tmpReg + ", " + tmpReg + ", " + (useCompressedOops ? 4 : 8) + "; // Adjust index for sizeof ref");
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
582 // Adjust for actual data start.
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
583 asm.emitString("add_u64 " + tmpReg + ", " + tmpReg + ", " + arrayElementsOffset + "; // Adjust for actual elements data start");
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
584 // Add to array ref ptr.
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
585 asm.emitString("add_u64 " + tmpReg + ", " + tmpReg + ", " + iterationObjArgReg + "; // Add to array ref ptr");
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
586 // Load the object into the parameter reg.
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
587 if (useCompressedOops) {
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
588
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
589 // Load u32 into the d 64 reg since it will become an object address
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
590 asm.emitString("ld_global_u32 " + tmpReg + ", " + "[" + tmpReg + "]" + "; // Load compressed ptr from array");
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
591
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
592 long narrowOopBase = getRuntime().getConfig().narrowOopBase;
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
593 long narrowOopShift = getRuntime().getConfig().narrowOopShift;
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
594
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
595 if (narrowOopBase == 0 && narrowOopShift == 0) {
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
596 // No more calculation to do, mov to target register
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
597 asm.emitString("mov_b64 " + iterationObjArgReg + ", " + tmpReg + "; // no shift or base addition");
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
598 } else {
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
599 if (narrowOopBase == 0) {
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
600 asm.emitString("shl_u64 " + iterationObjArgReg + ", " + tmpReg + ", " + narrowOopShift + "; // do narrowOopShift");
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
601 } else if (narrowOopShift == 0) {
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
602 // not sure if we ever get add with 0 shift but just in case
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
603 asm.emitString("cmp_eq_b1_u64 $c0, " + tmpReg + ", 0x0; // avoid add if compressed is null");
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
604 asm.emitString("add_u64 " + iterationObjArgReg + ", " + tmpReg + ", " + narrowOopBase + "; // add narrowOopBase");
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
605 asm.emitString("cmov_b64 " + iterationObjArgReg + ", $c0, 0x0, " + iterationObjArgReg + "; // avoid add if compressed is null");
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
606 } else {
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
607 asm.emitString("cmp_eq_b1_u64 $c0, " + tmpReg + ", 0x0; // avoid shift-add if compressed is null");
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
608 asm.emitString("mad_u64 " + iterationObjArgReg + ", " + tmpReg + ", " + (1 << narrowOopShift) + ", " + narrowOopBase + "; // shift and add narrowOopBase");
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
609 asm.emitString("cmov_b64 " + iterationObjArgReg + ", $c0, 0x0, " + iterationObjArgReg + "; // avoid shift-add if compressed is null");
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
610 }
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
611 }
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
612
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
613 } else {
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
614 asm.emitString("ld_global_u64 " + iterationObjArgReg + ", " + "[" + tmpReg + "]" + "; // Load from array element into parameter reg");
13105
d3fc35a43376 HSAIL: addressed issues in JUnit tests
Doug Simon <doug.simon@oracle.com>
parents: 12797
diff changeset
615 }
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
616 }
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
617 // Prologue done, 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
618 crb.emit(lir);
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
619 // Now that code is emitted go back and figure out what the upper Bound stack size was.
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13105
diff changeset
620 long maxStackSize = ((HSAILAssembler) crb.asm).upperBoundStackSize();
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
621 String spillsegStringFinal;
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
622 if (maxStackSize == 0) {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
623 // If no spilling, get rid of spillseg declaration.
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
624 char[] array = new char[spillsegTemplate.length()];
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
625 Arrays.fill(array, ' ');
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
626 spillsegStringFinal = new String(array);
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
627 } else {
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
628 spillsegStringFinal = spillsegTemplate.replace("123456", String.format("%6d", maxStackSize));
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
629 }
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
630 asm.emitString(spillsegStringFinal, spillsegDeclarationPosition);
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
631 // Emit the epilogue.
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13902
diff changeset
632
14768
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
633 final int offsetToDeoptimizationWorkItem = getRuntime().getConfig().hsailDeoptimizationWorkItem;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
634 final int offsetToDeoptimizationReason = getRuntime().getConfig().hsailDeoptimizationReason;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
635 final int offsetToDeoptimizationFrame = getRuntime().getConfig().hsailDeoptimizationFrame;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
636 final int offsetToFramePc = getRuntime().getConfig().hsailFramePcOffset;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
637 final int offsetToNumSaves = getRuntime().getConfig().hsailFrameNumSRegOffset;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
638 final int offsetToSaveArea = getRuntime().getConfig().hsailFrameSaveAreaOffset;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
639
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
640 // TODO: keep track of whether we need it
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
641 if (usesDeoptInfo) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
642 AllocatableValue scratch64 = HSAIL.d16.asValue(Kind.Object);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
643 AllocatableValue cuSaveAreaPtr = HSAIL.d17.asValue(Kind.Object);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
644 AllocatableValue waveMathScratch1 = HSAIL.d18.asValue(Kind.Object);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
645 AllocatableValue waveMathScratch2 = HSAIL.d19.asValue(Kind.Object);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
646
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
647 AllocatableValue actionAndReasonReg = HSAIL.s32.asValue(Kind.Int);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
648 AllocatableValue codeBufferOffsetReg = HSAIL.s33.asValue(Kind.Int);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
649 AllocatableValue scratch32 = HSAIL.s34.asValue(Kind.Int);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
650 AllocatableValue workidreg = HSAIL.s35.asValue(Kind.Int);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
651 AllocatableValue dregOopMapReg = HSAIL.s39.asValue(Kind.Int);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
652
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
653 HSAILAddress deoptNextIndexAddr = new HSAILAddressValue(Kind.Int, scratch64, offsetToDeoptNextIndex).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
654 HSAILAddress neverRanArrayAddr = new HSAILAddressValue(Kind.Int, scratch64, offsetToNeverRanArray).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
655
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
656 // The just-started lanes that see the deopt flag will jump here
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
657 asm.emitString0(deoptInProgressLabel + ":\n");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
658 asm.emitLoad(Kind.Object, waveMathScratch1, neverRanArrayAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
659 asm.emitWorkItemAbsId(workidreg);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
660 asm.emitConvert(waveMathScratch2, workidreg, Kind.Object, Kind.Int);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
661 asm.emit("add", waveMathScratch1, waveMathScratch1, waveMathScratch2);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
662 HSAILAddress neverRanStoreAddr = new HSAILAddressValue(Kind.Byte, waveMathScratch1, 0).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
663 asm.emitStore(Kind.Byte, Constant.forInt(1), neverRanStoreAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
664 asm.emitString("ret;");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
665
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
666 // The deoptimizing lanes will jump here
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
667 asm.emitString0(asm.getDeoptLabelName() + ":\n");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
668 String labelExit = asm.getDeoptLabelName() + "_Exit";
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
669
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
670 HSAILAddress deoptInfoAddr = new HSAILAddressValue(Kind.Int, scratch64, offsetToDeopt).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
671 asm.emitLoadKernelArg(scratch64, asm.getDeoptInfoName(), "u64");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
672
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
673 // Set deopt occurred flag
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
674 asm.emitMov(scratch32, Constant.forInt(1));
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
675 asm.emitStoreRelease(scratch32, deoptInfoAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
676
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
677 asm.emitComment("// Determine next deopt save slot");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
678 asm.emitAtomicAdd(scratch32, deoptNextIndexAddr, Constant.forInt(1));
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
679 // scratch32 now holds next index to use
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
680 // set error condition if no room in save area
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
681 asm.emitComment("// assert room to save deopt");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
682 asm.emitCompare(scratch32, Constant.forInt(maxDeoptIndex), "lt", false, false);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
683 asm.cbr("@L_StoreDeopt");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
684 // if assert fails, store a guaranteed negative workitemid in top level deopt occurred
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
685 // flag
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
686 asm.emitWorkItemAbsId(scratch32);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
687 asm.emit("mad", scratch32, scratch32, Constant.forInt(-1), Constant.forInt(-1));
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
688 asm.emitStore(scratch32, deoptInfoAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
689 asm.emitString("ret;");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
690
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
691 asm.emitString0("@L_StoreDeopt" + ":\n");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
692
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
693 // Store deopt for this workitem into its slot in the HSAILComputeUnitSaveStates array
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
694
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
695 asm.emitComment("// Convert id's for ptr math");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
696 asm.emitConvert(cuSaveAreaPtr, scratch32, Kind.Object, Kind.Int);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
697 asm.emitComment("// multiply by sizeof KernelDeoptArea");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
698 asm.emit("mul", cuSaveAreaPtr, cuSaveAreaPtr, Constant.forInt(sizeofKernelDeopt));
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
699 asm.emitComment("// Add computed offset to deoptInfoPtr base");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
700 asm.emit("add", cuSaveAreaPtr, cuSaveAreaPtr, scratch64);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
701 // Add offset to _deopt_save_states[0]
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
702 asm.emit("add", scratch64, cuSaveAreaPtr, Constant.forInt(offsetToDeoptSaveStates));
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
703
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
704 HSAILAddress workItemAddr = new HSAILAddressValue(Kind.Int, scratch64, offsetToDeoptimizationWorkItem).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
705 HSAILAddress actionReasonStoreAddr = new HSAILAddressValue(Kind.Int, scratch64, offsetToDeoptimizationReason).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
706
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
707 asm.emitComment("// Get _deopt_info._first_frame");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
708 asm.emit("add", waveMathScratch1, scratch64, Constant.forInt(offsetToDeoptimizationFrame));
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
709 // Now scratch64 is the _deopt_info._first_frame
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
710 HSAILAddress pcStoreAddr = new HSAILAddressValue(Kind.Int, waveMathScratch1, offsetToFramePc).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
711 HSAILAddress regCountsAddr = new HSAILAddressValue(Kind.Int, waveMathScratch1, offsetToNumSaves).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
712 HSAILAddress dregOopMapAddr = new HSAILAddressValue(Kind.Int, waveMathScratch1, offsetToNumSaves + 2).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
713
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
714 asm.emitComment("// store deopting workitem");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
715 asm.emitWorkItemAbsId(scratch32);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
716 asm.emitStore(Kind.Int, scratch32, workItemAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
717 asm.emitComment("// store actionAndReason");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
718 asm.emitStore(Kind.Int, actionAndReasonReg, actionReasonStoreAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
719 asm.emitComment("// store PC");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
720 asm.emitStore(Kind.Int, codeBufferOffsetReg, pcStoreAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
721 asm.emitComment("// store regCounts");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
722 asm.emitStore(Kind.Short, Constant.forInt(32 + (16 << 8) + (0 << 16)), regCountsAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
723 asm.emitComment("// store dreg ref map bits");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
724 asm.emitStore(Kind.Short, dregOopMapReg, dregOopMapAddr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
725
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
726 // get the union of registers needed to be saved at the infopoints
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
727 // usedRegs array assumes d15 has the highest register number we wish to save
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
728 // and initially has all registers as false
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
729 boolean[] infoUsedRegs = new boolean[HSAIL.d15.number + 1];
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
730 List<Infopoint> infoList = crb.compilationResult.getInfopoints();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
731 for (Infopoint info : infoList) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
732 BytecodeFrame frame = info.debugInfo.frame();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
733 for (int i = 0; i < frame.numLocals + frame.numStack; i++) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
734 Value val = frame.values[i];
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
735 if (isLegal(val) && isRegister(val)) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
736 Register reg = asRegister(val);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
737 infoUsedRegs[reg.number] = true;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
738 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
739 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
740 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
741
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
742 // loop storing each of the 32 s registers that are used by infopoints
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
743 // we always store in a fixed location, even if some registers are not stored
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
744 asm.emitComment("// store used s regs");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
745 int ofst = offsetToSaveArea;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
746 for (Register sreg : HSAIL.sRegisters) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
747 if (infoUsedRegs[sreg.number]) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
748 Kind kind = Kind.Int;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
749 HSAILAddress addr = new HSAILAddressValue(kind, waveMathScratch1, ofst).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
750 AllocatableValue sregValue = sreg.asValue(kind);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
751 asm.emitStore(kind, sregValue, addr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
752 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
753 ofst += 4;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
754 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
755
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
756 // loop storing each of the 16 d registers that are used by infopoints
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
757 asm.emitComment("// store used d regs");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
758 for (Register dreg : HSAIL.dRegisters) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
759 if (infoUsedRegs[dreg.number]) {
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
760 Kind kind = Kind.Long;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
761 HSAILAddress addr = new HSAILAddressValue(kind, waveMathScratch1, ofst).toAddress();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
762 AllocatableValue dregValue = dreg.asValue(kind);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
763 asm.emitStore(kind, dregValue, addr);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
764 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
765 ofst += 8;
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
766 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
767
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
768 // for now, ignore saving the spill variables but that would come here
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
769
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
770 asm.emitString0(labelExit + ":\n");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
771
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
772 // and emit the return
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
773 crb.frameContext.leave(crb);
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
774 asm.exit();
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
775 }
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
776
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
777 asm.emitString0("}; \n");
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
778
3e9a960f0da1 HSAIL: preliminary deopt support
Doug Simon <doug.simon@oracle.com>
parents: 14143
diff changeset
779 ExternalCompilationResult compilationResult = (ExternalCompilationResult) crb.compilationResult;
14853
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
780 HSAILHotSpotLIRGenerationResult lirGenRes = ((HSAILCompilationResultBuilder) crb).lirGenRes;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
781 compilationResult.setHostGraph(prepareHostGraph(method, lirGenRes.getDeopts(), getProviders(), getRuntime().getConfig()));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
782 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
783
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
784 private static StructuredGraph prepareHostGraph(ResolvedJavaMethod method, List<DeoptimizeOp> deopts, HotSpotProviders providers, HotSpotVMConfig config) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
785 if (deopts.isEmpty()) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
786 return null;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
787 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
788 StructuredGraph hostGraph = new StructuredGraph(method, -2);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
789 ParameterNode deoptId = hostGraph.unique(new ParameterNode(0, StampFactory.intValue()));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
790 ParameterNode hsailFrame = hostGraph.unique(new ParameterNode(1, StampFactory.forKind(providers.getCodeCache().getTarget().wordKind)));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
791 ParameterNode reasonAndAction = hostGraph.unique(new ParameterNode(2, StampFactory.intValue()));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
792 ParameterNode speculation = hostGraph.unique(new ParameterNode(3, StampFactory.object()));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
793 AbstractBeginNode[] branches = new AbstractBeginNode[deopts.size() + 1];
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
794 int[] keys = new int[deopts.size()];
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
795 int[] keySuccessors = new int[deopts.size() + 1];
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
796 double[] keyProbabilities = new double[deopts.size() + 1];
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
797 int i = 0;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
798 Collections.sort(deopts, new Comparator<DeoptimizeOp>() {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
799 public int compare(DeoptimizeOp o1, DeoptimizeOp o2) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
800 return o1.getCodeBufferPos() - o2.getCodeBufferPos();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
801 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
802 });
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
803 for (DeoptimizeOp deopt : deopts) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
804 keySuccessors[i] = i;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
805 keyProbabilities[i] = 1.0 / deopts.size();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
806 keys[i] = deopt.getCodeBufferPos();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
807 assert keys[i] >= 0;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
808 branches[i] = createHostDeoptBranch(deopt, hsailFrame, reasonAndAction, speculation, providers, config);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
809
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
810 i++;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
811 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
812 keyProbabilities[deopts.size()] = 0; // default
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
813 keySuccessors[deopts.size()] = deopts.size();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
814 branches[deopts.size()] = createHostCrashBranch(hostGraph, deoptId);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
815 IntegerSwitchNode switchNode = hostGraph.add(new IntegerSwitchNode(deoptId, branches, keys, keyProbabilities, keySuccessors));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
816 StartNode start = hostGraph.start();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
817 start.setNext(switchNode);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
818 /*
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
819 * printf.setNext(printf2); printf2.setNext(switchNode);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
820 */
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
821 hostGraph.setGuardsStage(GuardsStage.AFTER_FSA);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
822 return hostGraph;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
823 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
824
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
825 private static AbstractBeginNode createHostCrashBranch(StructuredGraph hostGraph, ValueNode deoptId) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
826 VMErrorNode vmError = hostGraph.add(new VMErrorNode("Error in HSAIL deopt. DeoptId=%d", deoptId));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
827 // ConvertNode.convert(hostGraph, Kind.Long, deoptId)));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
828 vmError.setNext(hostGraph.add(new ReturnNode(ConstantNode.defaultForKind(hostGraph.method().getSignature().getReturnKind(), hostGraph))));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
829 return BeginNode.begin(vmError);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
830 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
831
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
832 private static AbstractBeginNode createHostDeoptBranch(DeoptimizeOp deopt, ParameterNode hsailFrame, ValueNode reasonAndAction, ValueNode speculation, HotSpotProviders providers,
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
833 HotSpotVMConfig config) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
834 BeginNode branch = hsailFrame.graph().add(new BeginNode());
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
835 DynamicDeoptimizeNode deoptimization = hsailFrame.graph().add(new DynamicDeoptimizeNode(reasonAndAction, speculation));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
836 deoptimization.setStateBefore(createFrameState(deopt.getFrameState().topFrame, hsailFrame, providers, config));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
837 branch.setNext(deoptimization);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
838 return branch;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
839 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
840
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
841 private static FrameState createFrameState(BytecodeFrame lowLevelFrame, ParameterNode hsailFrame, HotSpotProviders providers, HotSpotVMConfig config) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
842 StructuredGraph hostGraph = hsailFrame.graph();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
843 ValueNode[] locals = new ValueNode[lowLevelFrame.numLocals];
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
844 for (int i = 0; i < lowLevelFrame.numLocals; i++) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
845 locals[i] = getNodeForValueFromFrame(lowLevelFrame.getLocalValue(i), hsailFrame, hostGraph, providers, config);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
846 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
847 List<ValueNode> stack = new ArrayList<>(lowLevelFrame.numStack);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
848 for (int i = 0; i < lowLevelFrame.numStack; i++) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
849 stack.add(getNodeForValueFromFrame(lowLevelFrame.getStackValue(i), hsailFrame, hostGraph, providers, config));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
850 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
851 ValueNode[] locks = new ValueNode[lowLevelFrame.numLocks];
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
852 MonitorIdNode[] monitorIds = new MonitorIdNode[lowLevelFrame.numLocks];
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
853 for (int i = 0; i < lowLevelFrame.numLocks; i++) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
854 HotSpotMonitorValue lockValue = (HotSpotMonitorValue) lowLevelFrame.getLockValue(i);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
855 locks[i] = getNodeForValueFromFrame(lockValue, hsailFrame, hostGraph, providers, config);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
856 monitorIds[i] = getMonitorIdForHotSpotMonitorValueFromFrame(lockValue, hsailFrame, hostGraph);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
857 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
858 FrameState frameState = hostGraph.add(new FrameState(lowLevelFrame.getMethod(), lowLevelFrame.getBCI(), locals, stack, locks, monitorIds, lowLevelFrame.rethrowException, false));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
859 if (lowLevelFrame.caller() != null) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
860 frameState.setOuterFrameState(createFrameState(lowLevelFrame.caller(), hsailFrame, providers, config));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
861 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
862 return frameState;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
863 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
864
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
865 @SuppressWarnings({"unused"})
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
866 private static MonitorIdNode getMonitorIdForHotSpotMonitorValueFromFrame(HotSpotMonitorValue lockValue, ParameterNode hsailFrame, StructuredGraph hsailGraph) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
867 if (lockValue.isEliminated()) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
868 return null;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
869 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
870 throw GraalInternalError.unimplemented();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
871 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
872
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
873 private static ValueNode getNodeForValueFromFrame(Value localValue, ParameterNode hsailFrame, StructuredGraph hostGraph, HotSpotProviders providers, HotSpotVMConfig config) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
874 ValueNode valueNode;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
875 if (localValue instanceof Constant) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
876 valueNode = ConstantNode.forConstant((Constant) localValue, providers.getMetaAccess(), hostGraph);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
877 } else if (localValue instanceof VirtualObject) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
878 throw GraalInternalError.unimplemented();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
879 } else if (localValue instanceof StackSlot) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
880 throw GraalInternalError.unimplemented();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
881 } else if (localValue instanceof HotSpotMonitorValue) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
882 HotSpotMonitorValue hotSpotMonitorValue = (HotSpotMonitorValue) localValue;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
883 return getNodeForValueFromFrame(hotSpotMonitorValue.getOwner(), hsailFrame, hostGraph, providers, config);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
884 } else if (localValue instanceof RegisterValue) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
885 RegisterValue registerValue = (RegisterValue) localValue;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
886 int regNumber = registerValue.getRegister().number;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
887 valueNode = getNodeForRegisterFromFrame(regNumber, localValue.getKind(), hsailFrame, hostGraph, providers, config);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
888 } else if (Value.ILLEGAL.equals(localValue)) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
889 valueNode = null;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
890 } else {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
891 throw GraalInternalError.shouldNotReachHere();
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
892 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
893 return valueNode;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
894 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
895
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
896 private static ValueNode getNodeForRegisterFromFrame(int regNumber, Kind valueKind, ParameterNode hsailFrame, StructuredGraph hostGraph, HotSpotProviders providers, HotSpotVMConfig config) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
897 ValueNode valueNode;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
898 LocationNode location;
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
899 if (regNumber >= HSAIL.s0.number && regNumber <= HSAIL.s31.number) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
900 int intSize = providers.getCodeCache().getTarget().arch.getSizeInBytes(Kind.Int);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
901 long offset = config.hsailFrameSaveAreaOffset + intSize * (regNumber - HSAIL.s0.number);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
902 location = ConstantLocationNode.create(FINAL_LOCATION, valueKind, offset, hostGraph);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
903 } else if (regNumber >= HSAIL.d0.number && regNumber <= HSAIL.d15.number) {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
904 int longSize = providers.getCodeCache().getTarget().arch.getSizeInBytes(Kind.Long);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
905 long offset = config.hsailFrameSaveAreaOffset + longSize * (regNumber - HSAIL.d0.number);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
906 LocationNode numSRegsLocation = ConstantLocationNode.create(FINAL_LOCATION, Kind.Byte, config.hsailFrameNumSRegOffset, hostGraph);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
907 ValueNode numSRegs = hostGraph.unique(new FloatingReadNode(hsailFrame, numSRegsLocation, null, StampFactory.forKind(Kind.Byte)));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
908 location = IndexedLocationNode.create(FINAL_LOCATION, valueKind, offset, numSRegs, hostGraph, 4);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
909 } else {
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
910 throw GraalInternalError.shouldNotReachHere("unknown hsail register: " + regNumber);
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
911 }
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
912 valueNode = hostGraph.unique(new FloatingReadNode(hsailFrame, location, null, StampFactory.forKind(valueKind)));
6bde7deb5be1 Adopt HSAILLIRGenerator.
Josef Eisl <josef.eisl@jku.at>
parents: 14852
diff changeset
913 return valueNode;
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
914 }
14809
73774616a6b3 Decoupled LIRGenerator and LIRGenerationResult.
Josef Eisl <josef.eisl@jku.at>
parents: 14804
diff changeset
915
10662
4ef92b67aeae added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
916 }