Skip to content

Commit 5133b43

Browse files
authored
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.
1 parent 86a0336 commit 5133b43

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4702,15 +4702,17 @@ def EB : Flag<["-"], "EB">, Alias<mbig_endian>;
47024702
def m16 : Flag<["-"], "m16">, Group<m_Group>, Flags<[NoXarchOption]>,
47034703
Visibility<[ClangOption, CLOption, DXCOption]>;
47044704
def m32 : Flag<["-"], "m32">, Group<m_Group>, Flags<[NoXarchOption]>,
4705-
Visibility<[ClangOption, CLOption, DXCOption]>;
4706-
def maix32 : Flag<["-"], "maix32">, Group<m_Group>, Flags<[NoXarchOption]>;
4705+
Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>;
4706+
def maix32 : Flag<["-"], "maix32">, Group<m_Group>, Flags<[NoXarchOption]>,
4707+
Visibility<[FlangOption]>;
47074708
def mqdsp6_compat : Flag<["-"], "mqdsp6-compat">, Group<m_Group>,
47084709
Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>,
47094710
HelpText<"Enable hexagon-qdsp6 backward compatibility">,
47104711
MarshallingInfoFlag<LangOpts<"HexagonQdsp6Compat">>;
47114712
def m64 : Flag<["-"], "m64">, Group<m_Group>, Flags<[NoXarchOption]>,
47124713
Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>;
4713-
def maix64 : Flag<["-"], "maix64">, Group<m_Group>, Flags<[NoXarchOption]>;
4714+
def maix64 : Flag<["-"], "maix64">, Group<m_Group>, Flags<[NoXarchOption]>,
4715+
Visibility<[FlangOption]>;
47144716
def mx32 : Flag<["-"], "mx32">, Group<m_Group>, Flags<[NoXarchOption]>,
47154717
Visibility<[ClangOption, CLOption, DXCOption]>;
47164718
def miamcu : Flag<["-"], "miamcu">, Group<m_Group>, Flags<[NoXarchOption]>,

clang/lib/Driver/Driver.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -733,11 +733,16 @@ static llvm::Triple computeTargetTriple(const Driver &D,
733733
Target.setEnvironment(llvm::Triple::GNUX32);
734734
} else if (A->getOption().matches(options::OPT_m32) ||
735735
A->getOption().matches(options::OPT_maix32)) {
736-
AT = Target.get32BitArchVariant().getArch();
737-
if (Target.getEnvironment() == llvm::Triple::GNUX32)
738-
Target.setEnvironment(llvm::Triple::GNU);
739-
else if (Target.getEnvironment() == llvm::Triple::MuslX32)
740-
Target.setEnvironment(llvm::Triple::Musl);
736+
if (D.IsFlangMode() && !Target.isOSAIX()) {
737+
D.Diag(diag::err_drv_unsupported_opt_for_target)
738+
<< A->getAsString(Args) << Target.str();
739+
} else {
740+
AT = Target.get32BitArchVariant().getArch();
741+
if (Target.getEnvironment() == llvm::Triple::GNUX32)
742+
Target.setEnvironment(llvm::Triple::GNU);
743+
else if (Target.getEnvironment() == llvm::Triple::MuslX32)
744+
Target.setEnvironment(llvm::Triple::Musl);
745+
}
741746
} else if (A->getOption().matches(options::OPT_m16) &&
742747
Target.get32BitArchVariant().getArch() == llvm::Triple::x86) {
743748
AT = llvm::Triple::x86;

flang/test/Driver/m32-option.f90

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
! Check support of -m32.
2+
! RUN: %flang -target powerpc-ibm-aix -m32 -### - %s 2>&1 | FileCheck -check-prefix=M32 %s
3+
! RUN: %flang -target powerpc64-ibm-aix -m32 -### - %s 2>&1 | FileCheck -check-prefix=M32 %s
4+
! RUN: %flang -target powerpc-ibm-aix -maix32 -### - %s 2>&1 | FileCheck -check-prefix=M32 %s
5+
! RUN: %flang -target powerpc64-ibm-aix -maix32 -### - %s 2>&1 | FileCheck -check-prefix=M32 %s
6+
! RUN: %flang -target powerpc-ibm-aix -maix64 -### - %s 2>&1 | FileCheck -check-prefix=M64 %s
7+
! RUN: %flang -target powerpc64-ibm-aix -maix64 -### - %s 2>&1 | FileCheck -check-prefix=M64 %s
8+
! RUN: not %flang -target powerpc64le-unknown-linux-gnu -m32 -### - %s 2>&1 | FileCheck -check-prefix=M32-ERROR %s
9+
! RUN: not %flang -target powerpc64le-unknown-linux-gnu -maix32 -### - %s 2>&1 | FileCheck -check-prefix=MAIX32-ERROR %s
10+
11+
! M32: "-triple" "powerpc-ibm-aix{{.*}}"
12+
! M64: "-triple" "powerpc64-ibm-aix{{.*}}"
13+
! M32-ERROR: error: unsupported option '-m32' for target 'powerpc64le-unknown-linux-gnu'
14+
! MAIX32-ERROR: error: unsupported option '-maix32' for target 'powerpc64le-unknown-linux-gnu'

0 commit comments

Comments
 (0)