summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Watry <[email protected]>2018-02-10 14:03:13 -0600
committerAaron Watry <[email protected]>2018-03-05 20:09:46 -0600
commitdd81ca3883845abb4939a8007b51e802315c3421 (patch)
tree857b2400ecf07c4cb65f41d894cc1bb20ad84301
parent71b3d681d88435b7397ad3fe896eb1fe7621b86a (diff)
clover/llvm: Use device in llvm compilation instead of copying fields
Copying the individual fields from the device when compiling/linking will lead to an unnecessarily large number of fields getting passed around. v3: Rebase on current master v2: Use device in function args before making additional changes in following patches Signed-off-by: Aaron Watry <[email protected]> Reviewed-by: Jan Vesely <[email protected]> Reviewed-by: Pierre Moreau <[email protected]> Reviewed-by: Francisco Jerez <[email protected]>
-rw-r--r--src/gallium/state_trackers/clover/core/program.cpp7
-rw-r--r--src/gallium/state_trackers/clover/llvm/invocation.cpp20
-rw-r--r--src/gallium/state_trackers/clover/llvm/invocation.hpp5
3 files changed, 15 insertions, 17 deletions
diff --git a/src/gallium/state_trackers/clover/core/program.cpp b/src/gallium/state_trackers/clover/core/program.cpp
index ae4b50a8797..4e74fccd973 100644
--- a/src/gallium/state_trackers/clover/core/program.cpp
+++ b/src/gallium/state_trackers/clover/core/program.cpp
@@ -53,8 +53,8 @@ program::compile(const ref_vector<device> &devs, const std::string &opts,
try {
const module m = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
tgsi::compile_program(_source, log) :
- llvm::compile_program(_source, headers,
- dev.ir_target(), opts, log));
+ llvm::compile_program(_source, headers, dev,
+ opts, log));
_builds[&dev] = { m, opts, log };
} catch (...) {
_builds[&dev] = { module(), opts, log };
@@ -78,8 +78,7 @@ program::link(const ref_vector<device> &devs, const std::string &opts,
try {
const module m = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
tgsi::link_program(ms) :
- llvm::link_program(ms, dev.ir_format(),
- dev.ir_target(), opts, log));
+ llvm::link_program(ms, dev, opts, log));
_builds[&dev] = { m, opts, log };
} catch (...) {
_builds[&dev] = { module(), opts, log };
diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp
index e4ca5fa4442..c8c0311a3a0 100644
--- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
+++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
@@ -201,17 +201,17 @@ namespace {
module
clover::llvm::compile_program(const std::string &source,
const header_map &headers,
- const std::string &target,
+ const device &dev,
const std::string &opts,
std::string &r_log) {
if (has_flag(debug::clc))
debug::log(".cl", "// Options: " + opts + '\n' + source);
auto ctx = create_context(r_log);
- auto c = create_compiler_instance(target, tokenize(opts + " input.cl"),
- r_log);
- auto mod = compile(*ctx, *c, "input.cl", source, headers, target, opts,
- r_log);
+ auto c = create_compiler_instance(dev.ir_target(),
+ tokenize(opts + " input.cl"), r_log);
+ auto mod = compile(*ctx, *c, "input.cl", source, headers, dev.ir_target(),
+ opts, r_log);
if (has_flag(debug::llvm))
debug::log(".ll", print_module_bitcode(*mod));
@@ -269,14 +269,14 @@ namespace {
module
clover::llvm::link_program(const std::vector<module> &modules,
- enum pipe_shader_ir ir, const std::string &target,
+ const device &dev,
const std::string &opts, std::string &r_log) {
std::vector<std::string> options = tokenize(opts + " input.cl");
const bool create_library = count("-create-library", options);
erase_if(equals("-create-library"), options);
auto ctx = create_context(r_log);
- auto c = create_compiler_instance(target, options, r_log);
+ auto c = create_compiler_instance(dev.ir_target(), options, r_log);
auto mod = link(*ctx, *c, modules, r_log);
optimize(*mod, c->getCodeGenOpts().OptimizationLevel, !create_library);
@@ -291,11 +291,11 @@ clover::llvm::link_program(const std::vector<module> &modules,
if (create_library) {
return build_module_library(*mod, module::section::text_library);
- } else if (ir == PIPE_SHADER_IR_NATIVE) {
+ } else if (dev.ir_format() == PIPE_SHADER_IR_NATIVE) {
if (has_flag(debug::native))
- debug::log(id + ".asm", print_module_native(*mod, target));
+ debug::log(id + ".asm", print_module_native(*mod, dev.ir_target()));
- return build_module_native(*mod, target, *c, r_log);
+ return build_module_native(*mod, dev.ir_target(), *c, r_log);
} else {
unreachable("Unsupported IR.");
diff --git a/src/gallium/state_trackers/clover/llvm/invocation.hpp b/src/gallium/state_trackers/clover/llvm/invocation.hpp
index 5b3530c3829..ff9caa457ca 100644
--- a/src/gallium/state_trackers/clover/llvm/invocation.hpp
+++ b/src/gallium/state_trackers/clover/llvm/invocation.hpp
@@ -32,13 +32,12 @@ namespace clover {
namespace llvm {
module compile_program(const std::string &source,
const header_map &headers,
- const std::string &target,
+ const device &device,
const std::string &opts,
std::string &r_log);
module link_program(const std::vector<module> &modules,
- enum pipe_shader_ir ir,
- const std::string &target,
+ const device &device,
const std::string &opts,
std::string &r_log);
}