[flang][AIX] Predefine __64BIT__ and _AIX macros (#138591)
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 28f2f69..238079a 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1615,13 +1615,10 @@ } llvm::Triple targetTriple{llvm::Triple(this->targetOpts.triple)}; - if (targetTriple.isPPC()) { - // '__powerpc__' is a generic macro for any PowerPC cases. e.g. Max integer - // size. - fortranOptions.predefinitions.emplace_back("__powerpc__", "1"); - } if (targetTriple.isOSLinux()) { fortranOptions.predefinitions.emplace_back("__linux__", "1"); + } else if (targetTriple.isOSAIX()) { + fortranOptions.predefinitions.emplace_back("_AIX", "1"); } switch (targetTriple.getArch()) { @@ -1631,6 +1628,16 @@ fortranOptions.predefinitions.emplace_back("__x86_64__", "1"); fortranOptions.predefinitions.emplace_back("__x86_64", "1"); break; + case llvm::Triple::ArchType::ppc: + case llvm::Triple::ArchType::ppc64: + case llvm::Triple::ArchType::ppcle: + case llvm::Triple::ArchType::ppc64le: + // '__powerpc__' is a generic macro for any PowerPC. + fortranOptions.predefinitions.emplace_back("__powerpc__", "1"); + if (targetTriple.isOSAIX() && targetTriple.isArch64Bit()) { + fortranOptions.predefinitions.emplace_back("__64BIT__", "1"); + } + break; } }
diff --git a/flang/test/Driver/predefined-macros-powerpc2.f90 b/flang/test/Driver/predefined-macros-powerpc2.f90 index 6e10235..6d235af 100644 --- a/flang/test/Driver/predefined-macros-powerpc2.f90 +++ b/flang/test/Driver/predefined-macros-powerpc2.f90
@@ -1,13 +1,25 @@ ! Test predefined macro for PowerPC architecture -! RUN: %flang_fc1 -triple ppc64le-unknown-linux -cpp -E %s | FileCheck %s +! RUN: %flang_fc1 -triple ppc64le-unknown-linux -cpp -E %s | FileCheck %s -check-prefix=CHECK-LINUX +! RUN: %flang_fc1 -triple powerpc-unknown-aix -cpp -E %s | FileCheck %s -check-prefix=CHECK-AIX32 +! RUN: %flang_fc1 -triple powerpc64-unknown-aix -cpp -E %s | FileCheck %s -check-prefix=CHECK-AIX64 ! REQUIRES: target=powerpc{{.*}} -! CHECK: integer :: var1 = 1 -! CHECK: integer :: var2 = 1 +! CHECK-LINUX: integer :: var1 = 1 +! CHECK-LINUX: integer :: var2 = 1 +! CHECK-AIX32: integer :: var1 = 1 +! CHECK-AIX32: integer :: var2 = 1 +! CHECK-AIX32: integer :: var3 = __64BIT__ +! CHECK-AIX64: integer :: var1 = 1 +! CHECK-AIX64: integer :: var2 = 1 +! CHECK-AIX64: integer :: var3 = 1 #if defined(__linux__) && defined(__powerpc__) integer :: var1 = __powerpc__ integer :: var2 = __linux__ +#elif defined(_AIX) && defined(__powerpc__) + integer :: var1 = __powerpc__ + integer :: var2 = _AIX + integer :: var3 = __64BIT__ #endif end program