diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 6f87a18d69c3d..c3e6471fa9a0f 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -1612,13 +1612,10 @@ void CompilerInvocation::setDefaultPredefinitions() { } 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()) { @@ -1628,6 +1625,16 @@ void CompilerInvocation::setDefaultPredefinitions() { 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 6e10235e21f86..6d235afcf8c3b 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