summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/state_trackers/clover/Makefile.sources3
-rw-r--r--src/gallium/state_trackers/clover/llvm/invocation.cpp61
-rw-r--r--src/gallium/state_trackers/clover/llvm/util.hpp98
3 files changed, 101 insertions, 61 deletions
diff --git a/src/gallium/state_trackers/clover/Makefile.sources b/src/gallium/state_trackers/clover/Makefile.sources
index c4a692be9cb..4b30941e23b 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 16229e5caf7..8ffdcf72062 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 00000000000..f9a057d878c
--- /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