]> granicus.if.org Git - clang/commitdiff
Add support for gcc-compatible -mpopcntd -mno-popcntd PPC options
authorHal Finkel <hfinkel@anl.gov>
Thu, 28 Mar 2013 13:51:36 +0000 (13:51 +0000)
committerHal Finkel <hfinkel@anl.gov>
Thu, 28 Mar 2013 13:51:36 +0000 (13:51 +0000)
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

include/clang/Driver/Options.td
lib/Basic/Targets.cpp
lib/Driver/Tools.cpp
test/Driver/ppc-features.cpp

index 0d75b8eb2f0126b18c8515a38b755e85661fcaa0..92d86986f823fe58d463c5201458acb7f96157e2 100644 (file)
@@ -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>;
index 8dc9b20f4cbeda2efa5fb70095fdb8ff398dc497..4ca8fbf7736a223513712b60c2012081ffac29d6 100644 (file)
@@ -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;
   }
index 1c455eda4af89dbbde3fbdd3e2af3e1af821078a..578651fd801dbcda293d41f9dd318c491b10b6a2 100644 (file)
@@ -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)) {
index 5140e85dd3df8b6450568863fe2629ebf7b58e44..901c676fe1dee49780b1ac25af41f18d81b9b00f 100644 (file)
@@ -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"
+