https://github.com/doac updated https://github.com/llvm/llvm-project/pull/234574
>From f9731001c70f27ac4207fc7a847d0b6f27cb1668 Mon Sep 17 00:00:00 2001 From: Daniel Cederman <[email protected]> Date: Thu, 22 Oct 2026 06:26:10 +0200 Subject: [PATCH 1/2] [Clang][SPARC] Define __sparc_v8__ and __leon__ like GCC Used by glibc for example. --- clang/lib/Basic/Targets/Sparc.cpp | 16 ++++++++++++++++ clang/test/Preprocessor/predefined-arch-macros.c | 9 +++++++++ 2 files changed, 25 insertions(+) diff --git a/clang/lib/Basic/Targets/Sparc.cpp b/clang/lib/Basic/Targets/Sparc.cpp index cd5ef7bbda457a..f0b497d3eb432b 100644 --- a/clang/lib/Basic/Targets/Sparc.cpp +++ b/clang/lib/Basic/Targets/Sparc.cpp @@ -154,12 +154,28 @@ void SparcV8TargetInfo::getTargetDefines(const LangOptions &Opts, case CG_V8: Builder.defineMacro("__sparcv8"); Builder.defineMacro("__sparcv8__"); + Builder.defineMacro("__sparc_v8__"); break; case CG_V9: Builder.defineMacro("__sparc_v9__"); break; } } + switch (CPU) { + case CK_LEON2: + case CK_LEON2_AT697E: + case CK_LEON2_AT697F: + case CK_LEON3: + case CK_LEON3_UT699: + case CK_LEON3_GR712RC: + case CK_LEON4: + case CK_LEON4_GR740: + case CK_LEON5: + Builder.defineMacro("__leon__"); + break; + default: + break; + } if (getCPUGeneration(CPU) == CG_V9) { Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1"); Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2"); diff --git a/clang/test/Preprocessor/predefined-arch-macros.c b/clang/test/Preprocessor/predefined-arch-macros.c index c9295a5f2ab3cc..c7323484500757 100644 --- a/clang/test/Preprocessor/predefined-arch-macros.c +++ b/clang/test/Preprocessor/predefined-arch-macros.c @@ -4809,6 +4809,7 @@ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_SPARC-V9 // CHECK_SPARC-V9-NOT: #define __sparcv8 1 // CHECK_SPARC-V9-NOT: #define __sparcv8__ 1 +// CHECK_SPARC-V9-NOT: #define __sparc_v8__ 1 // CHECK_SPARC-V9: #define __sparc_v9__ 1 // CHECK_SPARC-V9-NOT: #define __sparcv9 1 // CHECK_SPARC-V9-NOT: #define __sparcv9__ 1 @@ -4833,10 +4834,18 @@ // RUN: -target sparcel-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_SPARCEL // CHECK_SPARCEL: #define __LITTLE_ENDIAN__ 1 +// CHECK_SPARCEL-NOT: #define __leon__ 1 // CHECK_SPARCEL: #define __sparc 1 // CHECK_SPARCEL: #define __sparc__ 1 +// CHECK_SPARCEL: #define __sparc_v8__ 1 // CHECK_SPARCEL: #define __sparcv8 1 +// RUN: %clang -mcpu=leon3 -E -dM %s -o - 2>&1 \ +// RUN: -target sparc-unknown-linux \ +// RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_SPARC-LEON +// CHECK_SPARC-LEON: #define __leon__ 1 +// CHECK_SPARC-LEON: #define __sparc_v8__ 1 + // RUN: %clang -E -dM %s -o - 2>&1 \ // RUN: -target sparcv9-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_SPARCV9 >From 80fd33bd4b44680b860572a5d0251752e109cfde Mon Sep 17 00:00:00 2001 From: Daniel Cederman <[email protected]> Date: Mon, 26 Oct 2026 06:54:44 +0100 Subject: [PATCH 2/2] [Clang][SPARC] Use a CPU family field to define __leon__ Mark the LEON CPUs with a family field in SparcCPUInfo instead of listing them in a switch statement. --- clang/lib/Basic/Targets/Sparc.cpp | 69 ++++++++++++++++++++----------- clang/lib/Basic/Targets/Sparc.h | 7 ++++ 2 files changed, 53 insertions(+), 23 deletions(-) diff --git a/clang/lib/Basic/Targets/Sparc.cpp b/clang/lib/Basic/Targets/Sparc.cpp index f0b497d3eb432b..c4f3a64cc2ef7d 100644 --- a/clang/lib/Basic/Targets/Sparc.cpp +++ b/clang/lib/Basic/Targets/Sparc.cpp @@ -67,6 +67,7 @@ struct SparcCPUInfo { llvm::StringLiteral Name; SparcTargetInfo::CPUKind Kind; SparcTargetInfo::CPUGeneration Generation; + SparcTargetInfo::CPUFamily Family = SparcTargetInfo::CF_NONE; }; static constexpr SparcCPUInfo CPUInfo[] = { @@ -98,15 +99,42 @@ static constexpr SparcCPUInfo CPUInfo[] = { {{"ma2480"}, SparcTargetInfo::CK_MYRIAD2480, SparcTargetInfo::CG_V8}, {{"ma2485"}, SparcTargetInfo::CK_MYRIAD2485, SparcTargetInfo::CG_V8}, {{"ma2x8x"}, SparcTargetInfo::CK_MYRIAD2x8x, SparcTargetInfo::CG_V8}, - {{"leon2"}, SparcTargetInfo::CK_LEON2, SparcTargetInfo::CG_V8}, - {{"at697e"}, SparcTargetInfo::CK_LEON2_AT697E, SparcTargetInfo::CG_V8}, - {{"at697f"}, SparcTargetInfo::CK_LEON2_AT697F, SparcTargetInfo::CG_V8}, - {{"leon3"}, SparcTargetInfo::CK_LEON3, SparcTargetInfo::CG_V8}, - {{"ut699"}, SparcTargetInfo::CK_LEON3_UT699, SparcTargetInfo::CG_V8}, - {{"gr712rc"}, SparcTargetInfo::CK_LEON3_GR712RC, SparcTargetInfo::CG_V8}, - {{"leon4"}, SparcTargetInfo::CK_LEON4, SparcTargetInfo::CG_V8}, - {{"gr740"}, SparcTargetInfo::CK_LEON4_GR740, SparcTargetInfo::CG_V8}, - {{"leon5"}, SparcTargetInfo::CK_LEON5, SparcTargetInfo::CG_V8}, + {{"leon2"}, + SparcTargetInfo::CK_LEON2, + SparcTargetInfo::CG_V8, + SparcTargetInfo::CF_LEON}, + {{"at697e"}, + SparcTargetInfo::CK_LEON2_AT697E, + SparcTargetInfo::CG_V8, + SparcTargetInfo::CF_LEON}, + {{"at697f"}, + SparcTargetInfo::CK_LEON2_AT697F, + SparcTargetInfo::CG_V8, + SparcTargetInfo::CF_LEON}, + {{"leon3"}, + SparcTargetInfo::CK_LEON3, + SparcTargetInfo::CG_V8, + SparcTargetInfo::CF_LEON}, + {{"ut699"}, + SparcTargetInfo::CK_LEON3_UT699, + SparcTargetInfo::CG_V8, + SparcTargetInfo::CF_LEON}, + {{"gr712rc"}, + SparcTargetInfo::CK_LEON3_GR712RC, + SparcTargetInfo::CG_V8, + SparcTargetInfo::CF_LEON}, + {{"leon4"}, + SparcTargetInfo::CK_LEON4, + SparcTargetInfo::CG_V8, + SparcTargetInfo::CF_LEON}, + {{"gr740"}, + SparcTargetInfo::CK_LEON4_GR740, + SparcTargetInfo::CG_V8, + SparcTargetInfo::CF_LEON}, + {{"leon5"}, + SparcTargetInfo::CK_LEON5, + SparcTargetInfo::CG_V8, + SparcTargetInfo::CF_LEON}, }; SparcTargetInfo::CPUGeneration @@ -120,6 +148,14 @@ SparcTargetInfo::getCPUGeneration(CPUKind Kind) const { return Item->Generation; } +SparcTargetInfo::CPUFamily SparcTargetInfo::getCPUFamily(CPUKind Kind) const { + const SparcCPUInfo *Item = llvm::find_if( + CPUInfo, [Kind](const SparcCPUInfo &Info) { return Info.Kind == Kind; }); + if (Item == std::end(CPUInfo)) + return CF_NONE; + return Item->Family; +} + SparcTargetInfo::CPUKind SparcTargetInfo::getCPUKind(StringRef Name) const { const SparcCPUInfo *Item = llvm::find_if( CPUInfo, [Name](const SparcCPUInfo &Info) { return Info.Name == Name; }); @@ -161,21 +197,8 @@ void SparcV8TargetInfo::getTargetDefines(const LangOptions &Opts, break; } } - switch (CPU) { - case CK_LEON2: - case CK_LEON2_AT697E: - case CK_LEON2_AT697F: - case CK_LEON3: - case CK_LEON3_UT699: - case CK_LEON3_GR712RC: - case CK_LEON4: - case CK_LEON4_GR740: - case CK_LEON5: + if (getCPUFamily(CPU) == CF_LEON) Builder.defineMacro("__leon__"); - break; - default: - break; - } if (getCPUGeneration(CPU) == CG_V9) { Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1"); Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2"); diff --git a/clang/lib/Basic/Targets/Sparc.h b/clang/lib/Basic/Targets/Sparc.h index 21c10495c82868..2219ccf7c70a37 100644 --- a/clang/lib/Basic/Targets/Sparc.h +++ b/clang/lib/Basic/Targets/Sparc.h @@ -127,8 +127,15 @@ class LLVM_LIBRARY_VISIBILITY SparcTargetInfo : public TargetInfo { CG_V9, }; + enum CPUFamily { + CF_NONE, + CF_LEON, + }; + CPUGeneration getCPUGeneration(CPUKind Kind) const; + CPUFamily getCPUFamily(CPUKind Kind) const; + CPUKind getCPUKind(StringRef Name) const; bool isValidCPUName(StringRef Name) const override { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
