Skip to content

Commit 9833353

Browse files
committed
[AMDGPU] Treat printf as builtin for OpenCL
1 parent 1949fe9 commit 9833353

File tree

4 files changed

+23
-0
lines changed

4 files changed

+23
-0
lines changed

clang/include/clang/Basic/BuiltinsAMDGPU.def

Lines changed: 8 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
//===----------------------------------------------------------------------===//
@@ -406,5 +410,9 @@ TARGET_BUILTIN(__builtin_amdgcn_cvt_pk_fp8_f32, "iffiIb", "nc", "fp8-insts")
406410
TARGET_BUILTIN(__builtin_amdgcn_cvt_sr_bf8_f32, "ifiiIi", "nc", "fp8-insts")
407411
TARGET_BUILTIN(__builtin_amdgcn_cvt_sr_fp8_f32, "ifiiIi", "nc", "fp8-insts")
408412

413+
// OpenCL
414+
LANGBUILTIN(printf, "icC*4.", "fp:0:", ALL_OCL_LANGUAGES)
415+
409416
#undef BUILTIN
410417
#undef TARGET_BUILTIN
418+
#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"
@@ -3598,6 +3599,12 @@ unsigned FunctionDecl::getBuiltinID(bool ConsiderWrapperFunctions) const {
35983599
if (!ConsiderWrapperFunctions && getStorageClass() == SC_Static)
35993600
return 0;
36003601

3602+
// AMDGCN implementation supports printf as a builtin
3603+
// for OpenCL
3604+
if (Context.getTargetInfo().getTriple().isAMDGCN() &&
3605+
Context.getLangOpts().OpenCL && BuiltinID == AMDGPU::BIprintf)
3606+
return BuiltinID;
3607+
36013608
// OpenCL v1.2 s6.9.f - The library functions defined in
36023609
// the C99 standard headers are not available.
36033610
if (Context.getLangOpts().OpenCL &&

clang/lib/Basic/Targets/AMDGPU.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ static constexpr Builtin::Info BuiltinInfo[] = {
9191
{#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
9292
#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \
9393
{#ID, TYPE, ATTRS, FEATURE, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
94+
#define LANGBUILTIN(ID, TYPE, ATTRS, LANG) \
95+
{ #ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, LANG } \
96+
,
9497
#include "clang/Basic/BuiltinsAMDGPU.def"
9598
};
9699

clang/lib/CodeGen/CGBuiltin.cpp

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

2461+
// Mutate the printf builtin ID so that we use the same CodeGen path for
2462+
// HIP and OpenCL with AMDGPU targets.
2463+
if (getTarget().getTriple().isAMDGCN() && BuiltinID == AMDGPU::BIprintf)
2464+
BuiltinID = Builtin::BIprintf;
2465+
24612466
// If the builtin has been declared explicitly with an assembler label,
24622467
// disable the specialized emitting below. Ideally we should communicate the
24632468
// rename in IR, or at least avoid generating the intrinsic calls that are

0 commit comments

Comments
 (0)