Mesa (master): clover/llvm: Use device in llvm compilation instead of copying fields

Aaron Watry awatry at kemper.freedesktop.org
Tue Mar 6 02:17:58 UTC 2018


Module: Mesa
Branch: master
Commit: dd81ca3883845abb4939a8007b51e802315c3421
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd81ca3883845abb4939a8007b51e802315c3421

Author: Aaron Watry <awatry at gmail.com>
Date:   Sat Feb 10 14:03:13 2018 -0600

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 <awatry at gmail.com>
Reviewed-by: Jan Vesely <jan.vesely at rutgers.edu>
Reviewed-by: Pierre Moreau <pierre.morrow at free.fr>
Reviewed-by: Francisco Jerez <currojerez at riseup.net>

---

 src/gallium/state_trackers/clover/core/program.cpp   |  7 +++----
 .../state_trackers/clover/llvm/invocation.cpp        | 20 ++++++++++----------
 .../state_trackers/clover/llvm/invocation.hpp        |  5 ++---
 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 ae4b50a879..4e74fccd97 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 e4ca5fa444..c8c0311a3a 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 5b3530c382..ff9caa457c 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);
    }




More information about the mesa-commit mailing list