r246508 - Revert "Pull the target attribute parsing out of CGCall and onto TargetInfo."

Eric Christopher via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 31 16:19:55 PDT 2015


Author: echristo
Date: Mon Aug 31 18:19:55 2015
New Revision: 246508

URL: http://llvm.org/viewvc/llvm-project?rev=246508&view=rev
Log:
Revert "Pull the target attribute parsing out of CGCall and onto TargetInfo."

This reverts commit r246468 while we figure out what to do about Basic and AST.

Modified:
    cfe/trunk/include/clang/Basic/TargetInfo.h
    cfe/trunk/lib/Basic/TargetInfo.cpp
    cfe/trunk/lib/CodeGen/CGCall.cpp

Modified: cfe/trunk/include/clang/Basic/TargetInfo.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=246508&r1=246507&r2=246508&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/TargetInfo.h (original)
+++ cfe/trunk/include/clang/Basic/TargetInfo.h Mon Aug 31 18:19:55 2015
@@ -15,9 +15,7 @@
 #ifndef LLVM_CLANG_BASIC_TARGETINFO_H
 #define LLVM_CLANG_BASIC_TARGETINFO_H
 
-#include "clang/AST/Attr.h"
 #include "clang/Basic/AddressSpaces.h"
-#include "clang/Basic/Attributes.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/Specifiers.h"
 #include "clang/Basic/TargetCXXABI.h"
@@ -742,18 +740,21 @@ public:
   /// language options which change the target configuration.
   virtual void adjust(const LangOptions &Opts);
 
-  /// \brief Parse a __target__ attribute and get the cpu/feature strings
-  /// out of it for later use.
-  typedef std::pair<StringRef, std::vector<std::string>> ParsedTargetAttr;
-  ParsedTargetAttr parseTargetAttr(const TargetAttr *TA) const;
-
   /// \brief Initialize the map with the default set of target features for the
   /// CPU this should include all legal feature strings on the target.
   ///
   /// \return False on error (invalid features).
   virtual bool initFeatureMap(llvm::StringMap<bool> &Features,
                               DiagnosticsEngine &Diags, StringRef CPU,
-                              std::vector<std::string> &FeatureVec) const;
+                              std::vector<std::string> &FeatureVec) const {
+    for (const auto &F : FeatureVec) {
+      const char *Name = F.c_str();
+      // Apply the feature via the target.
+      bool Enabled = Name[0] == '+';
+      setFeatureEnabled(Features, Name + 1, Enabled);
+    }
+    return true;
+  }
 
   /// \brief Get the ABI currently in use.
   virtual StringRef getABI() const { return StringRef(); }

Modified: cfe/trunk/lib/Basic/TargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/TargetInfo.cpp?rev=246508&r1=246507&r2=246508&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/TargetInfo.cpp (original)
+++ cfe/trunk/lib/Basic/TargetInfo.cpp Mon Aug 31 18:19:55 2015
@@ -650,50 +650,3 @@ bool TargetInfo::validateInputConstraint
 
   return true;
 }
-
-bool TargetInfo::initFeatureMap(llvm::StringMap<bool> &Features,
-                                DiagnosticsEngine &Diags, StringRef CPU,
-                                std::vector<std::string> &FeatureVec) const {
-  for (const auto &F : FeatureVec) {
-    const char *Name = F.c_str();
-    // Apply the feature via the target.
-    bool Enabled = Name[0] == '+';
-    setFeatureEnabled(Features, Name + 1, Enabled);
-  }
-  return true;
-}
-
-TargetInfo::ParsedTargetAttr
-TargetInfo::parseTargetAttr(const TargetAttr *TA) const {
-  std::pair<StringRef, std::vector<std::string>> RetPair;
-
-  // Grab the target attribute string.
-  StringRef FeaturesStr = TA->getFeatures();
-  SmallVector<StringRef, 1> AttrFeatures;
-  FeaturesStr.split(AttrFeatures, ",");
-
-  // Grab the various features and prepend a "+" to turn on the feature to
-  // the backend and add them to our existing set of features.
-  for (auto &Feature : AttrFeatures) {
-    // Go ahead and trim whitespace rather than either erroring or
-    // accepting it weirdly.
-    Feature = Feature.trim();
-
-    // While we're here iterating check for a different target cpu.
-    if (Feature.startswith("arch="))
-      RetPair.first = Feature.split("=").second.trim();
-    else if (Feature.startswith("tune="))
-      // We don't support cpu tuning this way currently.
-      ;
-    else if (Feature.startswith("fpmath="))
-      // TODO: Support the fpmath option this way. It will require checking
-      // overall feature validity for the function with the rest of the
-      // attributes on the function.
-      ;
-    else if (Feature.startswith("no-"))
-      RetPair.second.push_back("-" + Feature.split("-").second.str());
-    else
-      RetPair.second.push_back("+" + Feature.str());
-  }
-  return RetPair;
-}

Modified: cfe/trunk/lib/CodeGen/CGCall.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=246508&r1=246507&r2=246508&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGCall.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGCall.cpp Mon Aug 31 18:19:55 2015
@@ -1499,19 +1499,45 @@ void CodeGenModule::ConstructAttributeLi
     const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(TargetDecl);
     if (FD && FD->getAttr<TargetAttr>()) {
       llvm::StringMap<bool> FeatureMap;
+      const auto *TD = FD->getAttr<TargetAttr>();
 
+      // Make a copy of the features as passed on the command line.
+      std::vector<std::string> FnFeatures =
+          getTarget().getTargetOpts().FeaturesAsWritten;
+
+      // Grab the target attribute string.
+      StringRef FeaturesStr = TD->getFeatures();
+      SmallVector<StringRef, 1> AttrFeatures;
+      FeaturesStr.split(AttrFeatures, ",");
+
+      // Grab the various features and prepend a "+" to turn on the feature to
+      // the backend and add them to our existing set of features.
+      for (auto &Feature : AttrFeatures) {
+        // Go ahead and trim whitespace rather than either erroring or
+        // accepting it weirdly.
+        Feature = Feature.trim();
+
+        // While we're here iterating check for a different target cpu.
+        if (Feature.startswith("arch="))
+          TargetCPU = Feature.split("=").second.trim();
+        else if (Feature.startswith("tune="))
+          // We don't support cpu tuning this way currently.
+          ;
+        else if (Feature.startswith("fpmath="))
+          // TODO: Support the fpmath option this way. It will require checking
+          // overall feature validity for the function with the rest of the
+          // attributes on the function.
+          ;
+        else if (Feature.startswith("no-"))
+          FnFeatures.push_back("-" + Feature.split("-").second.str());
+        else
+          FnFeatures.push_back("+" + Feature.str());
+      }
       // Now populate the feature map, first with the TargetCPU which is either
       // the default or a new one from the target attribute string. Then we'll
       // use the passed in features (FeaturesAsWritten) along with the new ones
       // from the attribute.
-      TargetInfo::ParsedTargetAttr PTA =
-          getTarget().parseTargetAttr(FD->getAttr<TargetAttr>());
-      if (PTA.first != "")
-	TargetCPU = PTA.first;
-      PTA.second.insert(PTA.second.begin(),
-                        getTarget().getTargetOpts().FeaturesAsWritten.begin(),
-                        getTarget().getTargetOpts().FeaturesAsWritten.end());
-      getTarget().initFeatureMap(FeatureMap, Diags, TargetCPU, PTA.second);
+      getTarget().initFeatureMap(FeatureMap, Diags, TargetCPU, FnFeatures);
 
       // Produce the canonical string for this set of features.
       std::vector<std::string> Features;




More information about the cfe-commits mailing list