[clang] 6cee9d0 - [PowerPC] Support powerpcle target in Clang [3/5]

2021-01-02 Thread Brandon Bergren via cfe-commits

Author: Brandon Bergren
Date: 2021-01-02T12:17:58-06:00
New Revision: 6cee9d0cf896d83fa8f87b7f8d67ae2dfdbc1bf9

URL: 
https://github.com/llvm/llvm-project/commit/6cee9d0cf896d83fa8f87b7f8d67ae2dfdbc1bf9
DIFF: 
https://github.com/llvm/llvm-project/commit/6cee9d0cf896d83fa8f87b7f8d67ae2dfdbc1bf9.diff

LOG: [PowerPC] Support powerpcle target in Clang [3/5]

Add powerpcle support to clang.

For FreeBSD, assume a freestanding environment for now, as we only need it in 
the first place to build loader, which runs in the OpenFirmware environment 
instead of the FreeBSD environment.

For Linux, recognize glibc and musl environments to match current usage in Void 
Linux PPC.

Adjust driver to match current binutils behavior regarding machine naming.

Adjust and expand tests.

Reviewed By: MaskRay

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

Added: 


Modified: 
clang/lib/Basic/Targets.cpp
clang/lib/Basic/Targets/OSTargets.h
clang/lib/Basic/Targets/PPC.cpp
clang/lib/Basic/Targets/PPC.h
clang/lib/CodeGen/CGBuiltin.cpp
clang/lib/CodeGen/TargetInfo.cpp
clang/lib/Driver/Driver.cpp
clang/lib/Driver/ToolChain.cpp
clang/lib/Driver/ToolChains/Clang.cpp
clang/lib/Driver/ToolChains/CommonArgs.cpp
clang/lib/Driver/ToolChains/FreeBSD.cpp
clang/lib/Driver/ToolChains/Gnu.cpp
clang/lib/Driver/ToolChains/Linux.cpp
clang/lib/Frontend/CompilerInvocation.cpp
clang/lib/Sema/SemaChecking.cpp
clang/test/CodeGen/altivec.c
clang/test/CodeGen/builtins-ppc-altivec.c
clang/test/CodeGen/ppc32-and-aix-struct-return.c
clang/test/CodeGen/target-data.c
clang/test/Driver/linux-header-search.cpp
clang/test/Driver/ppc-endian.c
clang/test/Driver/ppc-features.cpp

Removed: 




diff  --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 1126b647e37b..e88d90a98395 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -334,6 +334,16 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
   return new PPC32TargetInfo(Triple, Opts);
 }
 
+  case llvm::Triple::ppcle:
+switch (os) {
+case llvm::Triple::Linux:
+  return new LinuxTargetInfo(Triple, Opts);
+case llvm::Triple::FreeBSD:
+  return new FreeBSDTargetInfo(Triple, Opts);
+default:
+  return new PPC32TargetInfo(Triple, Opts);
+}
+
   case llvm::Triple::ppc64:
 if (Triple.isOSDarwin())
   return new DarwinPPC64TargetInfo(Triple, Opts);

diff  --git a/clang/lib/Basic/Targets/OSTargets.h 
b/clang/lib/Basic/Targets/OSTargets.h
index 0d5d6f553093..67fa1a537fea 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -253,6 +253,7 @@ class LLVM_LIBRARY_VISIBILITY FreeBSDTargetInfo : public 
OSTargetInfo {
 case llvm::Triple::mips:
 case llvm::Triple::mipsel:
 case llvm::Triple::ppc:
+case llvm::Triple::ppcle:
 case llvm::Triple::ppc64:
 case llvm::Triple::ppc64le:
   this->MCountName = "_mcount";
@@ -413,6 +414,7 @@ class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public 
OSTargetInfo {
 case llvm::Triple::mips64:
 case llvm::Triple::mips64el:
 case llvm::Triple::ppc:
+case llvm::Triple::ppcle:
 case llvm::Triple::ppc64:
 case llvm::Triple::ppc64le:
   this->MCountName = "_mcount";

diff  --git a/clang/lib/Basic/Targets/PPC.cpp b/clang/lib/Basic/Targets/PPC.cpp
index a6997324acf9..2be7555102f8 100644
--- a/clang/lib/Basic/Targets/PPC.cpp
+++ b/clang/lib/Basic/Targets/PPC.cpp
@@ -92,7 +92,8 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
   }
 
   // Target properties.
-  if (getTriple().getArch() == llvm::Triple::ppc64le) {
+  if (getTriple().getArch() == llvm::Triple::ppc64le ||
+  getTriple().getArch() == llvm::Triple::ppcle) {
 Builder.defineMacro("_LITTLE_ENDIAN");
   } else {
 if (!getTriple().isOSNetBSD() &&

diff  --git a/clang/lib/Basic/Targets/PPC.h b/clang/lib/Basic/Targets/PPC.h
index a4677cd067f7..56c8f33ef221 100644
--- a/clang/lib/Basic/Targets/PPC.h
+++ b/clang/lib/Basic/Targets/PPC.h
@@ -355,6 +355,8 @@ class LLVM_LIBRARY_VISIBILITY PPC32TargetInfo : public 
PPCTargetInfo {
   : PPCTargetInfo(Triple, Opts) {
 if (Triple.isOSAIX())
   resetDataLayout("E-m:a-p:32:32-i64:64-n32");
+else if (Triple.getArch() == llvm::Triple::ppcle)
+  resetDataLayout("e-m:e-p:32:32-i64:64-n32");
 else
   resetDataLayout("E-m:e-p:32:32-i64:64-n32");
 

diff  --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 6e4c31be84c1..6e98af407a9a 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -5041,6 +5041,7 @@ static Value *EmitTargetArchBuiltinExpr(CodeGenFunction 
*CGF,
   case llvm::Triple::x86_64:
 return CGF->EmitX86BuiltinExpr(BuiltinID, E);
   case llvm::Triple::ppc:
+  case llvm::Triple::ppcle:
   case llvm::Triple::ppc64:

[clang] 2288319 - [PowerPC] Enable OpenMP for powerpcle target. [5/5]

2021-01-02 Thread Brandon Bergren via cfe-commits

Author: Brandon Bergren
Date: 2021-01-02T12:18:07-06:00
New Revision: 2288319733cd5f525bf7e24dece08bfcf9d0ff9e

URL: 
https://github.com/llvm/llvm-project/commit/2288319733cd5f525bf7e24dece08bfcf9d0ff9e
DIFF: 
https://github.com/llvm/llvm-project/commit/2288319733cd5f525bf7e24dece08bfcf9d0ff9e.diff

LOG: [PowerPC] Enable OpenMP for powerpcle target. [5/5]

Enable OpenMP for powerpcle to match the rest of powerpc*.

Update tests.

Reviewed By: MaskRay

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

Added: 


Modified: 
clang/test/Driver/ppc-features.cpp
llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
llvm/lib/Frontend/OpenMP/OMPContext.cpp

Removed: 




diff  --git a/clang/test/Driver/ppc-features.cpp 
b/clang/test/Driver/ppc-features.cpp
index df0b6c6ddc13..05d71b95dba7 100644
--- a/clang/test/Driver/ppc-features.cpp
+++ b/clang/test/Driver/ppc-features.cpp
@@ -167,6 +167,7 @@
 
 // OpenMP features
 // RUN: %clang -target powerpc-unknown-linux-gnu %s -### -fopenmp=libomp -o 
%t.o 2>&1 | FileCheck -check-prefix=CHECK_OPENMP_TLS %s
+// RUN: %clang -target powerpcle-unknown-linux-gnu %s -### -fopenmp=libomp -o 
%t.o 2>&1 | FileCheck -check-prefix=CHECK_OPENMP_TLS %s
 // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -fopenmp=libomp -o 
%t.o 2>&1 | FileCheck -check-prefix=CHECK_OPENMP_TLS %s
 // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -fopenmp=libomp 
-o %t.o 2>&1 | FileCheck -check-prefix=CHECK_OPENMP_TLS %s
 // CHECK_OPENMP_TLS-NOT: "-fnoopenmp-use-tls"

diff  --git a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def 
b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
index 6d0db8f5f57f..0cb29b245c97 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
@@ -1033,6 +1033,7 @@ __OMP_TRAIT_PROPERTY(device, arch, aarch64)
 __OMP_TRAIT_PROPERTY(device, arch, aarch64_be)
 __OMP_TRAIT_PROPERTY(device, arch, aarch64_32)
 __OMP_TRAIT_PROPERTY(device, arch, ppc)
+__OMP_TRAIT_PROPERTY(device, arch, ppcle)
 __OMP_TRAIT_PROPERTY(device, arch, ppc64)
 __OMP_TRAIT_PROPERTY(device, arch, ppc64le)
 __OMP_TRAIT_PROPERTY(device, arch, x86)

diff  --git a/llvm/lib/Frontend/OpenMP/OMPContext.cpp 
b/llvm/lib/Frontend/OpenMP/OMPContext.cpp
index 56a6e2b08bd9..e252c964e647 100644
--- a/llvm/lib/Frontend/OpenMP/OMPContext.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPContext.cpp
@@ -40,6 +40,7 @@ OMPContext::OMPContext(bool IsDeviceCompilation, Triple 
TargetTriple) {
   case Triple::mips64:
   case Triple::mips64el:
   case Triple::ppc:
+  case Triple::ppcle:
   case Triple::ppc64:
   case Triple::ppc64le:
   case Triple::x86:



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 4c77a0f - [PowerPC] NFC: Apply minor clang-format fix

2021-01-02 Thread Brandon Bergren via cfe-commits

Author: Brandon Bergren
Date: 2021-01-02T12:21:28-06:00
New Revision: 4c77a0f1ce6f950805f567ff6505f7c18e62e288

URL: 
https://github.com/llvm/llvm-project/commit/4c77a0f1ce6f950805f567ff6505f7c18e62e288
DIFF: 
https://github.com/llvm/llvm-project/commit/4c77a0f1ce6f950805f567ff6505f7c18e62e288.diff

LOG: [PowerPC] NFC: Apply minor clang-format fix

Added: 


Modified: 
clang/lib/Driver/ToolChains/Linux.cpp

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/Linux.cpp 
b/clang/lib/Driver/ToolChains/Linux.cpp
index 74d4c245aa74..9663a7390ada 100644
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -198,8 +198,7 @@ static StringRef getOSLibDir(const llvm::Triple &Triple, 
const ArgList &Args) {
   // FIXME: This is a bit of a hack. We should really unify this code for
   // reasoning about oslibdir spellings with the lib dir spellings in the
   // GCCInstallationDetector, but that is a more significant refactoring.
-  if (Triple.getArch() == llvm::Triple::x86 ||
-  Triple.isPPC32() ||
+  if (Triple.getArch() == llvm::Triple::x86 || Triple.isPPC32() ||
   Triple.getArch() == llvm::Triple::sparc)
 return "lib32";
 



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits