From f0721020ad6ba20110705cb1d927de09e0e25edc Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Tue, 17 May 2016 16:02:57 +0200 Subject: [PATCH] clover/llvm: Split native codegen and assembly print-out into separate functions. Reviewed-by: Serge Martin Tested-by: Jan Vesely --- .../state_trackers/clover/llvm/invocation.cpp | 38 ++++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp index f0f1b7a..d4c8add 100644 --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp @@ -471,19 +471,6 @@ namespace { return { data.begin(), data.end() }; } - std::vector - compile_native(llvm::Module *mod, const target &target, - std::string &r_log) { - if (has_flag(debug::native)) { - std::unique_ptr cmod { CloneModule(mod) }; - debug::log(".asm", as_string( - emit_code(*cmod, target, - TargetMachine::CGFT_AssemblyFile, r_log))); - } - - return emit_code(*mod, target, TargetMachine::CGFT_ObjectFile, r_log); - } - namespace elf { std::unique_ptr get(const std::vector &code) { @@ -545,12 +532,24 @@ namespace { } module - build_module_native(llvm::Module *mod, const target &target, + build_module_native(::llvm::Module &mod, const target &target, const clang::CompilerInstance &c, std::string &r_log) { - const auto code = compile_native(mod, target, r_log); - return build_module_common(*mod, code, - get_symbol_offsets(code, r_log), c); + const auto code = emit_code(mod, target, + TargetMachine::CGFT_ObjectFile, r_log); + return build_module_common(mod, code, get_symbol_offsets(code, r_log), c); + } + + std::string + print_module_native(const ::llvm::Module &mod, const target &target) { + std::string log; + try { + std::unique_ptr cmod { CloneModule(&mod) }; + return as_string(emit_code(*cmod, target, + TargetMachine::CGFT_AssemblyFile, log)); + } catch (...) { + return "Couldn't output native disassembly: " + log; + } } } // End anonymous namespace @@ -594,7 +593,10 @@ clover::compile_program_llvm(const std::string &source, m = build_module_bitcode(*mod, *c); break; case PIPE_SHADER_IR_NATIVE: - m = build_module_native(&*mod, target, *c, r_log); + if (has_flag(debug::native)) + debug::log(".asm", print_module_native(*mod, target)); + + m = build_module_native(*mod, target, *c, r_log); break; } -- 2.7.4