diff options
-rw-r--r-- | include/clang/Driver/Options.td | 10 | ||||
-rw-r--r-- | lib/Driver/Tools.cpp | 23 | ||||
-rw-r--r-- | test/Driver/freebsd-mips-as.c | 20 | ||||
-rw-r--r-- | test/Driver/mips-as.c | 20 |
4 files changed, 71 insertions, 2 deletions
diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index b13c45bb3c..8a7d1135cf 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -41,6 +41,8 @@ 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 opencl_Group : OptionGroup<"<opencl group>">; def u_Group : OptionGroup<"<u group>">; +def mips_CPUs_Group : OptionGroup<"<MIPS CPU aliases group>">, + Group<CompileOnly_Group>; def pedantic_Group : OptionGroup<"<pedantic group>">, Group<CompileOnly_Group>; @@ -869,6 +871,14 @@ def mdsp : Flag<"-mdsp">, Group<m_Group>; def mno_dsp : Flag<"-mno-dsp">, Group<m_Group>; def mdspr2 : Flag<"-mdspr2">, Group<m_Group>; def mno_dspr2 : Flag<"-mno-dspr2">, Group<m_Group>; +def mips32 : Flag<"-mips32">, Group<mips_CPUs_Group>, + HelpText<"Equivalent to -march=mips32">; +def mips32r2 : Flag<"-mips32r2">, Group<mips_CPUs_Group>, + HelpText<"Equivalent to -march=mips32r2">; +def mips64 : Flag<"-mips64">, Group<mips_CPUs_Group>, + HelpText<"Equivalent to -march=mips64">; +def mips64r2 : Flag<"-mips64r2">, Group<mips_CPUs_Group>, + HelpText<"Equivalent to -march=mips64r2">; def mthumb : Flag<"-mthumb">, Group<m_Group>; def mtune_EQ : Joined<"-mtune=">, Group<m_Group>; def multi__module : Flag<"-multi_module">; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 960ffde228..0866c01657 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -778,6 +778,20 @@ void Clang::AddARMTargetArgs(const ArgList &Args, CmdArgs.push_back("-no-implicit-float"); } +// Translate MIPS CPU name alias option to CPU name. +static StringRef getMipsCPUFromAlias(const Arg &A) { + if (A.getOption().matches(options::OPT_mips32)) + return "mips32"; + if (A.getOption().matches(options::OPT_mips32r2)) + return "mips32r2"; + if (A.getOption().matches(options::OPT_mips64)) + return "mips64"; + if (A.getOption().matches(options::OPT_mips64r2)) + return "mips64r2"; + llvm_unreachable("Unexpected option"); + return ""; +} + // Get CPU and ABI names. They are not independent // so we have to calculate them together. static void getMipsCPUAndABI(const ArgList &Args, @@ -788,8 +802,13 @@ static void getMipsCPUAndABI(const ArgList &Args, const char *DefMips64CPU = "mips64"; if (Arg *A = Args.getLastArg(options::OPT_march_EQ, - options::OPT_mcpu_EQ)) - CPUName = A->getValue(Args); + options::OPT_mcpu_EQ, + options::OPT_mips_CPUs_Group)) { + if (A->getOption().matches(options::OPT_mips_CPUs_Group)) + CPUName = getMipsCPUFromAlias(*A); + else + CPUName = A->getValue(Args); + } if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) ABIName = A->getValue(Args); diff --git a/test/Driver/freebsd-mips-as.c b/test/Driver/freebsd-mips-as.c index 4131caba7e..54ff187515 100644 --- a/test/Driver/freebsd-mips-as.c +++ b/test/Driver/freebsd-mips-as.c @@ -59,3 +59,23 @@ // RUN: -no-integrated-as -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS-32R2 %s // MIPS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-unknown-freebsd -mips32 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32 %s +// MIPS-ALIAS-32: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-unknown-freebsd -mips32r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R2 %s +// MIPS-ALIAS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-unknown-freebsd -mips64 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64 %s +// MIPS-ALIAS-64: as{{(.exe)?}}" "-march" "mips64" "-mabi" "64" "-EB" +// +// RUN: %clang -target mips-unknown-freebsd -mips64r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R2 %s +// MIPS-ALIAS-64R2: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-EB" diff --git a/test/Driver/mips-as.c b/test/Driver/mips-as.c index 95b93b791c..fbaf62fdad 100644 --- a/test/Driver/mips-as.c +++ b/test/Driver/mips-as.c @@ -43,3 +43,23 @@ // RUN: -no-integrated-as -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS-32R2 %s // MIPS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-linux-gnu -mips32 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32 %s +// MIPS-ALIAS-32: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-linux-gnu -mips32r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R2 %s +// MIPS-ALIAS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-linux-gnu -mips64 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64 %s +// MIPS-ALIAS-64: as{{(.exe)?}}" "-march" "mips64" "-mabi" "64" "-EB" +// +// RUN: %clang -target mips-linux-gnu -mips64r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R2 %s +// MIPS-ALIAS-64R2: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-EB" |