[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-27 Thread via cfe-commits

https://github.com/CarolineConcatto closed 
https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-21 Thread Paul Walker via cfe-commits

https://github.com/paulwalker-arm approved this pull request.


https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-21 Thread Paul Walker via cfe-commits


@@ -744,3 +744,38 @@
 // CHECK-SMEB16B16: __ARM_FEATURE_SME2 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SME_B16B16 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SVE_B16B16 1
+//
+//  RUN: %clang --target=aarch64 -march=armv9-a+fp8 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8 %s
+// CHECK-FP8: __ARM_FEATURE_FP8 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8fma -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8FMA %s
+// CHECK-FP8FMA: __ARM_FEATURE_FP8 1
+// CHECK-FP8FMA: __ARM_FEATURE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot2 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT2 %s
+// CHECK-FP8DOT2: __ARM_FEATURE_FP8 1
+// CHECK-FP8DOT2: __ARM_FEATURE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot4 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT4 %s
+// CHECK-FP8DOT4: __ARM_FEATURE_FP8 1
+// CHECK-FP8DOT4: __ARM_FEATURE_FP8DOT4 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot2 -x c -E -dM %s -o 
- | FileCheck --check-prefix=CHECK-SSVE-FP8DOT2 %s
+// CHECK-SSVE-FP8DOT2: __ARM_FEATURE_SME2 1
+// CHECK-SSVE-FP8DOT2: __ARM_FEATURE_SSVE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot4 -x c -E -dM %s -o 
- | FileCheck --check-prefix=CHECK-SSVE-FP8DOT4 %s
+// CHECK-SSVE-FP8DOT4: __ARM_FEATURE_SME2 1
+// CHECK-SSVE-FP8DOT4: __ARM_FEATURE_SSVE_FP8DOT4 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8fma -x c -E -dM %s -o - 
| FileCheck --check-prefix=CHECK-SSVE-FP8FMA %s
+// CHECK-SSVE-FP8FMA: __ARM_FEATURE_SME2 1
+// CHECK-SSVE-FP8FMA: __ARM_FEATURE_SSVE_FP8FMA 1

paulwalker-arm wrote:

Can the three `_ssve-fp8...` options also check for `__ARM_FEATURE_FP8`?

https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-21 Thread Paul Walker via cfe-commits

https://github.com/paulwalker-arm edited 
https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-21 Thread Paul Walker via cfe-commits

https://github.com/paulwalker-arm commented:

Last question but otherwise this looks good to me.

https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-21 Thread via cfe-commits

https://github.com/CarolineConcatto updated 
https://github.com/llvm/llvm-project/pull/140591

>From 22e44648ce4ec1c747406f7d98ae7c736d0e441c Mon Sep 17 00:00:00 2001
From: CarolineConcatto 
Date: Mon, 19 May 2025 18:21:28 +
Subject: [PATCH 1/2] [Clang][AArch64]Add FP8 ACLE macros implementation

This patch implements the macros described in the ACLE[1]

[1] 
https://github.com/ARM-software/acle/blob/main/main/acle.md#modal-8-bit-floating-point-extensions
---
 clang/lib/Basic/Targets/AArch64.cpp   | 59 +++
 clang/lib/Basic/Targets/AArch64.h |  9 +++
 .../Preprocessor/aarch64-target-features.c| 31 ++
 3 files changed, 99 insertions(+)

diff --git a/clang/lib/Basic/Targets/AArch64.cpp 
b/clang/lib/Basic/Targets/AArch64.cpp
index e1f6c7b834dc7..7267b17704a41 100644
--- a/clang/lib/Basic/Targets/AArch64.cpp
+++ b/clang/lib/Basic/Targets/AArch64.cpp
@@ -596,6 +596,33 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions 
&Opts,
   if (HasSMEB16B16)
 Builder.defineMacro("__ARM_FEATURE_SME_B16B16", "1");
 
+  if (HasFP8)
+Builder.defineMacro("__ARM_FEATURE_FP8", "1");
+
+  if (HasFP8FMA)
+Builder.defineMacro("__ARM_FEATURE_FP8FMA", "1");
+
+  if (HasFP8DOT2)
+Builder.defineMacro("__ARM_FEATURE_FP8DOT2", "1");
+
+  if (HasFP8DOT4)
+Builder.defineMacro("__ARM_FEATURE_FP8DOT4", "1");
+
+  if (HasSSVE_FP8DOT2)
+Builder.defineMacro("__ARM_FEATURE_SSVE_FP8DOT2", "1");
+
+  if (HasSSVE_FP8DOT4)
+Builder.defineMacro("__ARM_FEATURE_SSVE_FP8DOT4", "1");
+
+  if (HasSSVE_FP8FMA)
+Builder.defineMacro("__ARM_FEATURE_SSVE_FP8FMA", "1");
+
+  if (HasSME_F8F32)
+Builder.defineMacro("__ARM_FEATURE_SME_F8F32", "1");
+
+  if (HasSME_F8F16)
+Builder.defineMacro("__ARM_FEATURE_SME_F8F16", "1");
+
   if (HasCRC)
 Builder.defineMacro("__ARM_FEATURE_CRC32", "1");
 
@@ -885,6 +912,15 @@ bool AArch64TargetInfo::hasFeature(StringRef Feature) 
const {
   .Cases("ls64", "ls64_v", "ls64_accdata", HasLS64)
   .Case("wfxt", HasWFxT)
   .Case("rcpc3", HasRCPC3)
+  .Case("fp8", HasFP8)
+  .Case("fp8fma", HasFP8FMA)
+  .Case("fp8dot2", HasFP8DOT2)
+  .Case("fp8dot4", HasFP8DOT4)
+  .Case("ssve-fp8dot2", HasSSVE_FP8DOT2)
+  .Case("ssve-fp8dot4", HasSSVE_FP8DOT4)
+  .Case("ssve-fp8fma", HasSSVE_FP8FMA)
+  .Case("sme-f8f32", HasSME_F8F32)
+  .Case("sme-f8f16", HasSME_F8F16)
   .Default(false);
 }
 
@@ -1046,6 +1082,29 @@ bool 
AArch64TargetInfo::handleTargetFeatures(std::vector &Features,
   HasSVEB16B16 = true;
   HasSMEB16B16 = true;
 }
+
+if (Feature == "+fp8")
+  HasFP8 = true;
+if (Feature == "+fp8fma")
+  HasFP8FMA = true;
+if (Feature == "+fp8dot2")
+  HasFP8DOT2 = true;
+if (Feature == "+fp8dot4")
+  HasFP8DOT4 = true;
+if (Feature == "+ssve-fp8dot2")
+  HasSSVE_FP8DOT2 = true;
+if (Feature == "+ssve-fp8dot4")
+  HasSSVE_FP8DOT4 = true;
+if (Feature == "+ssve-fp8fma")
+  HasSSVE_FP8FMA = true;
+if (Feature == "+sme-f8f32") {
+  HasSME2 = true;
+  HasSME_F8F32 = true;
+}
+if (Feature == "+sme-f8f16") {
+  HasSME2 = true;
+  HasSME_F8F16 = true;
+}
 if (Feature == "+sb")
   HasSB = true;
 if (Feature == "+predres")
diff --git a/clang/lib/Basic/Targets/AArch64.h 
b/clang/lib/Basic/Targets/AArch64.h
index 6eeac69af20df..7230f22d5bb86 100644
--- a/clang/lib/Basic/Targets/AArch64.h
+++ b/clang/lib/Basic/Targets/AArch64.h
@@ -106,6 +106,15 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public 
TargetInfo {
   bool HasSMEF16F16 = false;
   bool HasSMEB16B16 = false;
   bool HasSME2p1 = false;
+  bool HasFP8 = false;
+  bool HasFP8FMA = false;
+  bool HasFP8DOT2 = false;
+  bool HasFP8DOT4 = false;
+  bool HasSSVE_FP8DOT2 = false;
+  bool HasSSVE_FP8DOT4 = false;
+  bool HasSSVE_FP8FMA = false;
+  bool HasSME_F8F32 = false;
+  bool HasSME_F8F16 = false;
   bool HasSB = false;
   bool HasPredRes = false;
   bool HasSSBS = false;
diff --git a/clang/test/Preprocessor/aarch64-target-features.c 
b/clang/test/Preprocessor/aarch64-target-features.c
index 3f801c4344940..52045d216262f 100644
--- a/clang/test/Preprocessor/aarch64-target-features.c
+++ b/clang/test/Preprocessor/aarch64-target-features.c
@@ -744,3 +744,34 @@
 // CHECK-SMEB16B16: __ARM_FEATURE_SME2 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SME_B16B16 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SVE_B16B16 1
+//
+//  RUN: %clang --target=aarch64 -march=armv9-a+fp8 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8 %s
+// CHECK-FP8: __ARM_FEATURE_FP8 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8fma -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8FMA %s
+// CHECK-FP8FMA: __ARM_FEATURE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot2 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT2 %s
+// CHECK-FP8DOT2: __ARM_FEATURE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot4 -x c

[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-20 Thread Paul Walker via cfe-commits


@@ -1046,6 +1082,29 @@ bool 
AArch64TargetInfo::handleTargetFeatures(std::vector &Features,
   HasSVEB16B16 = true;
   HasSMEB16B16 = true;
 }
+
+if (Feature == "+fp8")
+  HasFP8 = true;
+if (Feature == "+fp8fma")
+  HasFP8FMA = true;
+if (Feature == "+fp8dot2")
+  HasFP8DOT2 = true;
+if (Feature == "+fp8dot4")
+  HasFP8DOT4 = true;
+if (Feature == "+ssve-fp8dot2")
+  HasSSVE_FP8DOT2 = true;

paulwalker-arm wrote:

This and the other `SSVE` features should also set `HasSME2`?

https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-20 Thread Paul Walker via cfe-commits


@@ -1046,6 +1082,29 @@ bool 
AArch64TargetInfo::handleTargetFeatures(std::vector &Features,
   HasSVEB16B16 = true;
   HasSMEB16B16 = true;
 }
+
+if (Feature == "+fp8")
+  HasFP8 = true;
+if (Feature == "+fp8fma")

paulwalker-arm wrote:

`fp8...` feature extensions should also set `HasFP8`?

https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-20 Thread Paul Walker via cfe-commits


@@ -744,3 +744,34 @@
 // CHECK-SMEB16B16: __ARM_FEATURE_SME2 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SME_B16B16 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SVE_B16B16 1
+//
+//  RUN: %clang --target=aarch64 -march=armv9-a+fp8 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8 %s
+// CHECK-FP8: __ARM_FEATURE_FP8 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8fma -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8FMA %s
+// CHECK-FP8FMA: __ARM_FEATURE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot2 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT2 %s
+// CHECK-FP8DOT2: __ARM_FEATURE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot4 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT4 %s
+// CHECK-FP8DOT4: __ARM_FEATURE_FP8DOT4 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot2 -x c -E -dM %s -o 
- | FileCheck --check-prefix=CHECK-SSVE-FP8DOT2 %s
+// CHECK-SSVE-FP8DOT2: __ARM_FEATURE_SSVE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot4 -x c -E -dM %s -o 
- | FileCheck --check-prefix=CHECK-SSVE-FP8DOT4 %s
+// CHECK-SSVE-FP8DOT4: __ARM_FEATURE_SSVE_FP8DOT4 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8fma -x c -E -dM %s -o - 
| FileCheck --check-prefix=CHECK-SSVE-FP8FMA %s
+// CHECK-SSVE-FP8FMA: __ARM_FEATURE_SSVE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+sme-f8f32 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-SMEF8F32 %s
+// CHECK-SMEF8F32: __ARM_FEATURE_LOCALLY_STREAMING 1

paulwalker-arm wrote:

Ok, in which case this is likely an extension of the previous point.  If the 
feature relationships have to be duplicated then it makes sense we verify 
`__ARM_FEATURE_LOCALLY_STREAMING` here.  If they don't and `AArch64Features.td` 
ensures the expected SME feature flags get defined, then we don't need to 
reverify them here.

https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-20 Thread Paul Walker via cfe-commits


@@ -1046,6 +1082,29 @@ bool 
AArch64TargetInfo::handleTargetFeatures(std::vector &Features,
   HasSVEB16B16 = true;
   HasSMEB16B16 = true;
 }
+
+if (Feature == "+fp8")
+  HasFP8 = true;
+if (Feature == "+fp8fma")

paulwalker-arm wrote:

I don't fully understand the effect of setting these bools and how the 
dependencies in `AArch64Features.td` correspond to setting the feature macros.  
What I'm mainly after is consistency and so for the SME2 extensions you're 
setting `HasSME2` as well.  So I guess the question is why that is necessary?  
If it's not, then perhaps the way to go is to remove those rather than adding 
the ones I suggest.

The most important part to verify is that all the feature macros a user would 
expect to be defined by a specific +feat are in fact defined.  If that is 
managed by `AArch64Features.td` then great, if not then that would explain why 
the key feature dependencies are duplicated here.

https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-20 Thread via cfe-commits


@@ -1046,6 +1082,29 @@ bool 
AArch64TargetInfo::handleTargetFeatures(std::vector &Features,
   HasSVEB16B16 = true;
   HasSMEB16B16 = true;
 }
+
+if (Feature == "+fp8")
+  HasFP8 = true;
+if (Feature == "+fp8fma")

CarolineConcatto wrote:

I could. 
I am not sure I should reproduce the same we have in  
lib/Target/AArch64/AArch64Features.td also here. 
Is that what you  are suggestion here?
At first glance it does not look like this is a representation of what we have 
in 
 lib/Target/AArch64/AArch64Features.td

https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-20 Thread via cfe-commits


@@ -744,3 +744,34 @@
 // CHECK-SMEB16B16: __ARM_FEATURE_SME2 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SME_B16B16 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SVE_B16B16 1
+//
+//  RUN: %clang --target=aarch64 -march=armv9-a+fp8 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8 %s
+// CHECK-FP8: __ARM_FEATURE_FP8 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8fma -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8FMA %s
+// CHECK-FP8FMA: __ARM_FEATURE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot2 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT2 %s
+// CHECK-FP8DOT2: __ARM_FEATURE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot4 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT4 %s
+// CHECK-FP8DOT4: __ARM_FEATURE_FP8DOT4 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot2 -x c -E -dM %s -o 
- | FileCheck --check-prefix=CHECK-SSVE-FP8DOT2 %s
+// CHECK-SSVE-FP8DOT2: __ARM_FEATURE_SSVE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot4 -x c -E -dM %s -o 
- | FileCheck --check-prefix=CHECK-SSVE-FP8DOT4 %s
+// CHECK-SSVE-FP8DOT4: __ARM_FEATURE_SSVE_FP8DOT4 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8fma -x c -E -dM %s -o - 
| FileCheck --check-prefix=CHECK-SSVE-FP8FMA %s
+// CHECK-SSVE-FP8FMA: __ARM_FEATURE_SSVE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+sme-f8f32 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-SMEF8F32 %s
+// CHECK-SMEF8F32: __ARM_FEATURE_LOCALLY_STREAMING 1

CarolineConcatto wrote:

Do you mean for the sme-f8f32 and sme-f8f16? If so I was just reproducing what 
was done for sme-b16b16 and sme-f16f16.

https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-20 Thread Paul Walker via cfe-commits


@@ -744,3 +744,34 @@
 // CHECK-SMEB16B16: __ARM_FEATURE_SME2 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SME_B16B16 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SVE_B16B16 1
+//
+//  RUN: %clang --target=aarch64 -march=armv9-a+fp8 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8 %s
+// CHECK-FP8: __ARM_FEATURE_FP8 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8fma -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8FMA %s
+// CHECK-FP8FMA: __ARM_FEATURE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot2 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT2 %s
+// CHECK-FP8DOT2: __ARM_FEATURE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot4 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT4 %s
+// CHECK-FP8DOT4: __ARM_FEATURE_FP8DOT4 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot2 -x c -E -dM %s -o 
- | FileCheck --check-prefix=CHECK-SSVE-FP8DOT2 %s
+// CHECK-SSVE-FP8DOT2: __ARM_FEATURE_SSVE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot4 -x c -E -dM %s -o 
- | FileCheck --check-prefix=CHECK-SSVE-FP8DOT4 %s
+// CHECK-SSVE-FP8DOT4: __ARM_FEATURE_SSVE_FP8DOT4 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8fma -x c -E -dM %s -o - 
| FileCheck --check-prefix=CHECK-SSVE-FP8FMA %s
+// CHECK-SSVE-FP8FMA: __ARM_FEATURE_SSVE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+sme-f8f32 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-SMEF8F32 %s
+// CHECK-SMEF8F32: __ARM_FEATURE_LOCALLY_STREAMING 1

paulwalker-arm wrote:

Are the two `__ARM_FEATURE_LOCALLY_STREAMING` checks relevant for the tests?

https://github.com/llvm/llvm-project/pull/140591
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-19 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-backend-aarch64

Author: None (CarolineConcatto)


Changes

This patch implements the macros described in the ACLE[1]

[1] 
https://github.com/ARM-software/acle/blob/main/main/acle.md#modal-8-bit-floating-point-extensions

---
Full diff: https://github.com/llvm/llvm-project/pull/140591.diff


3 Files Affected:

- (modified) clang/lib/Basic/Targets/AArch64.cpp (+59) 
- (modified) clang/lib/Basic/Targets/AArch64.h (+9) 
- (modified) clang/test/Preprocessor/aarch64-target-features.c (+31) 


``diff
diff --git a/clang/lib/Basic/Targets/AArch64.cpp 
b/clang/lib/Basic/Targets/AArch64.cpp
index e1f6c7b834dc7..7267b17704a41 100644
--- a/clang/lib/Basic/Targets/AArch64.cpp
+++ b/clang/lib/Basic/Targets/AArch64.cpp
@@ -596,6 +596,33 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions 
&Opts,
   if (HasSMEB16B16)
 Builder.defineMacro("__ARM_FEATURE_SME_B16B16", "1");
 
+  if (HasFP8)
+Builder.defineMacro("__ARM_FEATURE_FP8", "1");
+
+  if (HasFP8FMA)
+Builder.defineMacro("__ARM_FEATURE_FP8FMA", "1");
+
+  if (HasFP8DOT2)
+Builder.defineMacro("__ARM_FEATURE_FP8DOT2", "1");
+
+  if (HasFP8DOT4)
+Builder.defineMacro("__ARM_FEATURE_FP8DOT4", "1");
+
+  if (HasSSVE_FP8DOT2)
+Builder.defineMacro("__ARM_FEATURE_SSVE_FP8DOT2", "1");
+
+  if (HasSSVE_FP8DOT4)
+Builder.defineMacro("__ARM_FEATURE_SSVE_FP8DOT4", "1");
+
+  if (HasSSVE_FP8FMA)
+Builder.defineMacro("__ARM_FEATURE_SSVE_FP8FMA", "1");
+
+  if (HasSME_F8F32)
+Builder.defineMacro("__ARM_FEATURE_SME_F8F32", "1");
+
+  if (HasSME_F8F16)
+Builder.defineMacro("__ARM_FEATURE_SME_F8F16", "1");
+
   if (HasCRC)
 Builder.defineMacro("__ARM_FEATURE_CRC32", "1");
 
@@ -885,6 +912,15 @@ bool AArch64TargetInfo::hasFeature(StringRef Feature) 
const {
   .Cases("ls64", "ls64_v", "ls64_accdata", HasLS64)
   .Case("wfxt", HasWFxT)
   .Case("rcpc3", HasRCPC3)
+  .Case("fp8", HasFP8)
+  .Case("fp8fma", HasFP8FMA)
+  .Case("fp8dot2", HasFP8DOT2)
+  .Case("fp8dot4", HasFP8DOT4)
+  .Case("ssve-fp8dot2", HasSSVE_FP8DOT2)
+  .Case("ssve-fp8dot4", HasSSVE_FP8DOT4)
+  .Case("ssve-fp8fma", HasSSVE_FP8FMA)
+  .Case("sme-f8f32", HasSME_F8F32)
+  .Case("sme-f8f16", HasSME_F8F16)
   .Default(false);
 }
 
@@ -1046,6 +1082,29 @@ bool 
AArch64TargetInfo::handleTargetFeatures(std::vector &Features,
   HasSVEB16B16 = true;
   HasSMEB16B16 = true;
 }
+
+if (Feature == "+fp8")
+  HasFP8 = true;
+if (Feature == "+fp8fma")
+  HasFP8FMA = true;
+if (Feature == "+fp8dot2")
+  HasFP8DOT2 = true;
+if (Feature == "+fp8dot4")
+  HasFP8DOT4 = true;
+if (Feature == "+ssve-fp8dot2")
+  HasSSVE_FP8DOT2 = true;
+if (Feature == "+ssve-fp8dot4")
+  HasSSVE_FP8DOT4 = true;
+if (Feature == "+ssve-fp8fma")
+  HasSSVE_FP8FMA = true;
+if (Feature == "+sme-f8f32") {
+  HasSME2 = true;
+  HasSME_F8F32 = true;
+}
+if (Feature == "+sme-f8f16") {
+  HasSME2 = true;
+  HasSME_F8F16 = true;
+}
 if (Feature == "+sb")
   HasSB = true;
 if (Feature == "+predres")
diff --git a/clang/lib/Basic/Targets/AArch64.h 
b/clang/lib/Basic/Targets/AArch64.h
index 6eeac69af20df..7230f22d5bb86 100644
--- a/clang/lib/Basic/Targets/AArch64.h
+++ b/clang/lib/Basic/Targets/AArch64.h
@@ -106,6 +106,15 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public 
TargetInfo {
   bool HasSMEF16F16 = false;
   bool HasSMEB16B16 = false;
   bool HasSME2p1 = false;
+  bool HasFP8 = false;
+  bool HasFP8FMA = false;
+  bool HasFP8DOT2 = false;
+  bool HasFP8DOT4 = false;
+  bool HasSSVE_FP8DOT2 = false;
+  bool HasSSVE_FP8DOT4 = false;
+  bool HasSSVE_FP8FMA = false;
+  bool HasSME_F8F32 = false;
+  bool HasSME_F8F16 = false;
   bool HasSB = false;
   bool HasPredRes = false;
   bool HasSSBS = false;
diff --git a/clang/test/Preprocessor/aarch64-target-features.c 
b/clang/test/Preprocessor/aarch64-target-features.c
index 3f801c4344940..52045d216262f 100644
--- a/clang/test/Preprocessor/aarch64-target-features.c
+++ b/clang/test/Preprocessor/aarch64-target-features.c
@@ -744,3 +744,34 @@
 // CHECK-SMEB16B16: __ARM_FEATURE_SME2 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SME_B16B16 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SVE_B16B16 1
+//
+//  RUN: %clang --target=aarch64 -march=armv9-a+fp8 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8 %s
+// CHECK-FP8: __ARM_FEATURE_FP8 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8fma -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8FMA %s
+// CHECK-FP8FMA: __ARM_FEATURE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot2 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT2 %s
+// CHECK-FP8DOT2: __ARM_FEATURE_FP8DOT2 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot4 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8DOT4 %s
+// CHECK-FP8DOT4: __ARM_FEATURE_FP8DOT4 1
+
+// RUN: %clang --target=aarch64 -march=

[clang] [Clang][AArch64]Add FP8 ACLE macros implementation (PR #140591)

2025-05-19 Thread via cfe-commits

https://github.com/CarolineConcatto created 
https://github.com/llvm/llvm-project/pull/140591

This patch implements the macros described in the ACLE[1]

[1] 
https://github.com/ARM-software/acle/blob/main/main/acle.md#modal-8-bit-floating-point-extensions

>From 22e44648ce4ec1c747406f7d98ae7c736d0e441c Mon Sep 17 00:00:00 2001
From: CarolineConcatto 
Date: Mon, 19 May 2025 18:21:28 +
Subject: [PATCH] [Clang][AArch64]Add FP8 ACLE macros implementation

This patch implements the macros described in the ACLE[1]

[1] 
https://github.com/ARM-software/acle/blob/main/main/acle.md#modal-8-bit-floating-point-extensions
---
 clang/lib/Basic/Targets/AArch64.cpp   | 59 +++
 clang/lib/Basic/Targets/AArch64.h |  9 +++
 .../Preprocessor/aarch64-target-features.c| 31 ++
 3 files changed, 99 insertions(+)

diff --git a/clang/lib/Basic/Targets/AArch64.cpp 
b/clang/lib/Basic/Targets/AArch64.cpp
index e1f6c7b834dc7..7267b17704a41 100644
--- a/clang/lib/Basic/Targets/AArch64.cpp
+++ b/clang/lib/Basic/Targets/AArch64.cpp
@@ -596,6 +596,33 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions 
&Opts,
   if (HasSMEB16B16)
 Builder.defineMacro("__ARM_FEATURE_SME_B16B16", "1");
 
+  if (HasFP8)
+Builder.defineMacro("__ARM_FEATURE_FP8", "1");
+
+  if (HasFP8FMA)
+Builder.defineMacro("__ARM_FEATURE_FP8FMA", "1");
+
+  if (HasFP8DOT2)
+Builder.defineMacro("__ARM_FEATURE_FP8DOT2", "1");
+
+  if (HasFP8DOT4)
+Builder.defineMacro("__ARM_FEATURE_FP8DOT4", "1");
+
+  if (HasSSVE_FP8DOT2)
+Builder.defineMacro("__ARM_FEATURE_SSVE_FP8DOT2", "1");
+
+  if (HasSSVE_FP8DOT4)
+Builder.defineMacro("__ARM_FEATURE_SSVE_FP8DOT4", "1");
+
+  if (HasSSVE_FP8FMA)
+Builder.defineMacro("__ARM_FEATURE_SSVE_FP8FMA", "1");
+
+  if (HasSME_F8F32)
+Builder.defineMacro("__ARM_FEATURE_SME_F8F32", "1");
+
+  if (HasSME_F8F16)
+Builder.defineMacro("__ARM_FEATURE_SME_F8F16", "1");
+
   if (HasCRC)
 Builder.defineMacro("__ARM_FEATURE_CRC32", "1");
 
@@ -885,6 +912,15 @@ bool AArch64TargetInfo::hasFeature(StringRef Feature) 
const {
   .Cases("ls64", "ls64_v", "ls64_accdata", HasLS64)
   .Case("wfxt", HasWFxT)
   .Case("rcpc3", HasRCPC3)
+  .Case("fp8", HasFP8)
+  .Case("fp8fma", HasFP8FMA)
+  .Case("fp8dot2", HasFP8DOT2)
+  .Case("fp8dot4", HasFP8DOT4)
+  .Case("ssve-fp8dot2", HasSSVE_FP8DOT2)
+  .Case("ssve-fp8dot4", HasSSVE_FP8DOT4)
+  .Case("ssve-fp8fma", HasSSVE_FP8FMA)
+  .Case("sme-f8f32", HasSME_F8F32)
+  .Case("sme-f8f16", HasSME_F8F16)
   .Default(false);
 }
 
@@ -1046,6 +1082,29 @@ bool 
AArch64TargetInfo::handleTargetFeatures(std::vector &Features,
   HasSVEB16B16 = true;
   HasSMEB16B16 = true;
 }
+
+if (Feature == "+fp8")
+  HasFP8 = true;
+if (Feature == "+fp8fma")
+  HasFP8FMA = true;
+if (Feature == "+fp8dot2")
+  HasFP8DOT2 = true;
+if (Feature == "+fp8dot4")
+  HasFP8DOT4 = true;
+if (Feature == "+ssve-fp8dot2")
+  HasSSVE_FP8DOT2 = true;
+if (Feature == "+ssve-fp8dot4")
+  HasSSVE_FP8DOT4 = true;
+if (Feature == "+ssve-fp8fma")
+  HasSSVE_FP8FMA = true;
+if (Feature == "+sme-f8f32") {
+  HasSME2 = true;
+  HasSME_F8F32 = true;
+}
+if (Feature == "+sme-f8f16") {
+  HasSME2 = true;
+  HasSME_F8F16 = true;
+}
 if (Feature == "+sb")
   HasSB = true;
 if (Feature == "+predres")
diff --git a/clang/lib/Basic/Targets/AArch64.h 
b/clang/lib/Basic/Targets/AArch64.h
index 6eeac69af20df..7230f22d5bb86 100644
--- a/clang/lib/Basic/Targets/AArch64.h
+++ b/clang/lib/Basic/Targets/AArch64.h
@@ -106,6 +106,15 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public 
TargetInfo {
   bool HasSMEF16F16 = false;
   bool HasSMEB16B16 = false;
   bool HasSME2p1 = false;
+  bool HasFP8 = false;
+  bool HasFP8FMA = false;
+  bool HasFP8DOT2 = false;
+  bool HasFP8DOT4 = false;
+  bool HasSSVE_FP8DOT2 = false;
+  bool HasSSVE_FP8DOT4 = false;
+  bool HasSSVE_FP8FMA = false;
+  bool HasSME_F8F32 = false;
+  bool HasSME_F8F16 = false;
   bool HasSB = false;
   bool HasPredRes = false;
   bool HasSSBS = false;
diff --git a/clang/test/Preprocessor/aarch64-target-features.c 
b/clang/test/Preprocessor/aarch64-target-features.c
index 3f801c4344940..52045d216262f 100644
--- a/clang/test/Preprocessor/aarch64-target-features.c
+++ b/clang/test/Preprocessor/aarch64-target-features.c
@@ -744,3 +744,34 @@
 // CHECK-SMEB16B16: __ARM_FEATURE_SME2 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SME_B16B16 1
 // CHECK-SMEB16B16: __ARM_FEATURE_SVE_B16B16 1
+//
+//  RUN: %clang --target=aarch64 -march=armv9-a+fp8 -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8 %s
+// CHECK-FP8: __ARM_FEATURE_FP8 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8fma -x c -E -dM %s -o - | 
FileCheck --check-prefix=CHECK-FP8FMA %s
+// CHECK-FP8FMA: __ARM_FEATURE_FP8FMA 1
+
+// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot2 -x c -E -dM