Author: Daniel Cederman Date: 2024-08-22T10:57:55+02:00 New Revision: 1e44e7afd799f582171a79355ce353fde134e806
URL: https://github.com/llvm/llvm-project/commit/1e44e7afd799f582171a79355ce353fde134e806 DIFF: https://github.com/llvm/llvm-project/commit/1e44e7afd799f582171a79355ce353fde134e806.diff LOG: [Sparc] Add flags to enable errata workaround pass for GR712RC and UT700 (#104742) This adds the flags -mfix-gr712rc and -mfix-ut700 which enables the necessary errata workarounds for the GR712RC and UT700 processors. The functionality enabled by the flags is the same as the functionality provided by the corresponding GCC flags. Added: clang/test/Driver/sparc-fix.c Modified: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Arch/Sparc.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index c204062b4f7353..5d8791727d2109 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -6155,6 +6155,10 @@ def mv8plus : Flag<["-"], "mv8plus">, Group<m_sparc_Features_Group>, HelpText<"Enable V8+ mode, allowing use of 64-bit V9 instructions in 32-bit code">; def mno_v8plus : Flag<["-"], "mno-v8plus">, Group<m_sparc_Features_Group>, HelpText<"Disable V8+ mode">; +def mfix_gr712rc : Flag<["-"], "mfix-gr712rc">, Group<m_sparc_Features_Group>, + HelpText<"Enable workarounds for GR712RC errata">; +def mfix_ut700 : Flag<["-"], "mfix-ut700">, Group<m_sparc_Features_Group>, + HelpText<"Enable workarounds for UT700 errata">; foreach i = 1 ... 7 in def ffixed_g#i : Flag<["-"], "ffixed-g"#i>, Group<m_sparc_Features_Group>, HelpText<"Reserve the G"#i#" register (SPARC only)">; diff --git a/clang/lib/Driver/ToolChains/Arch/Sparc.cpp b/clang/lib/Driver/ToolChains/Arch/Sparc.cpp index 5a1fedbec06adf..f7f0a265fef68b 100644 --- a/clang/lib/Driver/ToolChains/Arch/Sparc.cpp +++ b/clang/lib/Driver/ToolChains/Arch/Sparc.cpp @@ -264,4 +264,17 @@ void sparc::getSparcTargetFeatures(const Driver &D, const ArgList &Args, if (Args.hasArg(options::OPT_ffixed_i5)) Features.push_back("+reserve-i5"); + + if (Args.hasArg(options::OPT_mfix_gr712rc)) { + Features.push_back("+fix-tn0009"); + Features.push_back("+fix-tn0011"); + Features.push_back("+fix-tn0012"); + Features.push_back("+fix-tn0013"); + } + + if (Args.hasArg(options::OPT_mfix_ut700)) { + Features.push_back("+fix-tn0009"); + Features.push_back("+fix-tn0010"); + Features.push_back("+fix-tn0013"); + } } diff --git a/clang/test/Driver/sparc-fix.c b/clang/test/Driver/sparc-fix.c new file mode 100644 index 00000000000000..1f034399ce2245 --- /dev/null +++ b/clang/test/Driver/sparc-fix.c @@ -0,0 +1,5 @@ +// RUN: %clang --target=sparc -mfix-gr712rc -### %s 2>&1 | FileCheck --check-prefix=GR712RC %s +// GR712RC: "-target-feature" "+fix-tn0009" "-target-feature" "+fix-tn0011" "-target-feature" "+fix-tn0012" "-target-feature" "+fix-tn0013" + +// RUN: %clang --target=sparc -mfix-ut700 -### %s 2>&1 | FileCheck --check-prefix=UT700 %s +// UT700: "-target-feature" "+fix-tn0009" "-target-feature" "+fix-tn0010" "-target-feature" "+fix-tn0013" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits