[Mesa-dev] [PATCH 15/47] clover/llvm: Move a bunch of utility functions into separate file.

Francisco Jerez currojerez at riseup.net
Mon Jul 4 00:51:24 UTC 2016


Some of these will be useful from a different compilation unit in the
same subtree so put them in a publicly accessible header file.

Reviewed-by: Serge Martin <edb+mesa at sigluy.net>
---
 src/gallium/state_trackers/clover/Makefile.sources |  3 +-
 .../state_trackers/clover/llvm/invocation.cpp      | 61 +-------------
 src/gallium/state_trackers/clover/llvm/util.hpp    | 98 ++++++++++++++++++++++
 3 files changed, 101 insertions(+), 61 deletions(-)
 create mode 100644 src/gallium/state_trackers/clover/llvm/util.hpp

diff --git a/src/gallium/state_trackers/clover/Makefile.sources b/src/gallium/state_trackers/clover/Makefile.sources
index c4a692b..4b30941 100644
--- a/src/gallium/state_trackers/clover/Makefile.sources
+++ b/src/gallium/state_trackers/clover/Makefile.sources
@@ -55,7 +55,8 @@ CPP_SOURCES := \
 
 LLVM_SOURCES := \
 	llvm/compat.hpp \
-	llvm/invocation.cpp
+	llvm/invocation.cpp \
+	llvm/util.hpp
 
 TGSI_SOURCES := \
 	tgsi/compiler.cpp
diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp
index 16229e5..8ffdcf7 100644
--- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
+++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
@@ -25,6 +25,7 @@
 //
 
 #include "llvm/compat.hpp"
+#include "llvm/util.hpp"
 #include "core/compiler.hpp"
 #include "util/algorithm.hpp"
 
@@ -88,66 +89,6 @@ namespace {
       using namespace ::llvm;
    }
 
-   template<typename E> void
-   fail(std::string &r_log, E &&e, const std::string &s) {
-      r_log += s;
-      throw e;
-   }
-
-   inline std::vector<std::string>
-   tokenize(const std::string &s) {
-      std::vector<std::string> ss;
-      std::istringstream iss(s);
-      std::string t;
-
-      while (getline(iss, t, ' '))
-         ss.push_back(t);
-
-      return ss;
-   }
-
-   struct target {
-      target(const std::string &s) :
-         cpu(s.begin(), s.begin() + s.find_first_of("-")),
-         triple(s.begin() + s.find_first_of("-") + 1, s.end()) {}
-
-      std::string cpu;
-      std::string triple;
-   };
-
-   namespace debug {
-      enum flag {
-         clc = 1 << 0,
-         llvm = 1 << 1,
-         native = 1 << 2
-      };
-
-      inline bool
-      has_flag(flag f) {
-         static const struct debug_named_value debug_options[] = {
-            { "clc", clc, "Dump the OpenCL C code for all kernels." },
-            { "llvm", llvm, "Dump the generated LLVM IR for all kernels." },
-            { "native", native, "Dump kernel assembly code for targets "
-              "specifying PIPE_SHADER_IR_NATIVE" },
-            DEBUG_NAMED_VALUE_END
-         };
-         static const unsigned flags =
-            debug_get_flags_option("CLOVER_DEBUG", debug_options, 0);
-
-         return flags & f;
-      }
-
-      inline void
-      log(const std::string &suffix, const std::string &s) {
-         const std::string path = debug_get_option("CLOVER_DEBUG_FILE",
-                                                   "stderr");
-         if (path == "stderr")
-            std::cerr << s;
-         else
-            std::ofstream(path + suffix, std::ios::app) << s;
-      }
-   }
-
    void
    init_targets() {
       static bool targets_initialized = false;
diff --git a/src/gallium/state_trackers/clover/llvm/util.hpp b/src/gallium/state_trackers/clover/llvm/util.hpp
new file mode 100644
index 0000000..f9a057d
--- /dev/null
+++ b/src/gallium/state_trackers/clover/llvm/util.hpp
@@ -0,0 +1,98 @@
+//
+// Copyright 2012-2016 Francisco Jerez
+// Copyright 2012-2016 Advanced Micro Devices, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#ifndef CLOVER_LLVM_UTIL_HPP
+#define CLOVER_LLVM_UTIL_HPP
+
+#include "util/u_debug.h"
+
+#include <vector>
+#include <fstream>
+#include <iostream>
+#include <sstream>
+
+namespace clover {
+   namespace llvm {
+      template<typename E> void
+      fail(std::string &r_log, E &&e, const std::string &s) {
+         r_log += s;
+         throw e;
+      }
+
+      inline std::vector<std::string>
+      tokenize(const std::string &s) {
+         std::vector<std::string> ss;
+         std::istringstream iss(s);
+         std::string t;
+
+         while (getline(iss, t, ' '))
+            ss.push_back(t);
+
+         return ss;
+      }
+
+      struct target {
+         target(const std::string &s) :
+            cpu(s.begin(), s.begin() + s.find_first_of("-")),
+            triple(s.begin() + s.find_first_of("-") + 1, s.end()) {}
+
+         std::string cpu;
+         std::string triple;
+      };
+
+      namespace debug {
+         enum flag {
+            clc = 1 << 0,
+            llvm = 1 << 1,
+            native = 1 << 2
+         };
+
+         inline bool
+         has_flag(flag f) {
+            static const struct debug_named_value debug_options[] = {
+               { "clc", clc, "Dump the OpenCL C code for all kernels." },
+               { "llvm", llvm, "Dump the generated LLVM IR for all kernels." },
+               { "native", native, "Dump kernel assembly code for targets "
+                 "specifying PIPE_SHADER_IR_NATIVE" },
+               DEBUG_NAMED_VALUE_END
+            };
+            static const unsigned flags =
+               debug_get_flags_option("CLOVER_DEBUG", debug_options, 0);
+
+            return flags & f;
+         }
+
+         inline void
+         log(const std::string &suffix, const std::string &s) {
+            const std::string path = debug_get_option("CLOVER_DEBUG_FILE",
+                                                      "stderr");
+            if (path == "stderr")
+               std::cerr << s;
+            else
+               std::ofstream(path + suffix, std::ios::app) << s;
+         }
+      }
+   }
+}
+
+#endif
-- 
2.9.0



More information about the mesa-dev mailing list