]> granicus.if.org Git - clang/commitdiff
For Darwin, do not let -mcpu override the -arch option. <rdar://11059238>
authorBob Wilson <bob.wilson@apple.com>
Wed, 21 Mar 2012 16:31:37 +0000 (16:31 +0000)
committerBob Wilson <bob.wilson@apple.com>
Wed, 21 Mar 2012 16:31:37 +0000 (16:31 +0000)
On Darwin the architecture and the corresponding Mach-O slice is typically
specified with -arch.  If not, it defaults to the current host architecture.
Do not use -mcpu to override the -arch value.  This is only an issue when
people need to use specialized code for a non-default CPU (hopefully guarded
by run-time checks to detect the current processor).  The -mcpu option is
still used for the -target-cpu option to clang, but this patch causes it to
not be used to set the architecture in the target triple.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153197 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChain.cpp

index b4f5d0b421080c245d91aca8c75e62ce78a0a3bd..eea460bd33e944ba6f2f9a1e9f3dd553e0ea13fe 100644 (file)
@@ -74,11 +74,15 @@ void ToolChain::configureObjCRuntime(ObjCRuntime &runtime) const {
 // FIXME: tblgen this.
 static const char *getARMTargetCPU(const ArgList &Args,
                                    const llvm::Triple &Triple) {
-  // FIXME: Warn on inconsistent use of -mcpu and -march.
-
-  // If we have -mcpu=, use that.
-  if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ))
-    return A->getValue(Args);
+  // For Darwin targets, the -arch option (which is translated to a
+  // corresponding -march option) should determine the architecture
+  // (and the Mach-O slice) regardless of any -mcpu options.
+  if (!Triple.isOSDarwin()) {
+    // FIXME: Warn on inconsistent use of -mcpu and -march.
+    // If we have -mcpu=, use that.
+    if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ))
+      return A->getValue(Args);
+  }
 
   StringRef MArch;
   if (Arg *A = Args.getLastArg(options::OPT_march_EQ)) {