Skip to content

Commit 62b5f5a

Browse files
committed
[AMDGPU] Treat printf as builtin for OpenCL
1 parent 9b0b337 commit 62b5f5a

File tree

4 files changed

+21
-0
lines changed

4 files changed

+21
-0
lines changed

clang/include/clang/Basic/BuiltinsAMDGPU.def

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
#if defined(BUILTIN) && !defined(TARGET_BUILTIN)
2222
# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
2323
#endif
24+
25+
#if defined(BUILTIN) && !defined(LANGBUILTIN)
26+
#define LANGBUILTIN(ID, TYPE, ATTRS, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS)
27+
#endif
2428
//===----------------------------------------------------------------------===//
2529
// SI+ only builtins.
2630
//===----------------------------------------------------------------------===//
@@ -498,6 +502,9 @@ TARGET_BUILTIN(__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64, "V4fiV2iV4fs",
498502
TARGET_BUILTIN(__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64, "V4fiV2iV4fs", "nc", "gfx12-insts,wavefrontsize64")
499503
TARGET_BUILTIN(__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64, "V4fiV2iV4fs", "nc", "gfx12-insts,wavefrontsize64")
500504
TARGET_BUILTIN(__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64, "V4fiV2iV4fs", "nc", "gfx12-insts,wavefrontsize64")
505+
// OpenCL
506+
LANGBUILTIN(printf, "icC*4.", "fp:0:", ALL_OCL_LANGUAGES)
501507

502508
#undef BUILTIN
503509
#undef TARGET_BUILTIN
510+
#undef LANGBUILTIN

clang/lib/AST/Decl.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include "clang/Basic/SourceLocation.h"
5050
#include "clang/Basic/SourceManager.h"
5151
#include "clang/Basic/Specifiers.h"
52+
#include "clang/Basic/TargetBuiltins.h"
5253
#include "clang/Basic/TargetCXXABI.h"
5354
#include "clang/Basic/TargetInfo.h"
5455
#include "clang/Basic/Visibility.h"
@@ -3616,6 +3617,12 @@ unsigned FunctionDecl::getBuiltinID(bool ConsiderWrapperFunctions) const {
36163617
if (!ConsiderWrapperFunctions && getStorageClass() == SC_Static)
36173618
return 0;
36183619

3620+
// AMDGCN implementation supports printf as a builtin
3621+
// for OpenCL
3622+
if (Context.getTargetInfo().getTriple().isAMDGCN() &&
3623+
Context.getLangOpts().OpenCL && BuiltinID == AMDGPU::BIprintf)
3624+
return BuiltinID;
3625+
36193626
// OpenCL v1.2 s6.9.f - The library functions defined in
36203627
// the C99 standard headers are not available.
36213628
if (Context.getLangOpts().OpenCL &&

clang/lib/Basic/Targets/AMDGPU.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ static constexpr Builtin::Info BuiltinInfo[] = {
9393
{#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
9494
#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \
9595
{#ID, TYPE, ATTRS, FEATURE, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
96+
#define LANGBUILTIN(ID, TYPE, ATTRS, LANG) \
97+
{#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, LANG},
9698
#include "clang/Basic/BuiltinsAMDGPU.def"
9799
};
98100

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2550,6 +2550,11 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
25502550
&getTarget().getLongDoubleFormat() == &llvm::APFloat::IEEEquad())
25512551
BuiltinID = mutateLongDoubleBuiltin(BuiltinID);
25522552

2553+
// Mutate the printf builtin ID so that we use the same CodeGen path for
2554+
// HIP and OpenCL with AMDGPU targets.
2555+
if (getTarget().getTriple().isAMDGCN() && BuiltinID == AMDGPU::BIprintf)
2556+
BuiltinID = Builtin::BIprintf;
2557+
25532558
// If the builtin has been declared explicitly with an assembler label,
25542559
// disable the specialized emitting below. Ideally we should communicate the
25552560
// rename in IR, or at least avoid generating the intrinsic calls that are

0 commit comments

Comments
 (0)