1 //===- debug.h - Debugging output utilities ---------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file is a part of the ORC runtime support library. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef ORC_RT_DEBUG_H 14 #define ORC_RT_DEBUG_H 15 16 #include <atomic> 17 18 #ifndef NDEBUG 19 20 namespace __orc_rt { 21 22 extern std::atomic<const char *> DebugTypes; 23 extern char DebugTypesAll; 24 extern char DebugTypesNone; 25 26 const char *initializeDebug(); 27 bool debugTypeEnabled(const char *Type, const char *Types); 28 void printdbg(const char *format, ...); 29 30 } // namespace __orc_rt 31 32 #define ORC_RT_DEBUG_WITH_TYPE(TYPE, X) \ 33 do { \ 34 const char *Types = \ 35 ::__orc_rt::DebugTypes.load(std::memory_order_relaxed); \ 36 if (!Types) \ 37 Types = initializeDebug(); \ 38 if (Types == &DebugTypesNone) \ 39 break; \ 40 if (Types == &DebugTypesAll || \ 41 ::__orc_rt::debugTypeEnabled(TYPE, Types)) { \ 42 X; \ 43 } \ 44 } while (false) 45 46 #else 47 48 #define ORC_RT_DEBUG_WITH_TYPE(TYPE, X) \ 49 do { \ 50 } while (false) 51 52 #endif // !NDEBUG 53 54 #define ORC_RT_DEBUG(X) ORC_RT_DEBUG_WITH_TYPE(DEBUG_TYPE, X) 55 56 #endif // ORC_RT_DEBUG_H 57