| //===- debug.h - Debugging output utilities ---------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file is a part of the ORC runtime support library. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef ORC_RT_DEBUG_H |
| #define ORC_RT_DEBUG_H |
| |
| #include <atomic> |
| |
| #ifndef NDEBUG |
| |
| namespace __orc_rt { |
| |
| extern std::atomic<const char *> DebugTypes; |
| extern char DebugTypesAll; |
| extern char DebugTypesNone; |
| |
| const char *initializeDebug(); |
| bool debugTypeEnabled(const char *Type, const char *Types); |
| void printdbg(const char *format, ...); |
| |
| } // namespace __orc_rt |
| |
| #define ORC_RT_DEBUG_WITH_TYPE(TYPE, X) \ |
| do { \ |
| const char *Types = \ |
| ::__orc_rt::DebugTypes.load(std::memory_order_relaxed); \ |
| if (!Types) \ |
| Types = initializeDebug(); \ |
| if (Types == &DebugTypesNone) \ |
| break; \ |
| if (Types == &DebugTypesAll || \ |
| ::__orc_rt::debugTypeEnabled(TYPE, Types)) { \ |
| X; \ |
| } \ |
| } while (false) |
| |
| #else |
| |
| #define ORC_RT_DEBUG_WITH_TYPE(TYPE, X) \ |
| do { \ |
| } while (false) |
| |
| #endif // !NDEBUG |
| |
| #define ORC_RT_DEBUG(X) ORC_RT_DEBUG_WITH_TYPE(DEBUG_TYPE, X) |
| |
| #endif // ORC_RT_COMMON_H |