Skip to content

Commit 7569de5

Browse files
[Clang][AArch64]Add FP8 ACLE macros implementation (#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
1 parent afd53ed commit 7569de5

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,33 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
596596
if (HasSMEB16B16)
597597
Builder.defineMacro("__ARM_FEATURE_SME_B16B16", "1");
598598

599+
if (HasFP8)
600+
Builder.defineMacro("__ARM_FEATURE_FP8", "1");
601+
602+
if (HasFP8FMA)
603+
Builder.defineMacro("__ARM_FEATURE_FP8FMA", "1");
604+
605+
if (HasFP8DOT2)
606+
Builder.defineMacro("__ARM_FEATURE_FP8DOT2", "1");
607+
608+
if (HasFP8DOT4)
609+
Builder.defineMacro("__ARM_FEATURE_FP8DOT4", "1");
610+
611+
if (HasSSVE_FP8DOT2)
612+
Builder.defineMacro("__ARM_FEATURE_SSVE_FP8DOT2", "1");
613+
614+
if (HasSSVE_FP8DOT4)
615+
Builder.defineMacro("__ARM_FEATURE_SSVE_FP8DOT4", "1");
616+
617+
if (HasSSVE_FP8FMA)
618+
Builder.defineMacro("__ARM_FEATURE_SSVE_FP8FMA", "1");
619+
620+
if (HasSME_F8F32)
621+
Builder.defineMacro("__ARM_FEATURE_SME_F8F32", "1");
622+
623+
if (HasSME_F8F16)
624+
Builder.defineMacro("__ARM_FEATURE_SME_F8F16", "1");
625+
599626
if (HasCRC)
600627
Builder.defineMacro("__ARM_FEATURE_CRC32", "1");
601628

@@ -885,6 +912,15 @@ bool AArch64TargetInfo::hasFeature(StringRef Feature) const {
885912
.Cases("ls64", "ls64_v", "ls64_accdata", HasLS64)
886913
.Case("wfxt", HasWFxT)
887914
.Case("rcpc3", HasRCPC3)
915+
.Case("fp8", HasFP8)
916+
.Case("fp8fma", HasFP8FMA)
917+
.Case("fp8dot2", HasFP8DOT2)
918+
.Case("fp8dot4", HasFP8DOT4)
919+
.Case("ssve-fp8dot2", HasSSVE_FP8DOT2)
920+
.Case("ssve-fp8dot4", HasSSVE_FP8DOT4)
921+
.Case("ssve-fp8fma", HasSSVE_FP8FMA)
922+
.Case("sme-f8f32", HasSME_F8F32)
923+
.Case("sme-f8f16", HasSME_F8F16)
888924
.Default(false);
889925
}
890926

@@ -1046,6 +1082,25 @@ bool AArch64TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
10461082
HasSVEB16B16 = true;
10471083
HasSMEB16B16 = true;
10481084
}
1085+
1086+
if (Feature == "+fp8")
1087+
HasFP8 = true;
1088+
if (Feature == "+fp8fma")
1089+
HasFP8FMA = true;
1090+
if (Feature == "+fp8dot2")
1091+
HasFP8DOT2 = true;
1092+
if (Feature == "+fp8dot4")
1093+
HasFP8DOT4 = true;
1094+
if (Feature == "+ssve-fp8dot2")
1095+
HasSSVE_FP8DOT2 = true;
1096+
if (Feature == "+ssve-fp8dot4")
1097+
HasSSVE_FP8DOT4 = true;
1098+
if (Feature == "+ssve-fp8fma")
1099+
HasSSVE_FP8FMA = true;
1100+
if (Feature == "+sme-f8f32")
1101+
HasSME_F8F32 = true;
1102+
if (Feature == "+sme-f8f16")
1103+
HasSME_F8F16 = true;
10491104
if (Feature == "+sb")
10501105
HasSB = true;
10511106
if (Feature == "+predres")

clang/lib/Basic/Targets/AArch64.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,15 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public TargetInfo {
106106
bool HasSMEF16F16 = false;
107107
bool HasSMEB16B16 = false;
108108
bool HasSME2p1 = false;
109+
bool HasFP8 = false;
110+
bool HasFP8FMA = false;
111+
bool HasFP8DOT2 = false;
112+
bool HasFP8DOT4 = false;
113+
bool HasSSVE_FP8DOT2 = false;
114+
bool HasSSVE_FP8DOT4 = false;
115+
bool HasSSVE_FP8FMA = false;
116+
bool HasSME_F8F32 = false;
117+
bool HasSME_F8F16 = false;
109118
bool HasSB = false;
110119
bool HasPredRes = false;
111120
bool HasSSBS = false;

clang/test/Preprocessor/aarch64-target-features.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -744,3 +744,43 @@
744744
// CHECK-SMEB16B16: __ARM_FEATURE_SME2 1
745745
// CHECK-SMEB16B16: __ARM_FEATURE_SME_B16B16 1
746746
// CHECK-SMEB16B16: __ARM_FEATURE_SVE_B16B16 1
747+
//
748+
// RUN: %clang --target=aarch64 -march=armv9-a+fp8 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-FP8 %s
749+
// CHECK-FP8: __ARM_FEATURE_FP8 1
750+
751+
// RUN: %clang --target=aarch64 -march=armv9-a+fp8fma -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-FP8FMA %s
752+
// CHECK-FP8FMA: __ARM_FEATURE_FP8 1
753+
// CHECK-FP8FMA: __ARM_FEATURE_FP8FMA 1
754+
755+
// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot2 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-FP8DOT2 %s
756+
// CHECK-FP8DOT2: __ARM_FEATURE_FP8 1
757+
// CHECK-FP8DOT2: __ARM_FEATURE_FP8DOT2 1
758+
759+
// RUN: %clang --target=aarch64 -march=armv9-a+fp8dot4 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-FP8DOT4 %s
760+
// CHECK-FP8DOT4: __ARM_FEATURE_FP8 1
761+
// CHECK-FP8DOT4: __ARM_FEATURE_FP8DOT4 1
762+
763+
// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot2 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SSVE-FP8DOT2 %s
764+
// CHECK-SSVE-FP8DOT2: __ARM_FEATURE_FP8 1
765+
// CHECK-SSVE-FP8DOT2: __ARM_FEATURE_SME2 1
766+
// CHECK-SSVE-FP8DOT2: __ARM_FEATURE_SSVE_FP8DOT2 1
767+
768+
// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8dot4 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SSVE-FP8DOT4 %s
769+
// CHECK-SSVE-FP8DOT4: __ARM_FEATURE_FP8 1
770+
// CHECK-SSVE-FP8DOT4: __ARM_FEATURE_SME2 1
771+
// CHECK-SSVE-FP8DOT4: __ARM_FEATURE_SSVE_FP8DOT4 1
772+
773+
// RUN: %clang --target=aarch64 -march=armv9-a+ssve-fp8fma -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SSVE-FP8FMA %s
774+
// CHECK-SSVE-FP8FMA: __ARM_FEATURE_FP8 1
775+
// CHECK-SSVE-FP8FMA: __ARM_FEATURE_SME2 1
776+
// CHECK-SSVE-FP8FMA: __ARM_FEATURE_SSVE_FP8FMA 1
777+
778+
// RUN: %clang --target=aarch64 -march=armv9-a+sme-f8f32 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SMEF8F32 %s
779+
// CHECK-SMEF8F32: __ARM_FEATURE_FP8 1
780+
// CHECK-SMEF8F32: __ARM_FEATURE_SME2 1
781+
// CHECK-SMEF8F32: __ARM_FEATURE_SME_F8F32 1
782+
783+
// RUN: %clang --target=aarch64 -march=armv9-a+sme-f8f16 -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SMEF8F16 %s
784+
// CHECK-SMEF8F16: __ARM_FEATURE_FP8 1
785+
// CHECK-SMEF8F16: __ARM_FEATURE_SME2 1
786+
// CHECK-SMEF8F16: __ARM_FEATURE_SME_F8F16 1

0 commit comments

Comments
 (0)