summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary
diff options
context:
space:
mode:
authorJose Fonseca <[email protected]>2016-04-14 11:13:55 +0100
committerJose Fonseca <[email protected]>2016-04-19 11:28:37 +0100
commit9aa23b11e4a25cd94cb48de74c580675577fa074 (patch)
tree856efd7f50c547ec5b986ed551dcfa5cf9698bc5 /src/gallium/auxiliary
parentf6621cd3be16d541f921b1b0a8cd6bc836826704 (diff)
gallivm: Use LLVMPrintValueToString where available.
And llvm::raw_string_ostream where not (LLVM 3.3). Thereby eliminating yet another dependency on unstable LLVM interfaces. As a bonus this also gets LLVM IR on OutputDebugMessageA on MSVC (which was disabled, probably due to C++ issues.) Tested `lp_test_arit -v -v` on LLVM 3.3, 3.4 and 3.8. Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_debug.cpp45
1 files changed, 10 insertions, 35 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
index 11e9f92189f..a8c3899ea66 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
+++ b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
@@ -64,38 +64,6 @@ lp_check_alignment(const void *ptr, unsigned alignment)
return ((uintptr_t)ptr & (alignment - 1)) == 0;
}
-#if (defined(PIPE_OS_WINDOWS) && !defined(PIPE_CC_MSVC)) || defined(PIPE_OS_EMBEDDED)
-
-class raw_debug_ostream :
- public llvm::raw_ostream
-{
-private:
- uint64_t pos;
-
-public:
- raw_debug_ostream() : pos(0) { }
-
- void write_impl(const char *Ptr, size_t Size);
-
- uint64_t current_pos() const { return pos; }
- size_t preferred_buffer_size() const { return 512; }
-};
-
-
-void
-raw_debug_ostream::write_impl(const char *Ptr, size_t Size)
-{
- if (Size > 0) {
- char *lastPtr = (char *)&Ptr[Size];
- char last = *lastPtr;
- *lastPtr = 0;
- _debug_printf("%*s", Size, Ptr);
- *lastPtr = last;
- pos += Size;
- }
-}
-
-#endif
extern "C" const char *
lp_get_module_id(LLVMModuleRef module)
@@ -110,10 +78,17 @@ lp_get_module_id(LLVMModuleRef module)
extern "C" void
lp_debug_dump_value(LLVMValueRef value)
{
-#if (defined(PIPE_OS_WINDOWS) && !defined(PIPE_CC_MSVC)) || defined(PIPE_OS_EMBEDDED)
- raw_debug_ostream os;
+#if HAVE_LLVM >= 0x0304
+ char *str = LLVMPrintValueToString(value);
+ if (str) {
+ os_log_message(str);
+ LLVMDisposeMessage(str);
+ }
+#elif defined(PIPE_OS_WINDOWS) || defined(PIPE_OS_EMBEDDED)
+ std::string str;
+ llvm::raw_string_ostream os(str);
llvm::unwrap(value)->print(os);
- os.flush();
+ os_log_message(str.c_str());
#else
LLVMDumpValue(value);
#endif