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 cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits