[OpenMP][NVPTX] Use appropriate _CALL_ELF macro when offloading
authorGheorghe-Teodor Bercea <gheorghe-teod.bercea@ibm.com>
Mon, 27 Aug 2018 20:16:20 +0000 (20:16 +0000)
committerGheorghe-Teodor Bercea <gheorghe-teod.bercea@ibm.com>
Mon, 27 Aug 2018 20:16:20 +0000 (20:16 +0000)
Summary: When offloading to a device and using the powerpc64le version of the auxiliary triple, the _CALL_ELF macro is not set correctly to 2 resulting in the attempt to include a header that does not exist. This patch fixes this problem.

Reviewers: Hahnfeld, ABataev, caomhin

Reviewed By: Hahnfeld

Subscribers: guansong, cfe-commits

Differential Revision: https://reviews.llvm.org/D51312

llvm-svn: 340772

clang/lib/Frontend/InitPreprocessor.cpp
clang/test/Preprocessor/aux-triple.c

index 0519255..01a74d1 100644 (file)
@@ -1106,14 +1106,19 @@ static void InitializePredefinedAuxMacros(const TargetInfo &AuxTI,
   auto AuxTriple = AuxTI.getTriple();
 
   // Define basic target macros needed by at least bits/wordsize.h and
-  // bits/mathinline.h
+  // bits/mathinline.h.
+  // On PowerPC, explicitely set _CALL_ELF macro needed for gnu/stubs.h.
   switch (AuxTriple.getArch()) {
   case llvm::Triple::x86_64:
     Builder.defineMacro("__x86_64__");
     break;
   case llvm::Triple::ppc64:
+    Builder.defineMacro("__powerpc64__");
+    Builder.defineMacro("_CALL_ELF", "1");
+    break;
   case llvm::Triple::ppc64le:
     Builder.defineMacro("__powerpc64__");
+    Builder.defineMacro("_CALL_ELF", "2");
     break;
   default:
     break;
index 0211a15..a753d23 100644 (file)
@@ -14,7 +14,7 @@
 // RUN: %clang_cc1 -x cuda -E -dM -ffreestanding < /dev/null \
 // RUN:     -triple nvptx64-none-none -aux-triple powerpc64le-unknown-linux-gnu \
 // RUN:   | FileCheck -match-full-lines %s \
-// RUN:     -check-prefixes NVPTX64,PPC64,LINUX,LINUX-CPP
+// RUN:     -check-prefixes NVPTX64,PPC64LE,LINUX,LINUX-CPP
 // RUN: %clang_cc1 -x cuda -E -dM -ffreestanding < /dev/null \
 // RUN:     -triple nvptx64-none-none -aux-triple x86_64-unknown-linux-gnu \
 // RUN:   | FileCheck -match-full-lines %s \
@@ -24,7 +24,7 @@
 // RUN: %clang_cc1 -E -dM -ffreestanding < /dev/null \
 // RUN:     -fopenmp -fopenmp-is-device -triple nvptx64-none-none \
 // RUN:     -aux-triple powerpc64le-unknown-linux-gnu \
-// RUN:   | FileCheck -match-full-lines -check-prefixes NVPTX64,PPC64,LINUX %s
+// RUN:   | FileCheck -match-full-lines -check-prefixes NVPTX64,PPC64LE,LINUX %s
 // RUN: %clang_cc1 -E -dM -ffreestanding < /dev/null \
 // RUN:     -fopenmp -fopenmp-is-device -triple nvptx64-none-none \
 // RUN:     -aux-triple x86_64-unknown-linux-gnu \
 // RUN:     -fopenmp -fopenmp-is-device -triple nvptx64-none-none \
 // RUN:     -aux-triple powerpc64le-unknown-linux-gnu \
 // RUN:   | FileCheck -match-full-lines %s \
-// RUN:     -check-prefixes NVPTX64,PPC64,LINUX,LINUX-CPP
+// RUN:     -check-prefixes NVPTX64,PPC64LE,LINUX,LINUX-CPP
 // RUN: %clang_cc1 -x c++ -E -dM -ffreestanding < /dev/null \
 // RUN:     -fopenmp -fopenmp-is-device -triple nvptx64-none-none \
 // RUN:     -aux-triple x86_64-unknown-linux-gnu \
 // RUN:   | FileCheck -match-full-lines %s \
 // RUN:     -check-prefixes NVPTX64,X86_64,LINUX,LINUX-CPP
 
+// PPC64LE:#define _CALL_ELF 2
+
 // NONE-NOT:#define _GNU_SOURCE
 // LINUX-CPP:#define _GNU_SOURCE 1
 
@@ -56,7 +58,7 @@
 // LINUX:#define __linux__ 1
 
 // NONE-NOT:#define __powerpc64__
-// PPC64:#define __powerpc64__ 1
+// PPC64LE:#define __powerpc64__ 1
 
 // NONE-NOT:#define __x86_64__
 // X86_64:#define __x86_64__ 1