Author: David Tenty Date: 2023-03-13T17:05:52-04:00 New Revision: 9a733e8a2c58957591e4dc0a02f9cfa6a06603de
URL: https://github.com/llvm/llvm-project/commit/9a733e8a2c58957591e4dc0a02f9cfa6a06603de DIFF: https://github.com/llvm/llvm-project/commit/9a733e8a2c58957591e4dc0a02f9cfa6a06603de.diff LOG: [clang][driver] accept maix32/maix64 gcc compat options GCC on AIX primarily uses the -maix32 and -maix64 to select the bitmode to target. In order to be compatible with existing build configurations, clang should accept these options as well. In this patch we implement these options for AIX targets. Differential Revision: https://reviews.llvm.org/D145610 Added: clang/test/Driver/aix-maix.c Modified: clang/include/clang/Driver/Options.td clang/lib/Driver/Driver.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 5c49450914a65..a2dbef1cc7cfe 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3416,10 +3416,12 @@ def mbig_endian : Flag<["-"], "mbig-endian">, Flags<[NoXarchOption]>; def EB : Flag<["-"], "EB">, Alias<mbig_endian>; def m16 : Flag<["-"], "m16">, Group<m_Group>, Flags<[NoXarchOption, CoreOption]>; def m32 : Flag<["-"], "m32">, Group<m_Group>, Flags<[NoXarchOption, CoreOption]>; +def maix32 : Flag<["-"], "maix32">, Group<m_Group>, Flags<[NoXarchOption]>; def mqdsp6_compat : Flag<["-"], "mqdsp6-compat">, Group<m_Group>, Flags<[NoXarchOption,CC1Option]>, HelpText<"Enable hexagon-qdsp6 backward compatibility">, MarshallingInfoFlag<LangOpts<"HexagonQdsp6Compat">>; def m64 : Flag<["-"], "m64">, Group<m_Group>, Flags<[NoXarchOption, CoreOption]>; +def maix64 : Flag<["-"], "maix64">, Group<m_Group>, Flags<[NoXarchOption]>; def mx32 : Flag<["-"], "mx32">, Group<m_Group>, Flags<[NoXarchOption, CoreOption]>; def mabi_EQ : Joined<["-"], "mabi=">, Group<m_Group>; def miamcu : Flag<["-"], "miamcu">, Group<m_Group>, Flags<[NoXarchOption, CoreOption]>, diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 0f5f35c14a7d0..b991a1822812c 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -594,13 +594,21 @@ static llvm::Triple computeTargetTriple(const Driver &D, } } + // The `-maix[32|64]` flags are only valid for AIX targets. + if (Arg *A = Args.getLastArgNoClaim(options::OPT_maix32, options::OPT_maix64); + A && !Target.isOSAIX()) + D.Diag(diag::err_drv_unsupported_opt_for_target) + << A->getAsString(Args) << Target.str(); + // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'. Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, - options::OPT_m32, options::OPT_m16); + options::OPT_m32, options::OPT_m16, + options::OPT_maix32, options::OPT_maix64); if (A) { llvm::Triple::ArchType AT = llvm::Triple::UnknownArch; - if (A->getOption().matches(options::OPT_m64)) { + if (A->getOption().matches(options::OPT_m64) || + A->getOption().matches(options::OPT_maix64)) { AT = Target.get64BitArchVariant().getArch(); if (Target.getEnvironment() == llvm::Triple::GNUX32) Target.setEnvironment(llvm::Triple::GNU); @@ -613,7 +621,8 @@ static llvm::Triple computeTargetTriple(const Driver &D, Target.setEnvironment(llvm::Triple::MuslX32); else Target.setEnvironment(llvm::Triple::GNUX32); - } else if (A->getOption().matches(options::OPT_m32)) { + } else if (A->getOption().matches(options::OPT_m32) || + A->getOption().matches(options::OPT_maix32)) { AT = Target.get32BitArchVariant().getArch(); if (Target.getEnvironment() == llvm::Triple::GNUX32) Target.setEnvironment(llvm::Triple::GNU); diff --git a/clang/test/Driver/aix-maix.c b/clang/test/Driver/aix-maix.c new file mode 100644 index 0000000000000..2bdcea22dfbdb --- /dev/null +++ b/clang/test/Driver/aix-maix.c @@ -0,0 +1,17 @@ +// Check GCC AIX bitmode compat options. + +// RUN: %clang -target powerpc-ibm-aix -maix64 -### -c %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK64 %s + +// RUN: %clang -target powerpc64-ibm-aix -maix32 -### -c %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK32 %s + +// RUN: %clang -target powerpc-unknown-linux -maix64 -### -c %s 2>&1 | \ +// RUN: FileCheck --check-prefix=ERROR %s + +// RUN: %clang -target powerpc64-unknown-linux -maix32 -### -c %s 2>&1 | \ +// RUN: FileCheck --check-prefix=ERROR %s + +// CHECK32: Target: powerpc-ibm-aix +// CHECK64: Target: powerpc64-ibm-aix +// ERROR: error: unsupported option '-maix _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits