summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2013-02-22 20:55:17 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2013-02-22 20:55:17 +0000
commitb164d67d07d847346bf6364179dd642bc48592d8 (patch)
tree25638030c032a77d9883228f2b17b7b4d8830417 /clang
parent2f81db66afd54612937ac36a24d271e4b1b849ef (diff)
downloadbcm5719-llvm-b164d67d07d847346bf6364179dd642bc48592d8.tar.gz
bcm5719-llvm-b164d67d07d847346bf6364179dd642bc48592d8.zip
Driver: Pass down the -march setting down to -cc1as on x86 too.
The assembler historically didn't make use of any target features, but this has changed when support for old CPUs that don't support long nops was added. llvm-svn: 175919
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Driver/Tools.cpp14
-rw-r--r--clang/lib/Driver/Tools.h1
-rw-r--r--clang/test/Driver/target-as.s8
3 files changed, 23 insertions, 0 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 445ae5358be..12833a84229 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -3325,6 +3325,15 @@ void ClangAs::AddARMTargetArgs(const ArgList &Args,
addFPMathArgs(D, A, Args, CmdArgs, getARMTargetCPU(Args, Triple));
}
+void ClangAs::AddX86TargetArgs(const ArgList &Args,
+ ArgStringList &CmdArgs) const {
+ // Set the CPU based on -march=.
+ if (const char *CPUName = getX86TargetCPU(Args, getToolChain().getTriple())) {
+ CmdArgs.push_back("-target-cpu");
+ CmdArgs.push_back(CPUName);
+ }
+}
+
/// Add options related to the Objective-C runtime/ABI.
///
/// Returns true if the runtime is non-fragile.
@@ -3500,6 +3509,11 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
case llvm::Triple::thumb:
AddARMTargetArgs(Args, CmdArgs);
break;
+
+ case llvm::Triple::x86:
+ case llvm::Triple::x86_64:
+ AddX86TargetArgs(Args, CmdArgs);
+ break;
}
// Ignore explicit -force_cpusubtype_ALL option.
diff --git a/clang/lib/Driver/Tools.h b/clang/lib/Driver/Tools.h
index f4aebd8bd25..846c8340348 100644
--- a/clang/lib/Driver/Tools.h
+++ b/clang/lib/Driver/Tools.h
@@ -77,6 +77,7 @@ namespace tools {
/// \brief Clang integrated assembler tool.
class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
+ void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
public:
ClangAs(const ToolChain &TC) : Tool("clang::as",
"clang integrated assembler", TC) {}
diff --git a/clang/test/Driver/target-as.s b/clang/test/Driver/target-as.s
new file mode 100644
index 00000000000..adb3d10f14e
--- /dev/null
+++ b/clang/test/Driver/target-as.s
@@ -0,0 +1,8 @@
+// REQUIRES: clang-driver
+
+// Make sure the -march is passed down to cc1as.
+// RUN: %clang -target i386-unknown-freebsd -### -c -integrated-as %s \
+// RUN: -march=geode 2>&1 | FileCheck -check-prefix=TARGET %s
+//
+// TARGET: "-cc1as"
+// TARGET: "-target-cpu" "geode"
OpenPOWER on IntegriCloud