From: Amara Emerson Date: Thu, 23 Jan 2014 15:48:30 +0000 (+0000) Subject: [AArch64] Add -mgeneral_regs_only option. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fecf5dcc4e380b0a006d65baf108a6f8a8b3aa1b;p=clang [AArch64] Add -mgeneral_regs_only option. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199904 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/docs/UsersManual.rst b/docs/UsersManual.rst index d832f99bae..15ae86a564 100644 --- a/docs/UsersManual.rst +++ b/docs/UsersManual.rst @@ -1061,6 +1061,13 @@ are listed below. CRC instructions are enabled by default on ARMv8. +.. option:: -mgeneral_regs_only + + Generate code which only uses the general purpose registers. + + This option restricts the generated code to use general registers + only. This only applies to the AArch64 architecture. + Controlling Size of Debug Information ------------------------------------- diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 85b69bb7a8..b40a9f7d39 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -72,6 +72,7 @@ def m_Group : OptionGroup<"">, Group; def m_x86_Features_Group : OptionGroup<"">, Group; def m_hexagon_Features_Group : OptionGroup<"">, Group; def m_arm_Features_Group : OptionGroup<"">, Group; +def m_aarch64_Features_Group : OptionGroup<"">, Group; def m_ppc_Features_Group : OptionGroup<"">, Group; def u_Group : OptionGroup<"">; @@ -1053,6 +1054,9 @@ def mcrc : Flag<["-"], "mcrc">, Group, def mnocrc : Flag<["-"], "mnocrc">, Group, HelpText<"Disallow use of CRC instructions (ARM only)">; +def mgeneral_regs_only : Flag<["-"], "mgeneral_regs_only">, Group, + HelpText<"Generate code which only uses the general purpose registers (AArch64 only)">; + def mvsx : Flag<["-"], "mvsx">, Group; def mno_vsx : Flag<["-"], "mno-vsx">, Group; def mfprnd : Flag<["-"], "mfprnd">, Group; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index a3a385d1cf..3e9ebf8aef 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -515,10 +515,6 @@ static void getAArch64FPUFeatures(const Driver &D, const Arg *A, Features.push_back("+crypto"); } else if (FPU == "neon") { Features.push_back("+neon"); - } else if (FPU == "none") { - Features.push_back("-fp-armv8"); - Features.push_back("-crypto"); - Features.push_back("-neon"); } else D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args); } @@ -1438,6 +1434,12 @@ static void getAArch64TargetFeatures(const Driver &D, const ArgList &Args, // Honor -mfpu=. if (const Arg *A = Args.getLastArg(options::OPT_mfpu_EQ)) getAArch64FPUFeatures(D, A, Args, Features); + + if (Args.getLastArg(options::OPT_mgeneral_regs_only)) { + Features.push_back("-fp-armv8"); + Features.push_back("-crypto"); + Features.push_back("-neon"); + } } static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple, diff --git a/test/Driver/aarch64-mfpu.c b/test/Driver/aarch64-mfpu.c index 234401bcb2..b62a2e797c 100644 --- a/test/Driver/aarch64-mfpu.c +++ b/test/Driver/aarch64-mfpu.c @@ -19,8 +19,3 @@ // CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+neon" // CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+crypto" -// RUN: %clang -target aarch64-linux-eabi -mfpu=none %s -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-NO-FP %s -// CHECK-NO-FP: "-target-feature" "-fp-armv8" -// CHECK-NO-FP: "-target-feature" "-crypto" -// CHECK-NO-FP: "-target-feature" "-neon" diff --git a/test/Driver/aarch64-mgeneral_regs_only.c b/test/Driver/aarch64-mgeneral_regs_only.c new file mode 100644 index 0000000000..026f98c331 --- /dev/null +++ b/test/Driver/aarch64-mgeneral_regs_only.c @@ -0,0 +1,7 @@ +// Test the -mgeneral_regs_only option + +// RUN: %clang -target aarch64-linux-eabi -mgeneral_regs_only %s -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-NO-FP %s +// CHECK-NO-FP: "-target-feature" "-fp-armv8" +// CHECK-NO-FP: "-target-feature" "-crypto" +// CHECK-NO-FP: "-target-feature" "-neon"