Add PPC A2Q core and BG/Q preprocessor definitions
authorHal Finkel <hfinkel@anl.gov>
Fri, 1 Feb 2013 05:53:33 +0000 (05:53 +0000)
committerHal Finkel <hfinkel@anl.gov>
Fri, 1 Feb 2013 05:53:33 +0000 (05:53 +0000)
The a2q core is the variant of the a2 core used on the BG/Q supercomputers.

llvm-svn: 174151

clang/lib/Basic/Targets.cpp
clang/lib/Driver/Tools.cpp
clang/test/Driver/clang-translation.c
clang/test/Preprocessor/init.c

index 4d0a833..4647970 100644 (file)
@@ -661,7 +661,9 @@ public:
     ArchDefine603   = 1 << 4,
     ArchDefine604   = 1 << 5,
     ArchDefinePwr4  = 1 << 6,
-    ArchDefinePwr6  = 1 << 7
+    ArchDefinePwr6  = 1 << 7,
+    ArchDefineA2    = 1 << 8,
+    ArchDefineA2q   = 1 << 9
   } ArchDefineTypes;
 
   virtual bool setCPU(const std::string &Name) {
@@ -686,6 +688,7 @@ public:
       .Case("970", true)
       .Case("g5", true)
       .Case("a2", true)
+      .Case("a2q", true)
       .Case("e500mc", true)
       .Case("e5500", true)
       .Case("pwr6", true)
@@ -894,6 +897,8 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
     .Case("pwr6",  ArchDefinePwr6 | ArchDefinePpcgr | ArchDefinePpcsq)
     .Case("pwr7",  ArchDefineName | ArchDefinePwr6 | ArchDefinePpcgr
                      | ArchDefinePpcsq)
+    .Case("a2",    ArchDefineA2)
+    .Case("a2q",   ArchDefineName | ArchDefineA2 | ArchDefineA2q)
     .Default(ArchDefineNone);
 
   if (defs & ArchDefineName)
@@ -913,7 +918,20 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
   if (defs & ArchDefinePwr6) {
     Builder.defineMacro("_ARCH_PWR5");
     Builder.defineMacro("_ARCH_PWR6");
-  }  
+  }
+  if (defs & ArchDefineA2)
+    Builder.defineMacro("_ARCH_A2");
+  if (defs & ArchDefineA2q) {
+    Builder.defineMacro("_ARCH_A2Q");
+    Builder.defineMacro("_ARCH_QP");
+  }
+
+  if (getTriple().getVendor() == llvm::Triple::BGQ) {
+    Builder.defineMacro("__bg__");
+    Builder.defineMacro("__THW_BLUEGENE__");
+    Builder.defineMacro("__bgq__");
+    Builder.defineMacro("__TOS_BGQ__");
+  }
 }
 
 void PPCTargetInfo::getDefaultFeatures(llvm::StringMap<bool> &Features) const {
index 844367e..18b49e6 100644 (file)
@@ -1053,6 +1053,7 @@ static std::string getPPCTargetCPU(const ArgList &Args) {
       .Case("970", "970")
       .Case("G5", "g5")
       .Case("a2", "a2")
+      .Case("a2q", "a2q")
       .Case("e500mc", "e500mc")
       .Case("e5500", "e5500")
       .Case("power6", "pwr6")
index 3ddb189..7010385 100644 (file)
 // PPCPWR7: "-target-cpu" "pwr7"
 
 // RUN: %clang -target powerpc64-unknown-linux-gnu \
+// RUN: -### -S %s -mcpu=a2q 2>&1 | FileCheck -check-prefix=PPCA2Q %s
+// PPCA2Q: clang
+// PPCA2Q: "-cc1"
+// PPCA2Q: "-target-cpu" "a2q"
+
+// RUN: %clang -target powerpc64-unknown-linux-gnu \
 // RUN: -### -S %s 2>&1 | FileCheck -check-prefix=PPC64NS %s
 // PPC64NS: clang
 // PPC64NS: "-cc1"
index c45067d..73590f7 100644 (file)
 // PPC64:#define __ppc64__ 1
 // PPC64:#define __ppc__ 1
 //
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-none-none -target-cpu a2q -fno-signed-char < /dev/null | FileCheck -check-prefix PPCA2Q %s
+//
+// PPCA2Q:#define _ARCH_A2 1
+// PPCA2Q:#define _ARCH_A2Q 1
+// PPCA2Q:#define _ARCH_PPC 1
+// PPCA2Q:#define _ARCH_PPC64 1
+// PPCA2Q:#define _ARCH_QP 1
+//
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-bgq-linux -fno-signed-char < /dev/null | FileCheck -check-prefix PPCBGQ %s
+//
+// PPCBGQ:#define __THW_BLUEGENE__ 1
+// PPCBGQ:#define __TOS_BGQ__ 1
+// PPCBGQ:#define __bg__ 1
+// PPCBGQ:#define __bgq__ 1
+//
 // RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-unknown-linux-gnu -fno-signed-char < /dev/null | FileCheck -check-prefix PPC64-LINUX %s
 //
 // PPC64-LINUX:#define _ARCH_PPC 1