jsji created this revision. jsji added reviewers: PowerPC, shchenz. jsji requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
D105314 <https://reviews.llvm.org/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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D105512 Files: clang/include/clang/Driver/ToolChain.h clang/lib/Driver/ToolChains/AIX.cpp clang/lib/Driver/ToolChains/AIX.h clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/aix-as.c Index: clang/test/Driver/aix-as.c =================================================================== --- clang/test/Driver/aix-as.c +++ clang/test/Driver/aix-as.c @@ -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" Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -5038,7 +5038,9 @@ << 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)) { Index: clang/lib/Driver/ToolChains/AIX.h =================================================================== --- clang/lib/Driver/ToolChains/AIX.h +++ clang/lib/Driver/ToolChains/AIX.h @@ -59,6 +59,9 @@ 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; } @@ -87,6 +90,7 @@ private: llvm::StringRef GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const; + bool ParseInlineAsmUsingAsmParser; }; } // end namespace toolchains Index: clang/lib/Driver/ToolChains/AIX.cpp =================================================================== --- clang/lib/Driver/ToolChains/AIX.cpp +++ clang/lib/Driver/ToolChains/AIX.cpp @@ -176,6 +176,8 @@ /// 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"); } Index: clang/include/clang/Driver/ToolChain.h =================================================================== --- clang/include/clang/Driver/ToolChain.h +++ clang/include/clang/Driver/ToolChain.h @@ -380,6 +380,10 @@ /// 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; }
Index: clang/test/Driver/aix-as.c =================================================================== --- clang/test/Driver/aix-as.c +++ clang/test/Driver/aix-as.c @@ -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" Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -5038,7 +5038,9 @@ << 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)) { Index: clang/lib/Driver/ToolChains/AIX.h =================================================================== --- clang/lib/Driver/ToolChains/AIX.h +++ clang/lib/Driver/ToolChains/AIX.h @@ -59,6 +59,9 @@ 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; } @@ -87,6 +90,7 @@ private: llvm::StringRef GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const; + bool ParseInlineAsmUsingAsmParser; }; } // end namespace toolchains Index: clang/lib/Driver/ToolChains/AIX.cpp =================================================================== --- clang/lib/Driver/ToolChains/AIX.cpp +++ clang/lib/Driver/ToolChains/AIX.cpp @@ -176,6 +176,8 @@ /// 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"); } Index: clang/include/clang/Driver/ToolChain.h =================================================================== --- clang/include/clang/Driver/ToolChain.h +++ clang/include/clang/Driver/ToolChain.h @@ -380,6 +380,10 @@ /// 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; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits