24
25 import static com.oracle.graal.api.code.CallingConvention.Type.*;
26 import static com.oracle.graal.api.code.ValueUtil.*;
27
28 import java.lang.reflect.*;
29 import java.util.*;
30
31 import com.oracle.graal.api.code.*;
32 import com.oracle.graal.api.meta.*;
33 import com.oracle.graal.asm.*;
34 import com.oracle.graal.asm.hsail.*;
35 import com.oracle.graal.compiler.gen.*;
36 import com.oracle.graal.debug.*;
37 import com.oracle.graal.hotspot.*;
38 import com.oracle.graal.hotspot.meta.*;
39 import com.oracle.graal.hsail.*;
40 import com.oracle.graal.lir.*;
41 import com.oracle.graal.lir.asm.*;
42 import com.oracle.graal.lir.hsail.*;
43 import com.oracle.graal.nodes.*;
44
45 /**
46 * HSAIL specific backend.
47 */
48 public class HSAILHotSpotBackend extends HotSpotBackend {
49
50 private Map<String, String> paramTypeMap = new HashMap<>();
51 private Buffer codeBuffer;
52
53 public HSAILHotSpotBackend(HotSpotGraalRuntime runtime, HotSpotProviders providers) {
54 super(runtime, providers);
55 paramTypeMap.put("HotSpotResolvedPrimitiveType<int>", "s32");
56 paramTypeMap.put("HotSpotResolvedPrimitiveType<float>", "f32");
57 paramTypeMap.put("HotSpotResolvedPrimitiveType<double>", "f64");
58 paramTypeMap.put("HotSpotResolvedPrimitiveType<long>", "s64");
59 }
60
61 @Override
62 public boolean shouldAllocateRegisters() {
63 return true;
64 }
65
66 @Override
67 public void completeInitialization() {
68 final HotSpotProviders providers = getProviders();
69 HotSpotVMConfig config = getRuntime().getConfig();
70 final HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer();
71 lowerer.initialize(providers, config);
72 }
73
74 /**
75 * Use the HSAIL register set when the compilation target is HSAIL.
76 */
77 @Override
78 public FrameMap newFrameMap() {
79 return new HSAILFrameMap(getCodeCache());
80 }
81
82 @Override
83 public LIRGenerator newLIRGenerator(StructuredGraph graph, FrameMap frameMap, CallingConvention cc, LIR lir) {
84 return new HSAILHotSpotLIRGenerator(graph, getProviders(), getRuntime().getConfig(), frameMap, cc, lir);
85 }
86
87 public String getPartialCodeString() {
88 if (codeBuffer == null) {
89 return "";
90 }
91 byte[] data = codeBuffer.copyData(0, codeBuffer.position());
|
24
25 import static com.oracle.graal.api.code.CallingConvention.Type.*;
26 import static com.oracle.graal.api.code.ValueUtil.*;
27
28 import java.lang.reflect.*;
29 import java.util.*;
30
31 import com.oracle.graal.api.code.*;
32 import com.oracle.graal.api.meta.*;
33 import com.oracle.graal.asm.*;
34 import com.oracle.graal.asm.hsail.*;
35 import com.oracle.graal.compiler.gen.*;
36 import com.oracle.graal.debug.*;
37 import com.oracle.graal.hotspot.*;
38 import com.oracle.graal.hotspot.meta.*;
39 import com.oracle.graal.hsail.*;
40 import com.oracle.graal.lir.*;
41 import com.oracle.graal.lir.asm.*;
42 import com.oracle.graal.lir.hsail.*;
43 import com.oracle.graal.nodes.*;
44 import com.oracle.graal.nodes.spi.Replacements;
45 import com.oracle.graal.replacements.hsail.*;
46
47 /**
48 * HSAIL specific backend.
49 */
50 public class HSAILHotSpotBackend extends HotSpotBackend {
51
52 private Map<String, String> paramTypeMap = new HashMap<>();
53 private Buffer codeBuffer;
54
55 public HSAILHotSpotBackend(HotSpotGraalRuntime runtime, HotSpotProviders providers) {
56 super(runtime, providers);
57 paramTypeMap.put("HotSpotResolvedPrimitiveType<int>", "s32");
58 paramTypeMap.put("HotSpotResolvedPrimitiveType<float>", "f32");
59 paramTypeMap.put("HotSpotResolvedPrimitiveType<double>", "f64");
60 paramTypeMap.put("HotSpotResolvedPrimitiveType<long>", "s64");
61 }
62
63 @Override
64 public boolean shouldAllocateRegisters() {
65 return true;
66 }
67
68 /**
69 * Completes the initialization of the HSAIL backend. This includes initializing the providers
70 * and registering any method substitutions specified by the HSAIL backend.
71 */
72 @Override
73 public void completeInitialization() {
74 final HotSpotProviders providers = getProviders();
75 HotSpotVMConfig config = getRuntime().getConfig();
76 // Initialize the lowering provider.
77 final HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer();
78 lowerer.initialize(providers, config);
79 // Register the replacements used by the HSAIL backend.
80 Replacements replacements = providers.getReplacements();
81 try {
82 // Register the substitutions for java.lang.Math routines.
83 // replacements.registerSubstitutions(Class.forName("com.oracle.graal.replacements.hsail.HSAILMathSubstitutions"));
84 replacements.registerSubstitutions(HSAILMathSubstitutions.class);
85
86 } catch (Exception e) {
87 e.printStackTrace();
88 }
89 }
90
91 /**
92 * Use the HSAIL register set when the compilation target is HSAIL.
93 */
94 @Override
95 public FrameMap newFrameMap() {
96 return new HSAILFrameMap(getCodeCache());
97 }
98
99 @Override
100 public LIRGenerator newLIRGenerator(StructuredGraph graph, FrameMap frameMap, CallingConvention cc, LIR lir) {
101 return new HSAILHotSpotLIRGenerator(graph, getProviders(), getRuntime().getConfig(), frameMap, cc, lir);
102 }
103
104 public String getPartialCodeString() {
105 if (codeBuffer == null) {
106 return "";
107 }
108 byte[] data = codeBuffer.copyData(0, codeBuffer.position());
|