diff options
-rw-r--r-- | clang/include/clang/Driver/Options.td | 2 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChains/Hexagon.cpp | 14 | ||||
-rw-r--r-- | clang/test/Driver/hexagon-toolchain-elf.c | 16 |
3 files changed, 24 insertions, 8 deletions
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 04ed098e893..464956f9fd5 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -2496,6 +2496,8 @@ def mno_hexagon_hvx_double : Flag<[ "-" ], "mno-hvx-double">, Group<m_hexagon_Features_HVX_Group>, HelpText<"Disable Hexagon Double Vector eXtensions">; +def ffixed_r19: Flag<["-"], "ffixed-r19">, + HelpText<"Reserve the r19 register (Hexagon only)">; // X86 feature flags diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index 31281737c7a..77193cd0471 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -521,11 +521,15 @@ unsigned HexagonToolChain::getOptimizationLevel( void HexagonToolChain::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const { - if (DriverArgs.hasArg(options::OPT_ffp_contract)) - return; - unsigned OptLevel = getOptimizationLevel(DriverArgs); - if (OptLevel >= 3) - CC1Args.push_back("-ffp-contract=fast"); + if (!DriverArgs.hasArg(options::OPT_ffp_contract)) { + unsigned OptLevel = getOptimizationLevel(DriverArgs); + if (OptLevel >= 3) + CC1Args.push_back("-ffp-contract=fast"); + } + if (DriverArgs.hasArg(options::OPT_ffixed_r19)) { + CC1Args.push_back("-target-feature"); + CC1Args.push_back("+reserved-r19"); + } } void HexagonToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index 7dc82f35199..8f4c320ce45 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -504,12 +504,22 @@ // CHECK060-NEXT: hexagon-link // ----------------------------------------------------------------------------- +// ffixed-r19 +// ----------------------------------------------------------------------------- +// RUN: %clang -### -target hexagon-unknown-elf -ffixed-r19 %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK070 %s +// CHECK070: "-target-feature" "+reserved-r19" +// RUN: %clang -### -target hexagon-unknown-elf %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK071 %s +// CHECK071-NOT: "+reserved-r19" + +// ----------------------------------------------------------------------------- // Misc Defaults // ----------------------------------------------------------------------------- // RUN: %clang -### -target hexagon-unknown-elf \ // RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ // RUN: -mcpu=hexagonv60 \ // RUN: %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK070 %s -// CHECK070: "-cc1" -// CHECK070: "-Wreturn-type" +// RUN: | FileCheck -check-prefix=CHECK080 %s +// CHECK080: "-cc1" +// CHECK080: "-Wreturn-type" |