summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmara Emerson <amara.emerson@arm.com>2014-01-23 15:48:30 +0000
committerAmara Emerson <amara.emerson@arm.com>2014-01-23 15:48:30 +0000
commit04e2ecfda2add6a01aef02390c5de9629fbea757 (patch)
treecfb79f748261beedd9e3b85b9289dc3798ea53f7
parent742b90c3edb2c607e55d3b4182b1e1973b7ec33b (diff)
downloadbcm5719-llvm-04e2ecfda2add6a01aef02390c5de9629fbea757.tar.gz
bcm5719-llvm-04e2ecfda2add6a01aef02390c5de9629fbea757.zip
[AArch64] Add -mgeneral_regs_only option.
llvm-svn: 199904
-rw-r--r--clang/docs/UsersManual.rst7
-rw-r--r--clang/include/clang/Driver/Options.td4
-rw-r--r--clang/lib/Driver/Tools.cpp10
-rw-r--r--clang/test/Driver/aarch64-mfpu.c5
-rw-r--r--clang/test/Driver/aarch64-mgeneral_regs_only.c7
5 files changed, 24 insertions, 9 deletions
diff --git a/clang/docs/UsersManual.rst b/clang/docs/UsersManual.rst
index d832f99baed..15ae86a5641 100644
--- a/clang/docs/UsersManual.rst
+++ b/clang/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/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index 85b69bb7a86..b40a9f7d39c 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -72,6 +72,7 @@ def m_Group : OptionGroup<"<m group>">, Group<CompileOnly_Group>;
def m_x86_Features_Group : OptionGroup<"<m x86 features group>">, Group<m_Group>;
def m_hexagon_Features_Group : OptionGroup<"<m hexagon features group>">, Group<m_Group>;
def m_arm_Features_Group : OptionGroup<"<m arm features group>">, Group<m_Group>;
+def m_aarch64_Features_Group : OptionGroup<"<m aarch64 features group>">, Group<m_Group>;
def m_ppc_Features_Group : OptionGroup<"<m ppc features group>">, Group<m_Group>;
def u_Group : OptionGroup<"<u group>">;
@@ -1053,6 +1054,9 @@ def mcrc : Flag<["-"], "mcrc">, Group<m_arm_Features_Group>,
def mnocrc : Flag<["-"], "mnocrc">, Group<m_arm_Features_Group>,
HelpText<"Disallow use of CRC instructions (ARM only)">;
+def mgeneral_regs_only : Flag<["-"], "mgeneral_regs_only">, Group<m_aarch64_Features_Group>,
+ HelpText<"Generate code which only uses the general purpose registers (AArch64 only)">;
+
def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
def mfprnd : Flag<["-"], "mfprnd">, Group<m_ppc_Features_Group>;
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index a3a385d1cf1..3e9ebf8aef1 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/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/clang/test/Driver/aarch64-mfpu.c b/clang/test/Driver/aarch64-mfpu.c
index 234401bcb21..b62a2e797c4 100644
--- a/clang/test/Driver/aarch64-mfpu.c
+++ b/clang/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/clang/test/Driver/aarch64-mgeneral_regs_only.c b/clang/test/Driver/aarch64-mgeneral_regs_only.c
new file mode 100644
index 00000000000..026f98c3319
--- /dev/null
+++ b/clang/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"
OpenPOWER on IntegriCloud