llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: George Burgess IV (gburgessiv) <details> <summary>Changes</summary> I noticed that Android's libc has a fair few gates on these `#define`s. Clang will set them as appropriate for other arches, and e.g., GCC has logic to set them on x86_64: https://godbolt.org/z/6zE1z185M. (Well, `FMAL` requires `-mlong-double-64`, but might as well be complete here). Seems best to be consistent. Issue #<!-- -->26102 Assisted-by: Gemini --- Full diff: https://github.com/llvm/llvm-project/pull/237277.diff 3 Files Affected: - (modified) clang/lib/Basic/Targets/X86.cpp (+7) - (modified) clang/test/Preprocessor/predefined-arch-macros-x86.c (+2) - (modified) clang/test/Preprocessor/x86_target_features.c (+35) ``````````diff diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index 670c85a769d71b..fed024c8d5672d 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -836,6 +836,13 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts, if (HasFMA) Builder.defineMacro("__FMA__"); + if (HasFMA || XOPLevel >= FMA4) { + Builder.defineMacro("__FP_FAST_FMA"); + Builder.defineMacro("__FP_FAST_FMAF"); + if (&getLongDoubleFormat() == &llvm::APFloat::IEEEdouble()) + Builder.defineMacro("__FP_FAST_FMAL"); + } + if (HasF16C) Builder.defineMacro("__F16C__"); diff --git a/clang/test/Preprocessor/predefined-arch-macros-x86.c b/clang/test/Preprocessor/predefined-arch-macros-x86.c index 37b7c612b49196..20b533c0fcd1a4 100644 --- a/clang/test/Preprocessor/predefined-arch-macros-x86.c +++ b/clang/test/Preprocessor/predefined-arch-macros-x86.c @@ -37,6 +37,8 @@ // X86_64_V3-NEXT: #define __BMI__ 1 // X86_64_V3: #define __F16C__ 1 // X86_64_V3: #define __FMA__ 1 +// X86_64_V3: #define __FP_FAST_FMA 1 +// X86_64_V3-NEXT: #define __FP_FAST_FMAF 1 // X86_64_V3: #define __LZCNT__ 1 // X86_64_V3: #define __MOVBE__ 1 // X86_64_V3: #define __XSAVE__ 1 diff --git a/clang/test/Preprocessor/x86_target_features.c b/clang/test/Preprocessor/x86_target_features.c index 90b785d3c0694e..79074db5fd44ee 100644 --- a/clang/test/Preprocessor/x86_target_features.c +++ b/clang/test/Preprocessor/x86_target_features.c @@ -762,3 +762,38 @@ // RUN: %clang -target x86_64-unknown-unknown -march=x86-64 -mapx-features=egpr -mapx-inline-asm-use-gpr32 -x c -E -dM -o - %s | FileCheck --check-prefixes=USEGPR32 %s // NOUSEGPR32-NOT: #define __APX_INLINE_ASM_USE_GPR32__ 1 // USEGPR32: #define __APX_INLINE_ASM_USE_GPR32__ 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=FMA %s +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma -mfma4 -mno-fma4 -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=FMA %s +// FMA: #define __AVX__ 1 +// FMA-NOT: #define __FMA4__ 1 +// FMA: #define __FMA__ 1 +// FMA: #define __FP_FAST_FMA 1 +// FMA: #define __FP_FAST_FMAF 1 +// FMA-NOT: #define __FP_FAST_FMAL 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma -mlong-double-64 -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=FMAL %s +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma4 -mlong-double-64 -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=FMAL %s +// FMAL: #define __FP_FAST_FMA 1 +// FMAL: #define __FP_FAST_FMAF 1 +// FMAL: #define __FP_FAST_FMAL 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma -mno-fma -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOFMA %s +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma -mno-avx -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOFMA %s +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma4 -mno-fma4 -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOFMA %s +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma4 -mno-avx -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=NOFMA %s +// NOFMA-NOT: #define __FMA4__ 1 +// NOFMA-NOT: #define __FMA__ 1 +// NOFMA-NOT: #define __FP_FAST_FMA 1 +// NOFMA-NOT: #define __FP_FAST_FMAF 1 +// NOFMA-NOT: #define __FP_FAST_FMAL 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma4 -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=FMA4 %s +// RUN: %clang -target i386-unknown-unknown -march=atom -mfma -mfma4 -mno-fma -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=FMA4 %s +// FMA4: #define __AVX__ 1 +// FMA4: #define __FMA4__ 1 +// FMA4-NOT: #define __FMA__ 1 +// FMA4: #define __FP_FAST_FMA 1 +// FMA4: #define __FP_FAST_FMAF 1 +// FMA4-NOT: #define __FP_FAST_FMAL 1 +// FMA4: #define __SSE4A__ 1 `````````` </details> https://github.com/llvm/llvm-project/pull/237277 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
