https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/185837
FP_FAST_FMA should be unconditionally true. >From 5adbf03e3989f19f734b19a21c3a9363dc18ce0f Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Wed, 11 Mar 2026 09:35:58 +0100 Subject: [PATCH] clang/AMDGPU: Ensure more macros are defined for dummy target FP_FAST_FMA should be unconditionally true. --- clang/lib/Basic/Targets/AMDGPU.cpp | 30 +++++++++---------- clang/test/Driver/amdgpu-macros.cl | 10 +++++++ .../Preprocessor/predefined-arch-macros.c | 16 +++++----- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp index 5df6134b72499..c9cd01080fd0c 100644 --- a/clang/lib/Basic/Targets/AMDGPU.cpp +++ b/clang/lib/Basic/Targets/AMDGPU.cpp @@ -289,6 +289,21 @@ void AMDGPUTargetInfo::getTargetDefines(const LangOptions &Opts, else Builder.defineMacro("__R600__"); + // TODO: __HAS_FMAF__, __HAS_LDEXPF__, __HAS_FP64__ are deprecated and will be + // removed in the near future. + if (hasFMAF()) + Builder.defineMacro("__HAS_FMAF__"); + if (hasFastFMAF()) + Builder.defineMacro("FP_FAST_FMAF"); + if (hasLDEXPF()) + Builder.defineMacro("__HAS_LDEXPF__"); + if (hasFP64()) + Builder.defineMacro("__HAS_FP64__"); + if (hasFastFMA()) + Builder.defineMacro("FP_FAST_FMA"); + + Builder.defineMacro("__AMDGCN_CUMODE__", Twine(CUMode)); + // Legacy HIP host code relies on these default attributes to be defined. bool IsHIPHost = Opts.HIP && !Opts.CUDAIsDevice; if (GPUKind == llvm::AMDGPU::GK_NONE && !IsHIPHost) @@ -331,21 +346,6 @@ void AMDGPUTargetInfo::getTargetDefines(const LangOptions &Opts, if (Opts.AtomicIgnoreDenormalMode) Builder.defineMacro("__AMDGCN_UNSAFE_FP_ATOMICS__"); - - // TODO: __HAS_FMAF__, __HAS_LDEXPF__, __HAS_FP64__ are deprecated and will be - // removed in the near future. - if (hasFMAF()) - Builder.defineMacro("__HAS_FMAF__"); - if (hasFastFMAF()) - Builder.defineMacro("FP_FAST_FMAF"); - if (hasLDEXPF()) - Builder.defineMacro("__HAS_LDEXPF__"); - if (hasFP64()) - Builder.defineMacro("__HAS_FP64__"); - if (hasFastFMA()) - Builder.defineMacro("FP_FAST_FMA"); - - Builder.defineMacro("__AMDGCN_CUMODE__", Twine(CUMode)); } void AMDGPUTargetInfo::setAuxTarget(const TargetInfo *Aux) { diff --git a/clang/test/Driver/amdgpu-macros.cl b/clang/test/Driver/amdgpu-macros.cl index 4e421cb4a7401..b75ecadf35666 100644 --- a/clang/test/Driver/amdgpu-macros.cl +++ b/clang/test/Driver/amdgpu-macros.cl @@ -66,6 +66,7 @@ // AMDGCN-based processors. // +// RUN: %clang -E -dM -target amdgcn %s 2>&1 | FileCheck --check-prefixes=DUMMY,SLOW_FMAF -DWAVEFRONT_SIZE=64 %s // RUN: %clang -E -dM -target amdgcn -mcpu=gfx600 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,FAST_FMAF %s -DWAVEFRONT_SIZE=64 -DCPU=gfx600 -DFAMILY=GFX6 // RUN: %clang -E -dM -target amdgcn -mcpu=tahiti %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,FAST_FMAF %s -DWAVEFRONT_SIZE=64 -DCPU=gfx600 -DFAMILY=GFX6 // RUN: %clang -E -dM -target amdgcn -mcpu=gfx601 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,SLOW_FMAF %s -DWAVEFRONT_SIZE=64 -DCPU=gfx601 -DFAMILY=GFX6 @@ -161,6 +162,15 @@ // ARCH-GCN-DAG: #define __GCC_CONSTRUCTIVE_SIZE 128 // UNSAFEFPATOMIC-DAG: #define __AMDGCN_UNSAFE_FP_ATOMICS__ 1 + +// DUMMY-DAG: #define __AMDGCN__ 1 +// DUMMY-DAG: #define __AMDGPU__ 1 +// DUMMY-DAG: #define __AMD__ 1 +// DUMMY-DAG: #define __HAS_FMAF__ 1 +// DUMMY-DAG: #define __HAS_FP64__ 1 +// DUMMY-DAG: #define __HAS_LDEXPF__ 1 + + // RUN: %clang -E -dM -target amdgcn -mcpu=gfx906 \ // RUN: %s 2>&1 | FileCheck --check-prefix=CUMODE-ON %s // RUN: %clang -E -dM -target amdgcn -mcpu=gfx906 -mcumode \ diff --git a/clang/test/Preprocessor/predefined-arch-macros.c b/clang/test/Preprocessor/predefined-arch-macros.c index be94eb064cf91..8cab87e80624b 100644 --- a/clang/test/Preprocessor/predefined-arch-macros.c +++ b/clang/test/Preprocessor/predefined-arch-macros.c @@ -4607,19 +4607,19 @@ // Begin amdgcn tests ---------------- -// RUN: %clang -mcpu=gfx803 -E -dM %s -o - 2>&1 \ +// RUN: %clang -mcpu=gfx900 -E -dM %s -o - 2>&1 \ // RUN: -target amdgcn-unknown-unknown \ -// RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_AMDGCN,CHECK_AMDGCN_803 +// RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_AMDGCN,CHECK_AMDGCN_900 // RUN: %clang -E -dM %s -o - 2>&1 \ // RUN: -target amdgcn-unknown-unknown \ // RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_AMDGCN,CHECK_AMDGCN_NONE +// CHECK_AMDGCN: #define FP_FAST_FMA 1 +// CHECK_AMDGCN_900: #define FP_FAST_FMAF 1 +// CHECK_AMDGCN_NONE-NOT: FP_FAST_FMAF // CHECK_AMDGCN: #define __AMDGCN__ 1 -// CHECK_AMDGCN_803: #define __HAS_FMAF__ 1 -// CHECK_AMDGCN_803: #define __HAS_FP64__ 1 -// CHECK_AMDGCN_803: #define __HAS_LDEXPF__ 1 -// CHECK_AMDGCN_NONE-NOT: #define __HAS_FMAF__ -// CHECK_AMDGCN_NONE-NOT: #define __HAS_FP64__ -// CHECK_AMDGCN_NONE-NOT: #define __HAS_LDEXPF__ +// CHECK_AMDGCN: #define __HAS_FMAF__ 1 +// CHECK_AMDGCN: #define __HAS_FP64__ 1 +// CHECK_AMDGCN: #define __HAS_LDEXPF__ 1 // Begin r600 tests ---------------- _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
