[cfe-commits] r148139 - in /cfe/trunk: include/clang/Driver/Options.td lib/Basic/Targets.cpp lib/Driver/Tools.cpp

Sebastian Pop spop at codeaurora.org
Fri Jan 13 12:37:10 PST 2012


Author: spop
Date: Fri Jan 13 14:37:10 2012
New Revision: 148139

URL: http://llvm.org/viewvc/llvm-project?rev=148139&view=rev
Log:
remove assertions in the Hexagon backend specific clang driver

Patch from Jyotsna Verma:

I have made the changes to remove assertions in the Hexagon backend
specific clang driver. Instead of asserting on invalid arch name, it has
been modified to use the default value.

I have changed the implementation of the CPU flag validation for the
Hexagon backend. Earlier, the clang driver performed the check and
asserted on invalid inputs. In the new implementation, the driver passes
the last CPU flag (or sets to "v4" if not specified) to the compiler (and
also to the assembler and linker which perform their own check) instead of
asserting on incorrect values. This patch changes the setCPU function for
the Hexagon backend in clang/lib/Basic/Targets.cpp which causes the
compiler to error out on incorrect CPU flag values.

Modified:
    cfe/trunk/include/clang/Driver/Options.td
    cfe/trunk/lib/Basic/Targets.cpp
    cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=148139&r1=148138&r2=148139&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Fri Jan 13 14:37:10 2012
@@ -575,9 +575,6 @@
 def lazy__framework : Separate<"-lazy_framework">, Flags<[LinkerInput]>;
 def lazy__library : Separate<"-lazy_library">, Flags<[LinkerInput]>;
 def m32 : Flag<"-m32">, Group<m_Group>, Flags<[DriverOption]>;
-def mv2 : Flag<"-mv2">, Group<m_Group>, Flags<[DriverOption]>;
-def mv3 : Flag<"-mv3">, Group<m_Group>, Flags<[DriverOption]>;
-def mv4 : Flag<"-mv4">, Group<m_Group>, Flags<[DriverOption]>;
 def mqdsp6_compat : Flag<"-mqdsp6-compat">, Group<m_Group>, Flags<[DriverOption]>;
 def m3dnowa : Flag<"-m3dnowa">, Group<m_x86_Features_Group>;
 def m3dnow : Flag<"-m3dnow">, Group<m_x86_Features_Group>;

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=148139&r1=148138&r2=148139&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Fri Jan 13 14:37:10 2012
@@ -2963,7 +2963,19 @@
   virtual const char *getClobbers() const {
     return "";
   }
+
+  static const char *getHexagonCPUSuffix(StringRef Name) {
+    return llvm::StringSwitch<const char*>(Name)
+      .Case("hexagonv2", "2")
+      .Case("hexagonv3", "3")
+      .Case("hexagonv4", "4")
+      .Default(0);
+  }
+
   virtual bool setCPU(const std::string &Name) {
+    if (!getHexagonCPUSuffix(Name))
+      return false;
+
     CPU = Name;
     return true;
   }

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=148139&r1=148138&r2=148139&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Fri Jan 13 14:37:10 2012
@@ -966,49 +966,39 @@
 {
   Arg * A = NULL;
 
-  for (ArgList::const_iterator it = Args.begin(), ie = Args.end(); it != ie; ++it) {
-    if ((*it)->getOption().matches(options::OPT_mv2) ||
-        (*it)->getOption().matches(options::OPT_mv3) ||
-        (*it)->getOption().matches(options::OPT_mv4) ||
-        (*it)->getOption().matches(options::OPT_march_EQ) ||
+  for (ArgList::const_iterator it = Args.begin(), ie = Args.end();
+       it != ie; ++it) {
+    if ((*it)->getOption().matches(options::OPT_march_EQ) ||
         (*it)->getOption().matches(options::OPT_mcpu_EQ)) {
       A = *it;
       A->claim();
     }
+    else if ((*it)->getOption().matches(options::OPT_m_Joined)){
+      StringRef Value = (*it)->getValue(Args,0);
+      if (Value.startswith("v")) {
+        A = *it;
+        A->claim();
+      }
+    }
   }
   return A;
 }
 
-static const char *getHexagonTargetCPU(const ArgList &Args)
+static StringRef getHexagonTargetCPU(const ArgList &Args)
 {
   Arg *A;
   llvm::StringRef WhichHexagon;
 
+  // Select the default CPU (v4) if none was given or detection failed.
   if ((A = getLastHexagonArchArg (Args))) {
-    if ((A->getOption().matches(options::OPT_march_EQ)) ||
-        (A->getOption().matches(options::OPT_mcpu_EQ))) {
-      WhichHexagon = A->getValue(Args);
-      if (WhichHexagon == "v2")
-        return "hexagonv2";
-      else if (WhichHexagon == "v3")
-        return "hexagonv3";
-      else if (WhichHexagon == "v4")
-        return "hexagonv4";
-      else
-        assert (0 && "Unknown -march or -mcpu value");
-    }
-    else {
-      if (A->getOption().matches(options::OPT_mv2))
-        return "hexagonv2";
-      else if (A->getOption().matches(options::OPT_mv3))
-        return "hexagonv3";
-      else if (A->getOption().matches(options::OPT_mv4))
-        return "hexagonv4";
-      else
-        assert(0 && "Unknown -m argument.");
-    }
+    WhichHexagon = A->getValue(Args);
+    if (WhichHexagon == "")
+      return "v4";
+    else
+      return WhichHexagon;
   }
-  return "hexagonv2";
+  else
+    return "v4";
 }
 
 void Clang::AddHexagonTargetArgs(const ArgList &Args,
@@ -1016,7 +1006,7 @@
   llvm::Triple Triple = getToolChain().getTriple();
 
   CmdArgs.push_back("-target-cpu");
-  CmdArgs.push_back(getHexagonTargetCPU(Args));
+  CmdArgs.push_back(Args.MakeArgString("hexagon" + getHexagonTargetCPU(Args)));
   CmdArgs.push_back("-fno-signed-char");
   CmdArgs.push_back("-nobuiltininc");
 
@@ -2898,29 +2888,16 @@
 
   // Add Arch Information
   Arg *A;
-  if ((A = getLastHexagonArchArg (Args))) {
-    if ((A->getOption().matches(options::OPT_march_EQ)) ||
-        (A->getOption().matches(options::OPT_mcpu_EQ))) {
-    llvm::StringRef WhichHexagon = A->getValue(Args);
-    if (WhichHexagon == "v2")
-      CmdArgs.push_back("-mv2");
-    else if (WhichHexagon == "v3")
-      CmdArgs.push_back ("-mv3");
-    else if (WhichHexagon == "v4")
-      CmdArgs.push_back ("-mv4");
+  if ((A = getLastHexagonArchArg(Args))) {
+    if (A->getOption().matches(options::OPT_m_Joined))
+      A->render(Args, CmdArgs);
     else
-      assert (0 && "Unknown -march or -mcpu value");
-    }
-    else {
-      if (A->getOption().matches(options::OPT_mv2) ||
-          A->getOption().matches(options::OPT_mv3) ||
-          A->getOption().matches(options::OPT_mv4))
-        A->render(Args, CmdArgs);
-      else
-        assert(0 && "Unknown -m argument.");
-    }
-
+      CmdArgs.push_back (Args.MakeArgString("-m" + getHexagonTargetCPU(Args)));
   }
+  else {
+    CmdArgs.push_back (Args.MakeArgString("-m" + getHexagonTargetCPU(Args)));
+  }
+
   CmdArgs.push_back("-mqdsp6-compat");
 
   const char *GCCName;





More information about the cfe-commits mailing list