sdardis updated this revision to Diff 76824.
sdardis added a comment.
Rebase and ping
https://reviews.llvm.org/D21072
Files:
include/clang/Driver/ToolChain.h
lib/Driver/MSVCToolChain.cpp
lib/Driver/MinGWToolChain.cpp
lib/Driver/ToolChain.cpp
lib/Driver/ToolChains.cpp
lib/Driver/ToolChains.h
lib/Driver/Tools.cpp
test/Driver/mips-integrated-as.s
Index: test/Driver/mips-integrated-as.s
===================================================================
--- test/Driver/mips-integrated-as.s
+++ test/Driver/mips-integrated-as.s
@@ -1,3 +1,5 @@
+// RUN: %clang -target mips-linux-gnu -### -c %s 2>&1 | \
+// RUN: FileCheck -check-prefix=ABI-O32 %s
// RUN: %clang -target mips-linux-gnu -### -fintegrated-as -c %s 2>&1 | \
// RUN: FileCheck -check-prefix=ABI-O32 %s
// RUN: %clang -target mips-linux-gnu -### -fintegrated-as -c %s -mabi=32 2>&1 | \
@@ -293,3 +295,13 @@
// IMG-SINGLEFLOAT-EXPLICIT-FPXX: "-target-feature" "+single-float"
// IMG-SINGLEFLOAT-EXPLICIT-FPXX: "-target-feature" "+fpxx"
// IMG-SINGLEFLOAT-EXPLICIT-FPXX: "-target-feature" "+nooddspreg"
+
+// RUN: %clang -target mips-linux-gnu -### -c %s -mips64 -mabi=n32 2>&1 | \
+// RUN: FileCheck -check-prefix=GAS %s
+// RUN: %clang -target mips64-linux-gnu -### -c %s -mabi=n32 2>&1 | \
+// RUN: FileCheck -check-prefix=GAS %s
+// RUN: %clang -target mips-linux-gnu -### -c %s -mips64 -mabi=64 2>&1 | \
+// RUN: FileCheck -check-prefix=GAS %s
+// RUN: %clang -target mips64-linux-gnu -### -c %s 2>&1 | \
+// RUN: FileCheck -check-prefix=GAS %s
+// GAS-NOT: -cc1as
Index: lib/Driver/Tools.cpp
===================================================================
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -4552,7 +4552,7 @@
// Decide whether to use verbose asm. Verbose assembly is the default on
// toolchains which have the integrated assembler on by default.
bool IsIntegratedAssemblerDefault =
- getToolChain().IsIntegratedAssemblerDefault();
+ getToolChain().IsIntegratedAssemblerDefault(Args);
if (Args.hasFlag(options::OPT_fverbose_asm, options::OPT_fno_verbose_asm,
IsIntegratedAssemblerDefault) ||
Args.hasArg(options::OPT_dA))
Index: lib/Driver/ToolChains.h
===================================================================
--- lib/Driver/ToolChains.h
+++ lib/Driver/ToolChains.h
@@ -221,7 +221,8 @@
bool isPICDefault() const override;
bool isPIEDefault() const override;
bool isPICDefaultForced() const override;
- bool IsIntegratedAssemblerDefault() const override;
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override;
llvm::opt::DerivedArgList *
TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
Action::OffloadKind DeviceOffloadKind) const override;
@@ -339,7 +340,8 @@
// expected to use /usr/include/Block.h.
return true;
}
- bool IsIntegratedAssemblerDefault() const override {
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override {
// Default integrated assembler to on for Apple's MachO targets.
return true;
}
@@ -657,7 +659,10 @@
Solaris(const Driver &D, const llvm::Triple &Triple,
const llvm::opt::ArgList &Args);
- bool IsIntegratedAssemblerDefault() const override { return true; }
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override {
+ return true;
+ }
void AddClangCXXStdlibIncludeArgs(
const llvm::opt::ArgList &DriverArgs,
@@ -675,7 +680,8 @@
MinGW(const Driver &D, const llvm::Triple &Triple,
const llvm::opt::ArgList &Args);
- bool IsIntegratedAssemblerDefault() const override;
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override;
bool IsUnwindTablesDefault() const override;
bool isPICDefault() const override;
bool isPIEDefault() const override;
@@ -943,7 +949,10 @@
const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const override {}
- bool IsIntegratedAssemblerDefault() const override { return true; }
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override {
+ return true;
+ }
};
class LLVM_LIBRARY_VISIBILITY HexagonToolChain : public Linux {
@@ -966,7 +975,8 @@
CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
StringRef GetGCCLibAndIncVersion() const { return GCCLibAndIncVersion.Text; }
- bool IsIntegratedAssemblerDefault() const override {
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override {
return true;
}
@@ -991,7 +1001,10 @@
AMDGPUToolChain(const Driver &D, const llvm::Triple &Triple,
const llvm::opt::ArgList &Args);
unsigned GetDefaultDwarfVersion() const override { return 2; }
- bool IsIntegratedAssemblerDefault() const override { return true; }
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override {
+ return true;
+ }
};
class LLVM_LIBRARY_VISIBILITY NaClToolChain : public Generic_ELF {
@@ -1009,7 +1022,8 @@
void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const override;
- bool IsIntegratedAssemblerDefault() const override {
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override {
return getTriple().getArch() == llvm::Triple::mipsel;
}
@@ -1036,7 +1050,7 @@
bool isPIEDefault() const override { return true; }
bool HasNativeLLVMSupport() const override { return true; }
- bool IsIntegratedAssemblerDefault() const override { return true; }
+ bool IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override { return true; }
llvm::DebuggerKind getDefaultDebuggerTuning() const override {
return llvm::DebuggerKind::GDB;
}
@@ -1083,7 +1097,8 @@
TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
Action::OffloadKind DeviceOffloadKind) const override;
- bool IsIntegratedAssemblerDefault() const override;
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override;
bool IsUnwindTablesDefault() const override;
bool isPICDefault() const override;
bool isPIEDefault() const override;
@@ -1130,7 +1145,10 @@
CrossWindowsToolChain(const Driver &D, const llvm::Triple &T,
const llvm::opt::ArgList &Args);
- bool IsIntegratedAssemblerDefault() const override { return true; }
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override {
+ return true;
+ }
bool IsUnwindTablesDefault() const override;
bool isPICDefault() const override;
bool isPIEDefault() const override;
@@ -1225,7 +1243,8 @@
bool isPICDefault() const override;
bool isPIEDefault() const override;
bool isPICDefaultForced() const override;
- bool IsIntegratedAssemblerDefault() const override;
+ bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const override;
bool hasBlocksRuntime() const override;
bool SupportsObjCGC() const override;
bool SupportsProfiling() const override;
Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -2805,8 +2805,10 @@
return getArch() == llvm::Triple::x86_64 && getTriple().isOSWindows();
}
-bool Generic_GCC::IsIntegratedAssemblerDefault() const {
- switch (getTriple().getArch()) {
+bool Generic_GCC::IsIntegratedAssemblerDefault(const ArgList &Args) const {
+ llvm::Triple Triple = getTriple();
+
+ switch (Triple.getArch()) {
case llvm::Triple::x86:
case llvm::Triple::x86_64:
case llvm::Triple::aarch64:
@@ -2821,16 +2823,36 @@
case llvm::Triple::ppc64:
case llvm::Triple::ppc64le:
case llvm::Triple::systemz:
+ return true;
case llvm::Triple::mips:
- case llvm::Triple::mipsel:
+ case llvm::Triple::mipsel: {
+ // Convert a GNU style Mips ABI name to the name
+ // accepted by LLVM Mips backend.
+ llvm::StringRef ABIName = Args.getLastArgValue(options::OPT_mabi_EQ);
+ ABIName = llvm::StringSwitch<llvm::StringRef>(ABIName)
+ .Case("32", "o32")
+ .Case("64", "n64")
+ .Default(ABIName);
+ llvm::Triple ABITriple;
+ std::tie(ABITriple, ABIName) = getTriple().getABIVariant(ABIName);
+ if (ABITriple.getArch() != llvm::Triple::UnknownArch)
+ Triple = ABITriple;
+ if (Triple.getEnvironment() == llvm::Triple::ABIN32 ||
+ Triple.getEnvironment() == llvm::Triple::ABI64 ||
+ Triple.getEnvironment() == llvm::Triple::GNUABIN32 ||
+ Triple.getEnvironment() == llvm::Triple::GNUABI64 ||
+ Triple.getEnvironment() == llvm::Triple::AndroidABI64)
+ return false;
return true;
+ }
case llvm::Triple::mips64:
- case llvm::Triple::mips64el:
+ case llvm::Triple::mips64el: {
// Enabled for Debian mips64/mips64el only. Other targets are unable to
// distinguish N32 from N64.
if (getTriple().getEnvironment() == llvm::Triple::GNUABI64)
return true;
return false;
+ }
default:
return false;
}
@@ -5239,7 +5261,9 @@
bool WebAssembly::isPICDefaultForced() const { return false; }
-bool WebAssembly::IsIntegratedAssemblerDefault() const { return true; }
+bool WebAssembly::IsIntegratedAssemblerDefault(const ArgList &Args) const {
+ return true;
+}
// TODO: Support Objective C stuff.
bool WebAssembly::SupportsObjCGC() const { return false; }
Index: lib/Driver/ToolChain.cpp
===================================================================
--- lib/Driver/ToolChain.cpp
+++ lib/Driver/ToolChain.cpp
@@ -84,7 +84,7 @@
bool ToolChain::useIntegratedAs() const {
return Args.hasFlag(options::OPT_fintegrated_as,
options::OPT_fno_integrated_as,
- IsIntegratedAssemblerDefault());
+ IsIntegratedAssemblerDefault(Args));
}
const SanitizerArgs& ToolChain::getSanitizerArgs() const {
Index: lib/Driver/MinGWToolChain.cpp
===================================================================
--- lib/Driver/MinGWToolChain.cpp
+++ lib/Driver/MinGWToolChain.cpp
@@ -96,7 +96,9 @@
getFilePaths().push_back(Base + Arch + "/sys-root/mingw/lib");
}
-bool MinGW::IsIntegratedAssemblerDefault() const { return true; }
+bool MinGW::IsIntegratedAssemblerDefault(const ArgList &Args) const {
+ return true;
+}
Tool *MinGW::getTool(Action::ActionClass AC) const {
switch (AC) {
Index: lib/Driver/MSVCToolChain.cpp
===================================================================
--- lib/Driver/MSVCToolChain.cpp
+++ lib/Driver/MSVCToolChain.cpp
@@ -65,7 +65,7 @@
return nullptr;
}
-bool MSVCToolChain::IsIntegratedAssemblerDefault() const {
+bool MSVCToolChain::IsIntegratedAssemblerDefault(const ArgList &Args) const {
return true;
}
Index: include/clang/Driver/ToolChain.h
===================================================================
--- include/clang/Driver/ToolChain.h
+++ include/clang/Driver/ToolChain.h
@@ -245,7 +245,10 @@
/// IsIntegratedAssemblerDefault - Does this tool chain enable -integrated-as
/// by default.
- virtual bool IsIntegratedAssemblerDefault() const { return false; }
+ virtual bool
+ IsIntegratedAssemblerDefault(const llvm::opt::ArgList &Args) const {
+ return false;
+ }
/// \brief Check if the toolchain should use the integrated assembler.
virtual bool useIntegratedAs() const;
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits