[Mesa-dev] [PATCH v3 09/21] clover: Track flags per module section

Pierre Moreau pierre.morrow at free.fr
Wed Feb 21 22:50:34 UTC 2018


One flag that needs to be tracked is whether a library is allowed to
received mathematics optimisations or not, as the authorisation is given
when creating the library while the optimisations are specified when
creating the executable.

Signed-off-by: Pierre Moreau <pierre.morrow at free.fr>
---
 src/gallium/state_trackers/clover/core/module.cpp          |  1 +
 src/gallium/state_trackers/clover/core/module.hpp          | 13 +++++++++----
 src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp |  3 ++-
 src/gallium/state_trackers/clover/llvm/codegen/common.cpp  |  2 +-
 src/gallium/state_trackers/clover/tgsi/compiler.cpp        |  3 ++-
 5 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/gallium/state_trackers/clover/core/module.cpp b/src/gallium/state_trackers/clover/core/module.cpp
index a6c5b98d8e..0e11506d0d 100644
--- a/src/gallium/state_trackers/clover/core/module.cpp
+++ b/src/gallium/state_trackers/clover/core/module.cpp
@@ -163,6 +163,7 @@ namespace {
       proc(S &s, QT &x) {
          _proc(s, x.id);
          _proc(s, x.type);
+         _proc(s, x.flags);
          _proc(s, x.size);
          _proc(s, x.data);
       }
diff --git a/src/gallium/state_trackers/clover/core/module.hpp b/src/gallium/state_trackers/clover/core/module.hpp
index 2ddd26426f..ff7e9b6234 100644
--- a/src/gallium/state_trackers/clover/core/module.hpp
+++ b/src/gallium/state_trackers/clover/core/module.hpp
@@ -41,14 +41,19 @@ namespace clover {
             data_local,
             data_private
          };
+         enum class flags_t {
+            none,
+            allow_link_options
+         };
 
-         section(resource_id id, enum type type, size_t size,
-                 const std::vector<char> &data) :
-                 id(id), type(type), size(size), data(data) { }
-         section() : id(0), type(text_intermediate), size(0), data() { }
+         section(resource_id id, enum type type, flags_t flags,
+                 size_t size, const std::vector<char> &data) :
+                 id(id), type(type), flags(flags), size(size), data(data) { }
+         section() : id(0), type(text_intermediate), flags(flags_t::none), size(0), data() { }
 
          resource_id id;
          type type;
+         flags_t flags;
          size_t size;
          std::vector<char> data;
       };
diff --git a/src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp b/src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp
index 40bb426218..8e9d4c7e85 100644
--- a/src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp
+++ b/src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp
@@ -84,7 +84,8 @@ clover::llvm::build_module_library(const ::llvm::Module &mod,
                                    enum module::section::type section_type) {
    module m;
    const auto code = emit_code(mod);
-   m.secs.emplace_back(0, section_type, code.size(), code);
+   m.secs.emplace_back(0, section_type, module::section::flags_t::none,
+                       code.size(), code);
    return m;
 }
 
diff --git a/src/gallium/state_trackers/clover/llvm/codegen/common.cpp b/src/gallium/state_trackers/clover/llvm/codegen/common.cpp
index ddf2083f37..3a08f11fcc 100644
--- a/src/gallium/state_trackers/clover/llvm/codegen/common.cpp
+++ b/src/gallium/state_trackers/clover/llvm/codegen/common.cpp
@@ -179,7 +179,7 @@ namespace {
    make_text_section(const std::vector<char> &code) {
       const pipe_llvm_program_header header { uint32_t(code.size()) };
       module::section text { 0, module::section::text_executable,
-                             header.num_bytes, {} };
+                             module::section::flags_t::none, header.num_bytes, {} };
 
       text.data.insert(text.data.end(), reinterpret_cast<const char *>(&header),
                        reinterpret_cast<const char *>(&header) + sizeof(header));
diff --git a/src/gallium/state_trackers/clover/tgsi/compiler.cpp b/src/gallium/state_trackers/clover/tgsi/compiler.cpp
index e165311fa4..46b8ca7a07 100644
--- a/src/gallium/state_trackers/clover/tgsi/compiler.cpp
+++ b/src/gallium/state_trackers/clover/tgsi/compiler.cpp
@@ -91,7 +91,8 @@ namespace {
 
       unsigned sz = tgsi_num_tokens(prog) * sizeof(tgsi_token);
       std::vector<char> data( (char *)prog, (char *)prog + sz );
-      m.secs.push_back({ 0, module::section::text_executable, sz, data });
+      m.secs.push_back({ 0, module::section::text_executable,
+                         module::section::flags_t::none, sz, data });
    }
 }
 
-- 
2.16.2



More information about the mesa-dev mailing list