diff options
author | Hal Finkel <hfinkel@anl.gov> | 2013-03-28 13:51:36 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2013-03-28 13:51:36 +0000 |
commit | 829d187e2100d2cfd85acefc2e867d12336e393f (patch) | |
tree | 417cde8cead2c0a114196b1e62a4a58800325ed0 | |
parent | 8203d9f0490a7fbe0a7382165e0e8dc6c1de577d (diff) |
Add support for gcc-compatible -mpopcntd -mno-popcntd PPC options
gcc provides -mpopcntd and -mno-popcntd for controlling the popcntd target
feature; support these options as well.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178235 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Driver/Options.td | 2 | ||||
-rw-r--r-- | lib/Basic/Targets.cpp | 3 | ||||
-rw-r--r-- | lib/Driver/Tools.cpp | 4 | ||||
-rw-r--r-- | test/Driver/ppc-features.cpp | 6 |
4 files changed, 14 insertions, 1 deletions
diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 0d75b8eb2f..92d86986f8 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -836,6 +836,8 @@ def maltivec : Flag<["-"], "maltivec">, Alias<faltivec>; def mno_altivec : Flag<["-"], "mno-altivec">, Alias<fno_altivec>; def mmfcrf : Flag<["-"], "mmfcrf">, Group<m_Group>; def mno_mfcrf : Flag<["-"], "mno-mfcrf">, Group<m_Group>; +def mpopcntd : Flag<["-"], "mpopcntd">, Group<m_Group>; +def mno_popcntd : Flag<["-"], "mno-popcntd">, Group<m_Group>; def mqpx : Flag<["-"], "mqpx">, Group<m_Group>; def mno_qpx : Flag<["-"], "mno-qpx">, Group<m_Group>; def mcmodel_EQ : Joined<["-"], "mcmodel=">, Group<m_Group>; diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 8dc9b20f4c..4ca8fbf773 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -1029,7 +1029,8 @@ void PPCTargetInfo::getDefaultFeatures(llvm::StringMap<bool> &Features) const { bool PPCTargetInfo::setFeatureEnabled(llvm::StringMap<bool> &Features, StringRef Name, bool Enabled) const { - if (Name == "altivec" || Name == "mfocrf" || Name == "qpx") { + if (Name == "altivec" || Name == "mfocrf" || Name == "popcntd" || + Name == "qpx") { Features[Name] = Enabled; return true; } diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 1c455eda4a..578651fd80 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1106,6 +1106,10 @@ void Clang::AddPPCTargetArgs(const ArgList &Args, options::OPT_mmfcrf, options::OPT_mno_mfcrf, "mfocrf"); + AddTargetFeature(Args, CmdArgs, + options::OPT_mpopcntd, options::OPT_mno_popcntd, + "popcntd"); + // It is really only possible to turn qpx off because turning qpx on is tied // to using the a2q CPU. if (Args.hasFlag(options::OPT_mno_qpx, options::OPT_mqpx, false)) { diff --git a/test/Driver/ppc-features.cpp b/test/Driver/ppc-features.cpp index 5140e85dd3..901c676fe1 100644 --- a/test/Driver/ppc-features.cpp +++ b/test/Driver/ppc-features.cpp @@ -74,3 +74,9 @@ // RUN: %clang -target powerpc64-unknown-linux-gnu %s -mno-mfcrf -mmfcrf -### -o %t.o 2>&1 | FileCheck -check-prefix=CHECK-MFCRF %s // CHECK-MFCRF: "-target-feature" "+mfocrf" +// RUN: %clang -target powerpc64-unknown-linux-gnu %s -mno-popcntd -### -o %t.o 2>&1 | FileCheck -check-prefix=CHECK-NOPOPCNTD %s +// CHECK-NOPOPCNTD: "-target-feature" "-popcntd" + +// RUN: %clang -target powerpc64-unknown-linux-gnu %s -mno-popcntd -mpopcntd -### -o %t.o 2>&1 | FileCheck -check-prefix=CHECK-POPCNTD %s +// CHECK-POPCNTD: "-target-feature" "+popcntd" + |