qiongsiwu1 created this revision.
qiongsiwu1 added reviewers: w2yehia, MaskRay, shchenz, Esme.
qiongsiwu1 added a project: clang.
Herald added subscribers: ormris, steven_wu, hiraditya, inglorion.
Herald added a project: All.
qiongsiwu1 requested review of this revision.
Herald added subscribers: llvm-commits, cfe-commits.
Herald added a project: LLVM.
`libLTO` currently ignores the `-f[no-]integrated-as` flags. This patch teaches
`libLTO` to respect them.
The implementation consists of two parts:
1. Migrate `llc`'s `-no-integrated-as` option to a codegen option so that the
option is available to `libLTO`/`lld`/`gold`.
2. Teach `clang` to pass `-no-integrated-as` accordingly to `libLTO` depending
on the `-f[no-]integrated-as` flags.
`libLTO` cannot use system assemblers on platforms other than AIX. As part of
the option processing, a warning is implemented if `-fno-integrated-as` is used
for LTO on platforms other than AIX.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D152924
Files:
clang/include/clang/Basic/DiagnosticDriverKinds.td
clang/lib/Driver/ToolChains/CommonArgs.cpp
clang/test/Driver/lto-aix.c
clang/test/Driver/lto.c
llvm/include/llvm/CodeGen/CommandFlags.h
llvm/lib/CodeGen/CommandFlags.cpp
llvm/lib/LTO/LTOCodeGenerator.cpp
llvm/test/tools/llvm-lto/aix-sys-as.ll
llvm/test/tools/llvm-lto/aix.ll
llvm/tools/llc/llc.cpp
Index: llvm/tools/llc/llc.cpp
===================================================================
--- llvm/tools/llc/llc.cpp
+++ llvm/tools/llc/llc.cpp
@@ -106,10 +106,6 @@
"'none' means that all ELF features can be used, "
"regardless of binutils support"));
-static cl::opt<bool>
-NoIntegratedAssembler("no-integrated-as", cl::Hidden,
- cl::desc("Disable integrated assembler"));
-
static cl::opt<bool>
PreserveComments("preserve-as-comments", cl::Hidden,
cl::desc("Preserve Comments in outputted assembly"),
@@ -517,7 +513,6 @@
Options.BinutilsVersion =
TargetMachine::parseBinutilsVersion(BinutilsVersion);
- Options.DisableIntegratedAS = NoIntegratedAssembler;
Options.MCOptions.ShowMCEncoding = ShowMCEncoding;
Options.MCOptions.AsmVerbose = AsmVerbose;
Options.MCOptions.PreserveAsmComments = PreserveComments;
Index: llvm/test/tools/llvm-lto/aix.ll
===================================================================
--- llvm/test/tools/llvm-lto/aix.ll
+++ llvm/test/tools/llvm-lto/aix.ll
@@ -1,4 +1,4 @@
-; REQUIRES: system-aix
+; REQUIRES: powerpc-registered-target
; RUN: llvm-as < %s > %t1
; RUN: llvm-lto %t1 | FileCheck %s
Index: llvm/test/tools/llvm-lto/aix-sys-as.ll
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-lto/aix-sys-as.ll
@@ -0,0 +1,12 @@
+; REQUIRES: system-aix
+; RUN: llvm-as < %s > %t1
+; RUN: llvm-lto -no-integrated-as=1 %t1 | FileCheck %s
+
+target triple = "powerpc-ibm-aix"
+
+define i32 @main() {
+entry:
+ ret i32 42
+}
+; CHECK: Wrote native object file
+
Index: llvm/lib/LTO/LTOCodeGenerator.cpp
===================================================================
--- llvm/lib/LTO/LTOCodeGenerator.cpp
+++ llvm/lib/LTO/LTOCodeGenerator.cpp
@@ -244,7 +244,7 @@
bool LTOCodeGenerator::useAIXSystemAssembler() {
const auto &Triple = TargetMach->getTargetTriple();
- return Triple.isOSAIX();
+ return Triple.isOSAIX() && Config.Options.DisableIntegratedAS;
}
bool LTOCodeGenerator::runAIXSystemAssembler(SmallString<128> &AssemblyFile) {
Index: llvm/lib/CodeGen/CommandFlags.cpp
===================================================================
--- llvm/lib/CodeGen/CommandFlags.cpp
+++ llvm/lib/CodeGen/CommandFlags.cpp
@@ -81,6 +81,7 @@
CGOPT(bool, StackRealign)
CGOPT(std::string, TrapFuncName)
CGOPT(bool, UseCtors)
+CGOPT(bool, DisableIntegratedAS)
CGOPT(bool, RelaxELFRelocations)
CGOPT_EXP(bool, DataSections)
CGOPT_EXP(bool, FunctionSections)
@@ -487,6 +488,11 @@
cl::init(false));
CGBINDOPT(XCOFFReadOnlyPointers);
+ static cl::opt<bool> DisableIntegratedAS(
+ "no-integrated-as", cl::desc("Disable integrated assembler"),
+ cl::init(false));
+ CGBINDOPT(DisableIntegratedAS);
+
#undef CGBINDOPT
mc::RegisterMCTargetOptionsFlags();
@@ -540,6 +546,7 @@
Options.GuaranteedTailCallOpt = getEnableGuaranteedTailCallOpt();
Options.StackSymbolOrdering = getStackSymbolOrdering();
Options.UseInitArray = !getUseCtors();
+ Options.DisableIntegratedAS = getDisableIntegratedAS();
Options.RelaxELFRelocations = getRelaxELFRelocations();
Options.DataSections =
getExplicitDataSections().value_or(TheTriple.hasDefaultDataSections());
Index: llvm/include/llvm/CodeGen/CommandFlags.h
===================================================================
--- llvm/include/llvm/CodeGen/CommandFlags.h
+++ llvm/include/llvm/CodeGen/CommandFlags.h
@@ -94,6 +94,8 @@
bool getUseCtors();
+bool getDisableIntegratedAS();
+
bool getRelaxELFRelocations();
bool getDataSections();
Index: clang/test/Driver/lto.c
===================================================================
--- clang/test/Driver/lto.c
+++ clang/test/Driver/lto.c
@@ -105,3 +105,10 @@
// FLTO-THIN: -flto=thin
// FLTO-THIN-NOT: "-flto"
// FLTO-THIN-NOT: -flto=full
+//
+
+// Check that using -fno-integrated-as produces a warning on Linux
+// RUN: %clang --target=x86_64-unknown-linux -### %s -fno-integrated-as \
+// RUN: -flto 2>&1 | FileCheck --check-prefix=NO-INTEGRATED-AS %s
+//
+// NO-INTEGRATED-AS: clang: warning: ignoring '-fno-integrated-as' option as it is not currently supported for target 'x86_64-unknown-linux' during LTO [-Woption-ignored]
Index: clang/test/Driver/lto-aix.c
===================================================================
--- clang/test/Driver/lto-aix.c
+++ clang/test/Driver/lto-aix.c
@@ -73,3 +73,14 @@
// RUN: -fcs-profile-generate 2>&1 | FileCheck -check-prefix=CSPGO %s
//
// CSPGO: "-bplugin_opt:-cs-profile-generate" "-bplugin_opt:-cs-profile-path=default_%m.profraw"
+//
+// Test integrated assembler options
+// RUN: %clang --target=powerpc-ibm-aix -### %s -flto -fno-integrated-as \
+// RUN: -fintegrated-as 2>&1 | FileCheck --check-prefix=INTAS %s
+// RUN: %clang --target=powerpc-ibm-aix -### %s -flto -fintegrated-as \
+// RUN: -fno-integrated-as 2>&1 | FileCheck --check-prefix=NOINTAS %s
+// RUN: %clang --target=powerpc-ibm-aix -### %s -flto 2>&1 \
+// RUN: | FileCheck --check-prefix=INTAS %s
+//
+// NOINTAS: "-bplugin_opt:-no-integrated-as=1"
+// INTAS: "-bplugin_opt:-no-integrated-as=0"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -693,6 +693,17 @@
Args.MakeArgString(Twine(PluginOptPrefix) + "-debugger-tune=gdb"));
}
+ bool UseIntegratedAs = ToolChain.useIntegratedAs();
+ StringRef NoIntegratedAs = UseIntegratedAs ? "0" : "1";
+ if (IsOSAIX)
+ CmdArgs.push_back(Args.MakeArgString(
+ Twine(PluginOptPrefix) + "-no-integrated-as=" + NoIntegratedAs));
+ else if (!UseIntegratedAs) {
+ Arg *A = Args.getLastArgNoClaim(options::OPT_fno_integrated_as);
+ D.Diag(diag::warn_drv_unsupported_lto_option_for_target)
+ << A->getSpelling() << ToolChain.getTriple().getTriple();
+ }
+
if (IsOSAIX) {
// On AIX, clang assumes strict-dwarf is true if any debug option is
// specified, unless it is told explicitly not to assume so.
Index: clang/include/clang/Basic/DiagnosticDriverKinds.td
===================================================================
--- clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -730,4 +730,8 @@
def err_drv_expand_response_file : Error<
"failed to expand response file: %0">;
+
+def warn_drv_unsupported_lto_option_for_target : Warning<
+ "ignoring '%0' option as it is not currently supported for target '%1' during LTO">,
+ InGroup<OptionIgnored>;
}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits