Author: Daniel Chen Date: 2025-04-21T12:05:48-04:00 New Revision: 5133b432bc89f66547f6aab9a935f0a29f3b4572
URL: https://github.com/llvm/llvm-project/commit/5133b432bc89f66547f6aab9a935f0a29f3b4572 DIFF: https://github.com/llvm/llvm-project/commit/5133b432bc89f66547f6aab9a935f0a29f3b4572.diff LOG: Enable `-m32`, `-maix32` and `-maix64` for Flang on AIX. (#136202) This PR enables `-m32`, -`maix32` and `-maix64` for AIX only. For other platforms, the driver will issue an error that `-m32` is not supported. Added: flang/test/Driver/m32-option.f90 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 919c1c643d080..8224e734a5a5c 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -4702,15 +4702,17 @@ def EB : Flag<["-"], "EB">, Alias<mbig_endian>; def m16 : Flag<["-"], "m16">, Group<m_Group>, Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>; def m32 : Flag<["-"], "m32">, Group<m_Group>, Flags<[NoXarchOption]>, - Visibility<[ClangOption, CLOption, DXCOption]>; -def maix32 : Flag<["-"], "maix32">, Group<m_Group>, Flags<[NoXarchOption]>; + Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>; +def maix32 : Flag<["-"], "maix32">, Group<m_Group>, Flags<[NoXarchOption]>, + Visibility<[FlangOption]>; def mqdsp6_compat : Flag<["-"], "mqdsp6-compat">, Group<m_Group>, Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>, HelpText<"Enable hexagon-qdsp6 backward compatibility">, MarshallingInfoFlag<LangOpts<"HexagonQdsp6Compat">>; def m64 : Flag<["-"], "m64">, Group<m_Group>, Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>; -def maix64 : Flag<["-"], "maix64">, Group<m_Group>, Flags<[NoXarchOption]>; +def maix64 : Flag<["-"], "maix64">, Group<m_Group>, Flags<[NoXarchOption]>, + Visibility<[FlangOption]>; def mx32 : Flag<["-"], "mx32">, Group<m_Group>, Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, DXCOption]>; def miamcu : Flag<["-"], "miamcu">, Group<m_Group>, Flags<[NoXarchOption]>, diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 2a51ac2e9f0b9..2b8c6e35263b1 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -733,11 +733,16 @@ static llvm::Triple computeTargetTriple(const Driver &D, Target.setEnvironment(llvm::Triple::GNUX32); } 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); - else if (Target.getEnvironment() == llvm::Triple::MuslX32) - Target.setEnvironment(llvm::Triple::Musl); + if (D.IsFlangMode() && !Target.isOSAIX()) { + D.Diag(diag::err_drv_unsupported_opt_for_target) + << A->getAsString(Args) << Target.str(); + } else { + AT = Target.get32BitArchVariant().getArch(); + if (Target.getEnvironment() == llvm::Triple::GNUX32) + Target.setEnvironment(llvm::Triple::GNU); + else if (Target.getEnvironment() == llvm::Triple::MuslX32) + Target.setEnvironment(llvm::Triple::Musl); + } } else if (A->getOption().matches(options::OPT_m16) && Target.get32BitArchVariant().getArch() == llvm::Triple::x86) { AT = llvm::Triple::x86; diff --git a/flang/test/Driver/m32-option.f90 b/flang/test/Driver/m32-option.f90 new file mode 100644 index 0000000000000..722bddfa43739 --- /dev/null +++ b/flang/test/Driver/m32-option.f90 @@ -0,0 +1,14 @@ +! Check support of -m32. +! RUN: %flang -target powerpc-ibm-aix -m32 -### - %s 2>&1 | FileCheck -check-prefix=M32 %s +! RUN: %flang -target powerpc64-ibm-aix -m32 -### - %s 2>&1 | FileCheck -check-prefix=M32 %s +! RUN: %flang -target powerpc-ibm-aix -maix32 -### - %s 2>&1 | FileCheck -check-prefix=M32 %s +! RUN: %flang -target powerpc64-ibm-aix -maix32 -### - %s 2>&1 | FileCheck -check-prefix=M32 %s +! RUN: %flang -target powerpc-ibm-aix -maix64 -### - %s 2>&1 | FileCheck -check-prefix=M64 %s +! RUN: %flang -target powerpc64-ibm-aix -maix64 -### - %s 2>&1 | FileCheck -check-prefix=M64 %s +! RUN: not %flang -target powerpc64le-unknown-linux-gnu -m32 -### - %s 2>&1 | FileCheck -check-prefix=M32-ERROR %s +! RUN: not %flang -target powerpc64le-unknown-linux-gnu -maix32 -### - %s 2>&1 | FileCheck -check-prefix=MAIX32-ERROR %s + +! M32: "-triple" "powerpc-ibm-aix{{.*}}" +! M64: "-triple" "powerpc64-ibm-aix{{.*}}" +! M32-ERROR: error: unsupported option '-m32' for target 'powerpc64le-unknown-linux-gnu' +! MAIX32-ERROR: error: unsupported option '-maix32' for target 'powerpc64le-unknown-linux-gnu' _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits