Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[AIX] Don't pass no-integrated-as by default
D105314 added the abibility choose to use AsmParser for parsing inline
asm. -no-intergrated-as will override this default if specified
explicitly.

If toolchain choose to use MCAsmParser for inline asm, don't pass
the option to disable integrated-as explictly unless set by user.

Reviewed By: #powerpc, shchenz

Differential Revision: https://reviews.llvm.org/D105512
  • Loading branch information
Jinsong Ji committed Jul 8, 2021
1 parent e37dbc6 commit 31d10ea
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 1 deletion.
4 changes: 4 additions & 0 deletions clang/include/clang/Driver/ToolChain.h
Expand Up @@ -380,6 +380,10 @@ class ToolChain {
/// Check if the toolchain should use the integrated assembler.
virtual bool useIntegratedAs() const;

/// Check if the toolchain should use AsmParser to parse inlineAsm when
/// integrated assembler is not default.
virtual bool parseInlineAsmUsingAsmParser() const { return false; }

/// IsMathErrnoDefault - Does this tool chain use -fmath-errno by default.
virtual bool IsMathErrnoDefault() const { return true; }

Expand Down
2 changes: 2 additions & 0 deletions clang/lib/Driver/ToolChains/AIX.cpp
Expand Up @@ -176,6 +176,8 @@ void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA,
/// AIX - AIX tool chain which can call as(1) and ld(1) directly.
AIX::AIX(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
: ToolChain(D, Triple, Args) {
ParseInlineAsmUsingAsmParser = Args.hasFlag(
options::OPT_fintegrated_as, options::OPT_fno_integrated_as, true);
getLibraryPaths().push_back(getDriver().SysRoot + "/usr/lib");
}

Expand Down
4 changes: 4 additions & 0 deletions clang/lib/Driver/ToolChains/AIX.h
Expand Up @@ -59,6 +59,9 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
AIX(const Driver &D, const llvm::Triple &Triple,
const llvm::opt::ArgList &Args);

bool parseInlineAsmUsingAsmParser() const override {
return ParseInlineAsmUsingAsmParser;
}
bool isPICDefault() const override { return true; }
bool isPIEDefault() const override { return false; }
bool isPICDefaultForced() const override { return true; }
Expand Down Expand Up @@ -87,6 +90,7 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {

private:
llvm::StringRef GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const;
bool ParseInlineAsmUsingAsmParser;
};

} // end namespace toolchains
Expand Down
4 changes: 3 additions & 1 deletion clang/lib/Driver/ToolChains/Clang.cpp
Expand Up @@ -5038,7 +5038,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
<< A->getValue() << A->getOption().getName();
}

if (!TC.useIntegratedAs())
// If toolchain choose to use MCAsmParser for inline asm don't pass the
// option to disable integrated-as explictly.
if (!TC.useIntegratedAs() && !TC.parseInlineAsmUsingAsmParser())
CmdArgs.push_back("-no-integrated-as");

if (Args.hasArg(options::OPT_fdebug_pass_structure)) {
Expand Down
15 changes: 15 additions & 0 deletions clang/test/Driver/aix-as.c
Expand Up @@ -63,3 +63,18 @@
// CHECK-AS32-MultiInput: "{{.*}}as{{(.exe)?}}"
// CHECK-AS32-MultiInput: "-a32"
// CHECK-AS32-MultiInput: "-many"

// Check not passing no-integrated-as flag by default.
// RUN: %clang -no-canonical-prefixes %s -### -c -o %t.o 2>&1 \
// RUN: -target powerpc64-ibm-aix7.1.0.0 \
// RUN: | FileCheck --check-prefix=CHECK-IAS --implicit-check-not=-no-integrated-as %s
// CHECK-IAS: InstalledDir
// CHECK-IAS: "-a64"

// Check passing no-integrated-as flag if specified by user.
// RUN: %clang -no-canonical-prefixes %s -### -c -o %t.o 2>&1 \
// RUN: -target powerpc64-ibm-aix7.1.0.0 -fno-integrated-as \
// RUN: | FileCheck --check-prefix=CHECK-NOIAS %s
// CHECK-NOIAS: InstalledDir
// CHECK-NOIAS: -no-integrated-as
// CHECK-NOIAS: "-a64"

0 comments on commit 31d10ea

Please sign in to comment.