Joseph Huber 2d9f406943
[OpenMP] Adjust 'printf' handling in the OpenMP runtime (#123670)
Summary:
We used to avoid a lot of this stuff because we didn't properly handle
variadics in device code. That's been solved for now, so we can just
make an internal printf handler that forwards to the external `vprintf`
function. This is either provided by NVIDIA's SDK or by the GPU libc
implementation.

The main reason for doing this is because it prevents the stupid AMDGPU
printf pass from mangling our beautiful printfs!
2025-01-20 21:56:46 -06:00

45 lines
1.7 KiB
C

//===-------- 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
#include "Configuration.h"
#include "LibC.h"
/// Assertion
///
/// {
extern "C" {
void __assert_assume(bool condition);
void __assert_fail(const char *expr, const char *file, unsigned line,
const char *function);
void __assert_fail_internal(const char *expr, const char *msg, const char *file,
unsigned line, const char *function);
}
#define ASSERT(expr, msg) \
{ \
if (config::isDebugMode(DeviceDebugKind::Assertion) && !(expr)) \
__assert_fail_internal(#expr, msg, __FILE__, __LINE__, \
__PRETTY_FUNCTION__); \
else \
__assert_assume(expr); \
}
#define UNREACHABLE(msg) \
printf(msg); \
__builtin_trap(); \
__builtin_unreachable();
///}
#endif