Commit 975a3c6a authored by Pierre Moreau's avatar Pierre Moreau Committed by Karol Herbst

clover/llvm: Add options for dumping SPIR-V binaries

Reviewed-by: Karol Herbst's avatarKarol Herbst <kherbst@redhat.com>
Acked-by: Francisco Jerez's avatarFrancisco Jerez <currojerez@riseup.net>
parent 21473865
......@@ -101,7 +101,8 @@ namespace clover {
enum flag {
clc = 1 << 0,
llvm = 1 << 1,
native = 1 << 2
native = 1 << 2,
spirv = 1 << 3,
};
inline bool
......@@ -111,6 +112,7 @@ namespace clover {
{ "llvm", llvm, "Dump the generated LLVM IR for all kernels." },
{ "native", native, "Dump kernel assembly code for targets "
"specifying PIPE_SHADER_IR_NATIVE" },
{ "spirv", spirv, "Dump the generated SPIR-V for all kernels." },
DEBUG_NAMED_VALUE_END
};
static const unsigned flags =
......
......@@ -680,6 +680,30 @@ clover::spirv::is_valid_spirv(const std::vector<char> &binary,
return spvTool.Validate(reinterpret_cast<const uint32_t *>(binary.data()),
binary.size() / 4u);
}
std::string
clover::spirv::print_module(const std::vector<char> &binary,
const std::string &opencl_version) {
const spv_target_env target_env =
convert_opencl_str_to_target_env(opencl_version);
spvtools::SpirvTools spvTool(target_env);
spv_context spvContext = spvContextCreate(target_env);
if (!spvContext)
return "Failed to create an spv_context for disassembling the module.";
spv_text disassembly;
spvBinaryToText(spvContext,
reinterpret_cast<const uint32_t *>(binary.data()),
binary.size() / 4u, SPV_BINARY_TO_TEXT_OPTION_NONE,
&disassembly, nullptr);
spvContextDestroy(spvContext);
const std::string disassemblyStr = disassembly->str;
spvTextDestroy(disassembly);
return disassemblyStr;
}
#else
bool
clover::spirv::is_valid_spirv(const std::vector<char> &/*binary*/,
......@@ -702,4 +726,10 @@ clover::spirv::link_program(const std::vector<module> &/*modules*/,
r_log += "SPIR-V support in clover is not enabled.\n";
throw error(CL_LINKER_NOT_AVAILABLE);
}
std::string
clover::spirv::print_module(const std::vector<char> &binary,
const std::string &opencl_version) {
return std::string();
}
#endif
......@@ -46,6 +46,10 @@ namespace clover {
// link dependencies between them.
module link_program(const std::vector<module> &modules, const device &dev,
const std::string &opts, std::string &r_log);
// Returns a textual representation of the given binary.
std::string print_module(const std::vector<char> &binary,
const std::string &opencl_version);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment