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

Reply via email to