[flang-commits] [flang] [flang][AIX] Predefine __64BIT__ and _AIX macros (PR #138591)
Kelvin Li via flang-commits
flang-commits at lists.llvm.org
Mon May 5 14:35:53 PDT 2025
https://github.com/kkwli created https://github.com/llvm/llvm-project/pull/138591
None
>From c6a69d92f960923b3662ed0b080314f2e62c6458 Mon Sep 17 00:00:00 2001
From: Kelvin Li <kli at ca.ibm.com>
Date: Mon, 5 May 2025 17:33:31 -0400
Subject: [PATCH] [flang][AIX] Predefine __64BIT__ and _AIX macros
---
flang/lib/Frontend/CompilerInvocation.cpp | 17 ++++++++++++-----
.../test/Driver/predefined-macros-powerpc2.f90 | 18 +++++++++++++++---
2 files changed, 27 insertions(+), 8 deletions(-)
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
More information about the flang-commits
mailing list