diff options
-rw-r--r-- | src/gallium/state_trackers/clover/Makefile.sources | 3 | ||||
-rw-r--r-- | src/gallium/state_trackers/clover/llvm/invocation.cpp | 61 | ||||
-rw-r--r-- | src/gallium/state_trackers/clover/llvm/util.hpp | 98 |
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 |