mirror of
https://github.com/vosen/ZLUDA.git
synced 2025-09-28 04:09:04 +00:00
comgr: Stepwise compilation for zoc
This commit is contained in:
parent
2cd7f3e359
commit
96f66d3e27
1 changed files with 53 additions and 8 deletions
|
@ -259,30 +259,74 @@ pub fn compile_bitcode(
|
||||||
c"-inlinehint-threshold=3250",
|
c"-inlinehint-threshold=3250",
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
let exec_data_set: DataSet;
|
let options = common_options.chain(opt_options);
|
||||||
let executable: Result<Vec<u8>, Error>;
|
let executable: Result<Vec<u8>, Error>;
|
||||||
if let Some(hook) = compiler_hook {
|
if let Some(hook) = compiler_hook {
|
||||||
// Run compiler hook for executable
|
// CompileSourceWithDeviceLibsToBc
|
||||||
|
let action_info = ActionInfo::new(comgr)?;
|
||||||
|
action_info.set_isa_name(gcn_arch)?;
|
||||||
|
action_info.set_language(Language::LlvmIr)?;
|
||||||
|
action_info.set_options(options.clone())?;
|
||||||
|
let dataset = comgr.do_action(
|
||||||
|
ActionKind::CompileSourceWithDeviceLibsToBc,
|
||||||
|
&action_info,
|
||||||
|
&linked_data_set,
|
||||||
|
)?;
|
||||||
|
let data = dataset.get_content(comgr, DataKind::Bc, 0)?;
|
||||||
|
let data = ptx::bitcode_to_ir(data);
|
||||||
|
hook(&data, String::from("with-device-libs.ll"));
|
||||||
|
|
||||||
|
// CodegenBcToRelocatable
|
||||||
|
let action_info = ActionInfo::new(comgr)?;
|
||||||
|
action_info.set_isa_name(gcn_arch)?;
|
||||||
|
action_info.set_options(options.clone())?;
|
||||||
|
let dataset =
|
||||||
|
comgr.do_action(ActionKind::CodegenBcToRelocatable, &action_info, &dataset)?;
|
||||||
|
let data = dataset.get_content(comgr, DataKind::Relocatable, 0)?;
|
||||||
|
hook(&data, String::from("relocatable.elf"));
|
||||||
|
|
||||||
|
// Disassemble relocatable
|
||||||
|
let action_info = ActionInfo::new(comgr)?;
|
||||||
|
action_info.set_isa_name(gcn_arch)?;
|
||||||
|
let disassembled_dataset = comgr.do_action(
|
||||||
|
ActionKind::DisassembleRelocatableToSource,
|
||||||
|
&action_info,
|
||||||
|
&dataset,
|
||||||
|
)?;
|
||||||
|
let disassembly = disassembled_dataset.get_content(comgr, DataKind::Source, 0)?;
|
||||||
|
hook(&disassembly, String::from("relocatable.asm"));
|
||||||
|
|
||||||
|
// LinkRelocatableToExecutable
|
||||||
|
let action_info = ActionInfo::new(comgr)?;
|
||||||
|
action_info.set_isa_name(gcn_arch)?;
|
||||||
|
action_info.set_language(Language::LlvmIr)?;
|
||||||
|
action_info.set_options(options.clone())?;
|
||||||
|
let dataset = comgr.do_action(
|
||||||
|
ActionKind::LinkRelocatableToExecutable,
|
||||||
|
&action_info,
|
||||||
|
&dataset,
|
||||||
|
)?;
|
||||||
|
executable = dataset.get_content(comgr, DataKind::Executable, 0);
|
||||||
hook(
|
hook(
|
||||||
executable.as_ref().unwrap_or(&Vec::new()),
|
executable.as_ref().unwrap_or(&Vec::new()),
|
||||||
String::from("elf"),
|
String::from("elf"),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Disassemble executable and run compiler hook
|
// Disassemble executable
|
||||||
let action_info = ActionInfo::new(comgr)?;
|
let action_info = ActionInfo::new(comgr)?;
|
||||||
action_info.set_isa_name(gcn_arch)?;
|
action_info.set_isa_name(gcn_arch)?;
|
||||||
let disassembly = comgr.do_action(
|
let disassembled_dataset = comgr.do_action(
|
||||||
ActionKind::DisassembleExecutableToSource,
|
ActionKind::DisassembleExecutableToSource,
|
||||||
&action_info,
|
&action_info,
|
||||||
&exec_data_set,
|
&dataset,
|
||||||
)?;
|
)?;
|
||||||
let disassembly = disassembly.get_content(comgr, DataKind::Source, 0)?;
|
let disassembly = disassembled_dataset.get_content(comgr, DataKind::Source, 0)?;
|
||||||
hook(&disassembly, String::from("asm"))
|
hook(&disassembly, String::from("asm"));
|
||||||
} else {
|
} else {
|
||||||
let compile_to_exec = ActionInfo::new(comgr)?;
|
let compile_to_exec = ActionInfo::new(comgr)?;
|
||||||
compile_to_exec.set_isa_name(gcn_arch)?;
|
compile_to_exec.set_isa_name(gcn_arch)?;
|
||||||
compile_to_exec.set_language(Language::LlvmIr)?;
|
compile_to_exec.set_language(Language::LlvmIr)?;
|
||||||
compile_to_exec.set_options(common_options.chain(opt_options))?;
|
compile_to_exec.set_options(options.clone())?;
|
||||||
let exec_data_set = comgr.do_action(
|
let exec_data_set = comgr.do_action(
|
||||||
ActionKind::CompileSourceToExecutable,
|
ActionKind::CompileSourceToExecutable,
|
||||||
&compile_to_exec,
|
&compile_to_exec,
|
||||||
|
@ -556,6 +600,7 @@ impl_into!(
|
||||||
CompileSourceToExecutable => AMD_COMGR_ACTION_COMPILE_SOURCE_TO_EXECUTABLE,
|
CompileSourceToExecutable => AMD_COMGR_ACTION_COMPILE_SOURCE_TO_EXECUTABLE,
|
||||||
CompileSourceWithDeviceLibsToBc => AMD_COMGR_ACTION_COMPILE_SOURCE_WITH_DEVICE_LIBS_TO_BC,
|
CompileSourceWithDeviceLibsToBc => AMD_COMGR_ACTION_COMPILE_SOURCE_WITH_DEVICE_LIBS_TO_BC,
|
||||||
CodegenBcToRelocatable => AMD_COMGR_ACTION_CODEGEN_BC_TO_RELOCATABLE,
|
CodegenBcToRelocatable => AMD_COMGR_ACTION_CODEGEN_BC_TO_RELOCATABLE,
|
||||||
|
DisassembleRelocatableToSource => AMD_COMGR_ACTION_DISASSEMBLE_RELOCATABLE_TO_SOURCE,
|
||||||
LinkRelocatableToExecutable => AMD_COMGR_ACTION_LINK_RELOCATABLE_TO_EXECUTABLE,
|
LinkRelocatableToExecutable => AMD_COMGR_ACTION_LINK_RELOCATABLE_TO_EXECUTABLE,
|
||||||
DisassembleExecutableToSource => AMD_COMGR_ACTION_DISASSEMBLE_EXECUTABLE_TO_SOURCE,
|
DisassembleExecutableToSource => AMD_COMGR_ACTION_DISASSEMBLE_EXECUTABLE_TO_SOURCE,
|
||||||
SourceToPreprocessor => AMD_COMGR_ACTION_SOURCE_TO_PREPROCESSOR
|
SourceToPreprocessor => AMD_COMGR_ACTION_SOURCE_TO_PREPROCESSOR
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue