clover/llvm: Move a bunch of utility functions into separate file.
authorFrancisco Jerez <currojerez@riseup.net>
Tue, 17 May 2016 14:02:47 +0000 (16:02 +0200)
committerFrancisco Jerez <currojerez@riseup.net>
Tue, 12 Jul 2016 03:22:43 +0000 (20:22 -0700)
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@sigluy.net>
Tested-by: Jan Vesely <jan.vesely@rutgers.edu>
src/gallium/state_trackers/clover/Makefile.sources
src/gallium/state_trackers/clover/llvm/invocation.cpp
src/gallium/state_trackers/clover/llvm/util.hpp [new file with mode: 0644]

index c4a692be9cb83aa873c27faf981047e1911ba430..4b30941e23baec6360ef5a056293bd50944329bf 100644 (file)
@@ -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
index 16229e5caf78c3cd50ebd2445a3dd3a4ee0c1e2c..8ffdcf72062f3c6f955c46e4d1fa58c3b817e519 100644 (file)
@@ -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 (file)
index 0000000..f9a057d
--- /dev/null
@@ -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