sure On 09/03/25 13:56 +0000, k...@intricatesoftware.com wrote: > Back port support for explicitly selectecting a variant of the > SPARC architecture and for setting the default to vis/-Av9a. > Needed for building base and xenocara on sparc64. > https://github.com/llvm/llvm-project/pull/125151 > https://github.com/llvm/llvm-project/pull/130108 > > okay? > > Index: Makefile > =================================================================== > RCS file: /cvs/ports/devel/llvm/19/Makefile,v > diff -u -p -u -r1.10 Makefile > --- Makefile 2 Feb 2025 16:38:25 -0000 1.10 > +++ Makefile 8 Mar 2025 23:12:51 -0000 > @@ -2,7 +2,7 @@ LLVM_MAJOR = 19 > LLVM_VERSION = ${LLVM_MAJOR}.1.7 > LLVM_PKGSPEC = >=19,<20 > > -REVISION-main = 2 > +REVISION-main = 3 > > SHARED_LIBS += LLVM 0.0 \ > LTO 0.0 \ > Index: patches/patch-clang_lib_Driver_ToolChains_Clang_cpp > =================================================================== > RCS file: > /cvs/ports/devel/llvm/19/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp,v > diff -u -p -u -r1.1.1.1 patch-clang_lib_Driver_ToolChains_Clang_cpp > --- patches/patch-clang_lib_Driver_ToolChains_Clang_cpp 15 Nov 2024 > 11:18:28 -0000 1.1.1.1 > +++ patches/patch-clang_lib_Driver_ToolChains_Clang_cpp 8 Mar 2025 > 23:12:51 -0000 > @@ -37,7 +37,15 @@ Index: clang/lib/Driver/ToolChains/Clang > BranchProtectionPAuthLR = false; > GuardedControlStack = false; > } else { > -@@ -2664,6 +2673,11 @@ static void CollectArgsForIntegratedAssembler(Compilat > +@@ -2574,6 +2583,7 @@ static void CollectArgsForIntegratedAssembler(Compilat > + bool UseRelaxRelocations = C.getDefaultToolChain().useRelaxRelocations(); > + bool UseNoExecStack = false; > + const char *MipsTargetFeature = nullptr; > ++ llvm::SmallVector<const char *> SparcTargetFeatures; > + StringRef ImplicitIt; > + for (const Arg *A : > + Args.filtered(options::OPT_Wa_COMMA, options::OPT_Xassembler, > +@@ -2664,6 +2674,11 @@ static void CollectArgsForIntegratedAssembler(Compilat > CmdArgs.push_back("-soft-float"); > continue; > } > @@ -49,7 +57,62 @@ Index: clang/lib/Driver/ToolChains/Clang > > MipsTargetFeature = llvm::StringSwitch<const char *>(Value) > .Case("-mips1", "+mips1") > -@@ -5799,8 +5813,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi > +@@ -2684,6 +2699,32 @@ static void CollectArgsForIntegratedAssembler(Compilat > + .Default(nullptr); > + if (MipsTargetFeature) > + continue; > ++ break; > ++ > ++ case llvm::Triple::sparc: > ++ case llvm::Triple::sparcel: > ++ case llvm::Triple::sparcv9: > ++ if (Value == "--undeclared-regs") { > ++ // LLVM already allows undeclared use of G registers, so this > option > ++ // becomes a no-op. This solely exists for GNU compatibility. > ++ // TODO implement --no-undeclared-regs > ++ continue; > ++ } > ++ SparcTargetFeatures = > ++ llvm::StringSwitch<llvm::SmallVector<const char *>>(Value) > ++ .Case("-Av8", {"-v8plus"}) > ++ .Case("-Av8plus", {"+v8plus", "+v9"}) > ++ .Case("-Av8plusa", {"+v8plus", "+v9", "+vis"}) > ++ .Case("-Av8plusb", {"+v8plus", "+v9", "+vis", "+vis2"}) > ++ .Case("-Av8plusd", {"+v8plus", "+v9", "+vis", "+vis2", > "+vis3"}) > ++ .Case("-Av9", {"+v9"}) > ++ .Case("-Av9a", {"+v9", "+vis"}) > ++ .Case("-Av9b", {"+v9", "+vis", "+vis2"}) > ++ .Case("-Av9d", {"+v9", "+vis", "+vis2", "+vis3"}) > ++ .Default({}); > ++ if (!SparcTargetFeatures.empty()) > ++ continue; > ++ break; > + } > + > + if (Value == "-force_cpusubtype_ALL") { > +@@ -2791,6 +2832,21 @@ static void CollectArgsForIntegratedAssembler(Compilat > + CmdArgs.push_back(MipsTargetFeature); > + } > + > ++ // Those OSes default to enabling VIS on 64-bit SPARC. > ++ // See also the corresponding code for external assemblers in > ++ // sparc::getSparcAsmModeForCPU(). > ++ bool IsSparcV9ATarget = > ++ (C.getDefaultToolChain().getArch() == llvm::Triple::sparcv9) && > ++ (Triple.isOSLinux() || Triple.isOSFreeBSD() || Triple.isOSOpenBSD()); > ++ if (IsSparcV9ATarget && SparcTargetFeatures.empty()) { > ++ CmdArgs.push_back("-target-feature"); > ++ CmdArgs.push_back("+vis"); > ++ } > ++ for (const char *Feature : SparcTargetFeatures) { > ++ CmdArgs.push_back("-target-feature"); > ++ CmdArgs.push_back(Feature); > ++ } > ++ > + // forward -fembed-bitcode to assmebler > + if (C.getDriver().embedBitcodeEnabled() || > + C.getDriver().embedBitcodeMarkerOnly()) > +@@ -5799,8 +5855,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi > OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing; > // We turn strict aliasing off by default if we're Windows MSVC since MSVC > // doesn't do any TBAA. > @@ -63,7 +126,7 @@ Index: clang/lib/Driver/ToolChains/Clang > CmdArgs.push_back("-relaxed-aliasing"); > if (Args.hasFlag(options::OPT_fpointer_tbaa, > options::OPT_fno_pointer_tbaa, > false)) > -@@ -6844,7 +6862,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi > +@@ -6844,7 +6904,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi > options::OPT_fno_strict_overflow)) { > if (A->getOption().matches(options::OPT_fno_strict_overflow)) > CmdArgs.push_back("-fwrapv"); > @@ -73,7 +136,7 @@ Index: clang/lib/Driver/ToolChains/Clang > > Args.AddLastArg(CmdArgs, options::OPT_ffinite_loops, > options::OPT_fno_finite_loops); > -@@ -6860,7 +6879,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi > +@@ -6860,7 +6921,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi > Args.addOptInFlag(CmdArgs, options::OPT_mspeculative_load_hardening, > options::OPT_mno_speculative_load_hardening); > > @@ -133,7 +196,7 @@ Index: clang/lib/Driver/ToolChains/Clang > RenderSCPOptions(TC, Args, CmdArgs); > RenderTrivialAutoVarInitOptions(D, TC, Args, CmdArgs); > > -@@ -6938,6 +7008,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi > +@@ -6938,6 +7050,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi > if (Arg *A = Args.getLastArg(options::OPT_fcf_protection_EQ)) { > CmdArgs.push_back( > Args.MakeArgString(Twine("-fcf-protection=") + A->getValue())); > @@ -145,7 +208,7 @@ Index: clang/lib/Driver/ToolChains/Clang > } > > if (Arg *A = Args.getLastArg(options::OPT_mfunction_return_EQ)) > -@@ -7466,6 +7541,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi > +@@ -7466,6 +7583,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi > options::OPT_fno_rewrite_imports, > false); > if (RewriteImports) > CmdArgs.push_back("-frewrite-imports"); > Index: patches/patch-clang_test_Driver_sparc-ias-Wa_s > =================================================================== > RCS file: patches/patch-clang_test_Driver_sparc-ias-Wa_s > diff -N patches/patch-clang_test_Driver_sparc-ias-Wa_s > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-clang_test_Driver_sparc-ias-Wa_s 8 Mar 2025 23:12:51 > -0000 > @@ -0,0 +1,73 @@ > +Index: clang/test/Driver/sparc-ias-Wa.s > +--- clang/test/Driver/sparc-ias-Wa.s.orig > ++++ clang/test/Driver/sparc-ias-Wa.s > +@@ -0,0 +1,69 @@ > ++// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av8 > 2>&1 | \ > ++// RUN: FileCheck -check-prefix=V8 %s > ++// V8: -cc1as > ++// V8: "-target-feature" "-v8plus" > ++ > ++// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s > -Wa,-Av8plus 2>&1 | \ > ++// RUN: FileCheck -check-prefix=V8PLUS %s > ++// V8PLUS: -cc1as > ++// V8PLUS: "-target-feature" "+v8plus" > ++// V8PLUS: "-target-feature" "+v9" > ++ > ++// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s > -Wa,-Av8plusa 2>&1 | \ > ++// RUN: FileCheck -check-prefix=V8PLUSA %s > ++// V8PLUSA: -cc1as > ++// V8PLUSA: "-target-feature" "+v8plus" > ++// V8PLUSA: "-target-feature" "+v9" > ++// V8PLUSA: "-target-feature" "+vis" > ++ > ++// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s > -Wa,-Av8plusb 2>&1 | \ > ++// RUN: FileCheck -check-prefix=V8PLUSB %s > ++// V8PLUSB: -cc1as > ++// V8PLUSB: "-target-feature" "+v8plus" > ++// V8PLUSB: "-target-feature" "+v9" > ++// V8PLUSB: "-target-feature" "+vis" > ++// V8PLUSB: "-target-feature" "+vis2" > ++ > ++// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s > -Wa,-Av8plusd 2>&1 | \ > ++// RUN: FileCheck -check-prefix=V8PLUSD %s > ++// V8PLUSD: -cc1as > ++// V8PLUSD: "-target-feature" "+v8plus" > ++// V8PLUSD: "-target-feature" "+v9" > ++// V8PLUSD: "-target-feature" "+vis" > ++// V8PLUSD: "-target-feature" "+vis2" > ++// V8PLUSD: "-target-feature" "+vis3" > ++ > ++// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s -Wa,-Av9 > 2>&1 | \ > ++// RUN: FileCheck -check-prefix=V9 %s > ++// V9: -cc1as > ++// V9: "-target-feature" "+v9" > ++ > ++// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s > -Wa,-Av9a 2>&1 | \ > ++// RUN: FileCheck -check-prefix=V9A %s > ++// V9A: -cc1as > ++// V9A: "-target-feature" "+v9" > ++// V9A: "-target-feature" "+vis" > ++ > ++// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s > -Wa,-Av9b 2>&1 | \ > ++// RUN: FileCheck -check-prefix=V9B %s > ++// V9B: -cc1as > ++// V9B: "-target-feature" "+v9" > ++// V9B: "-target-feature" "+vis" > ++// V9B: "-target-feature" "+vis2" > ++ > ++// RUN: %clang --target=sparc-linux-gnu -### -fintegrated-as -c %s > -Wa,-Av9d 2>&1 | \ > ++// RUN: FileCheck -check-prefix=V9D %s > ++// V9D: -cc1as > ++// V9D: "-target-feature" "+v9" > ++// V9D: "-target-feature" "+vis" > ++// V9D: "-target-feature" "+vis2" > ++// V9D: "-target-feature" "+vis3" > ++ > ++// RUN: %clang --target=sparc64-linux-gnu -### -fintegrated-as -c %s 2>&1 | > \ > ++// RUN: FileCheck -check-prefix=VIS-DEFAULT %s > ++// RUN: %clang --target=sparc64-freebsd -### -fintegrated-as -c %s 2>&1 | \ > ++// RUN: FileCheck -check-prefix=VIS-DEFAULT %s > ++// RUN: %clang --target=sparc64-openbsd -### -fintegrated-as -c %s 2>&1 | \ > ++// RUN: FileCheck -check-prefix=VIS-DEFAULT %s > ++// VIS-DEFAULT: -cc1as > ++// VIS-DEFAULT: "-target-feature" "+vis"
-- Regards, Robert Nagy