//===-------- Debug.h ---- Debug 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
//
//===----------------------------------------------------------------------===//
//
//
//===----------------------------------------------------------------------===//

#ifndef OMPTARGET_DEVICERTL_DEBUG_H
#define OMPTARGET_DEVICERTL_DEBUG_H

/// Assertion
///
/// {
extern "C" {
void __assert_assume(bool cond, const char *exp, const char *file, int line);
void __assert_fail(const char *assertion, const char *file, unsigned line,
                   const char *function);
}

#define ASSERT(e) __assert_assume(e, #e, __FILE__, __LINE__)

///}

/// Print
/// TODO: For now we have to use macros to guard the code because Clang lowers
/// `printf` to different function calls on NVPTX and AMDGCN platforms, and it
/// doesn't work for AMDGCN. After it can work on AMDGCN, we will remove the
/// macro.
/// {

#ifndef __AMDGCN__
extern "C" {
int printf(const char *format, ...);
}

#define PRINTF(fmt, ...) (void)printf(fmt, __VA_ARGS__);
#define PRINT(str) PRINTF("%s", str)
#else
#define PRINTF(fmt, ...)
#define PRINT(str)
#endif

///}

/// Enter a debugging scope for performing function traces. Enabled with
/// FunctionTracting set in the debug kind.
#define FunctionTracingRAII()                                                  \
  DebugEntryRAII Entry(__FILE__, __LINE__, __PRETTY_FUNCTION__);

/// An RAII class for handling entries to debug locations. The current location
/// and function will be printed on entry. Nested levels increase the
/// indentation shown in the debugging output.
struct DebugEntryRAII {
  DebugEntryRAII(const char *File, const unsigned Line, const char *Function);
  ~DebugEntryRAII();
};

#endif
