For ports/devel/llvm, I would like to bring the most recent changes
from base-clang.  This affects Mips and PowerPC.  Is this OK?

Mips gets, "Use a distinct trap code with retguard on mips64."
(I use PowerPC and know little about Mips.)

PowerPC gets,
 - Set max atomic size for AtomicExpandPass.
 - For OpenBSD/powerpc64: switch to ELFv2, use _mcount profiling, and
   add our OpenBSD specific defines.
 - Optimize away the frame pointer.

Upstream LLVM already optimizes away the frame pointer on PowerPC, but
doesn't have the other changes.  At least one patch in tools/clang
affects both clang and liblldb, so I bump both REVISION-main and
REVISION-lldb.    --George

Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/llvm/Makefile,v
retrieving revision 1.252
diff -u -p -r1.252 Makefile
--- Makefile    19 May 2020 10:05:47 -0000      1.252
+++ Makefile    13 Jun 2020 03:37:24 -0000
@@ -18,9 +18,9 @@ PKGSPEC-main =        llvm-=${LLVM_V}
 PKGNAME-main = llvm-${LLVM_V}
 PKGNAME-python =       py3-llvm-${LLVM_V}
 PKGNAME-lldb = lldb-${LLVM_V}
-REVISION-main =        13
+REVISION-main =        14
 REVISION-python = 1
-REVISION-lldb =        2
+REVISION-lldb =        3
 
 CATEGORIES =   devel
 
Index: patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_cpp
===================================================================
RCS file: 
/cvs/ports/devel/llvm/patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_cpp,v
retrieving revision 1.1
diff -u -p -r1.1 patch-lib_Target_Mips_MipsReturnProtectorLowering_cpp
--- patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_cpp       7 Jan 
2020 22:59:43 -0000       1.1
+++ patches/patch-lib_Target_Mips_MipsReturnProtectorLowering_cpp       13 Jun 
2020 03:37:24 -0000
@@ -5,7 +5,7 @@ Add retguard for octeon/mips64.
 Index: lib/Target/Mips/MipsReturnProtectorLowering.cpp
 --- lib/Target/Mips/MipsReturnProtectorLowering.cpp.orig
 +++ lib/Target/Mips/MipsReturnProtectorLowering.cpp
-@@ -0,0 +1,272 @@
+@@ -0,0 +1,273 @@
 +//===-- MipsReturnProtectorLowering.cpp --------------------------------===//
 +//
 +//                     The LLVM Compiler Infrastructure
@@ -119,6 +119,7 @@ Index: lib/Target/Mips/MipsReturnProtect
 +  unsigned REG = MF.getFrameInfo().getReturnProtectorRegister();
 +
 +  const GlobalValue *FName = &MF.getFunction();
++  const unsigned TRAPCODE = 0x52;
 +
 +  // Select some scratch registers
 +  unsigned TempReg1 = Mips::T7_64;
@@ -177,7 +178,7 @@ Index: lib/Target/Mips/MipsReturnProtect
 +    BuildMI(MBB, MI, MBBDL, TII->get(Mips::TNE))
 +      .addReg(TempReg1)
 +      .addReg(REG)
-+      .addImm(0);
++      .addImm(TRAPCODE);
 +    // Emit the BAL target symbol from above
 +    BuildMI(MBB, MI, MBBDL, TII->get(Mips::RETGUARD_EMIT_SYMBOL))
 +      .addSym(BALTarget);
@@ -204,7 +205,7 @@ Index: lib/Target/Mips/MipsReturnProtect
 +    BuildMI(MBB, MI, MBBDL, TII->get(Mips::TNE))
 +      .addReg(TempReg1)
 +      .addReg(REG)
-+      .addImm(0);
++      .addImm(TRAPCODE);
 +  }
 +}
 +
Index: patches/patch-lib_Target_PowerPC_PPCISelLowering_cpp
===================================================================
RCS file: 
/cvs/ports/devel/llvm/patches/patch-lib_Target_PowerPC_PPCISelLowering_cpp,v
retrieving revision 1.6
diff -u -p -r1.6 patch-lib_Target_PowerPC_PPCISelLowering_cpp
--- patches/patch-lib_Target_PowerPC_PPCISelLowering_cpp        7 Jul 2019 
14:04:07 -0000       1.6
+++ patches/patch-lib_Target_PowerPC_PPCISelLowering_cpp        13 Jun 2020 
03:37:24 -0000
@@ -1,5 +1,8 @@
 $OpenBSD: patch-lib_Target_PowerPC_PPCISelLowering_cpp,v 1.6 2019/07/07 
14:04:07 jca Exp $
 
+Set max atomic size for PowerPC, so AtomicExpandPass changes some
+8-byte atomic ops into libcalls.
+
 When generating code for OpenBSD/powerpc, avoid unaligned floating-point
 load and store instructions.  The vast majority of PowerPC CPUs that
 OpenBSD runs on don't implement those and will generate an alignment
@@ -10,10 +13,23 @@ compiler generate code that only uses al
 Index: lib/Target/PowerPC/PPCISelLowering.cpp
 --- lib/Target/PowerPC/PPCISelLowering.cpp.orig
 +++ lib/Target/PowerPC/PPCISelLowering.cpp
-@@ -14204,6 +14204,14 @@ bool PPCTargetLowering::allowsMisalignedMemoryAccesses
+@@ -1034,7 +1034,10 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMa
+ 
+   setOperationAction(ISD::READCYCLECOUNTER, MVT::i64, isPPC64 ? Legal : 
Custom);
+ 
+-  if (!isPPC64) {
++  if (isPPC64)
++    setMaxAtomicSizeInBitsSupported(64);
++  else {
++    setMaxAtomicSizeInBitsSupported(32);
+     setOperationAction(ISD::ATOMIC_LOAD,  MVT::i64, Expand);
+     setOperationAction(ISD::ATOMIC_STORE, MVT::i64, Expand);
+   }
+@@ -14203,6 +14206,14 @@ bool PPCTargetLowering::allowsMisalignedMemoryAccesses
+ 
    if (VT == MVT::ppcf128)
      return false;
- 
++
 +  if (Subtarget.isTargetOpenBSD()) {
 +    // Traditional PowerPC does not support unaligned memory access
 +    // for floating-point and the OpenBSD kernel does not emulate
@@ -21,7 +37,6 @@ Index: lib/Target/PowerPC/PPCISelLowerin
 +    if (VT == MVT::f32 || VT == MVT::f64)
 +      return false;
 +  }
-+
+ 
    if (Fast)
      *Fast = true;
- 
Index: patches/patch-lib_Target_PowerPC_PPCTargetMachine_cpp
===================================================================
RCS file: patches/patch-lib_Target_PowerPC_PPCTargetMachine_cpp
diff -N patches/patch-lib_Target_PowerPC_PPCTargetMachine_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-lib_Target_PowerPC_PPCTargetMachine_cpp       13 Jun 2020 
03:37:24 -0000
@@ -0,0 +1,16 @@
+$OpenBSD$
+
+Switch Powerpc64 Big Endian to ELFv2 on OpenBSD.
+
+Index: lib/Target/PowerPC/PPCTargetMachine.cpp
+--- lib/Target/PowerPC/PPCTargetMachine.cpp.orig
++++ lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -199,6 +199,8 @@ static PPCTargetMachine::PPCABI computeTargetABI(const
+   case Triple::ppc64le:
+     return PPCTargetMachine::PPC_ABI_ELFv2;
+   case Triple::ppc64:
++    if (TT.isOSOpenBSD())
++      return PPCTargetMachine::PPC_ABI_ELFv2;
+     return PPCTargetMachine::PPC_ABI_ELFv1;
+   default:
+     return PPCTargetMachine::PPC_ABI_UNKNOWN;
Index: patches/patch-tools_clang_lib_Basic_Targets_OSTargets_h
===================================================================
RCS file: patches/patch-tools_clang_lib_Basic_Targets_OSTargets_h
diff -N patches/patch-tools_clang_lib_Basic_Targets_OSTargets_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-tools_clang_lib_Basic_Targets_OSTargets_h     13 Jun 2020 
03:37:24 -0000
@@ -0,0 +1,15 @@
+$OpenBSD$
+
+Powerpc64 should use the same _mcount profiling as powerpc 32bit.
+
+Index: tools/clang/lib/Basic/Targets/OSTargets.h
+--- tools/clang/lib/Basic/Targets/OSTargets.h.orig
++++ tools/clang/lib/Basic/Targets/OSTargets.h
+@@ -446,6 +446,7 @@ class LLVM_LIBRARY_VISIBILITY OpenBSDTargetInfo : publ
+     case llvm::Triple::mips64:
+     case llvm::Triple::mips64el:
+     case llvm::Triple::ppc:
++    case llvm::Triple::ppc64:
+     case llvm::Triple::sparcv9:
+       this->MCountName = "_mcount";
+       break;
Index: patches/patch-tools_clang_lib_Basic_Targets_cpp
===================================================================
RCS file: patches/patch-tools_clang_lib_Basic_Targets_cpp
diff -N patches/patch-tools_clang_lib_Basic_Targets_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-tools_clang_lib_Basic_Targets_cpp     13 Jun 2020 03:37:24 
-0000
@@ -0,0 +1,25 @@
+$OpenBSD$
+
+Add our OpenBSD specific defines on PowerPC64 targets.
+
+Index: tools/clang/lib/Basic/Targets.cpp
+--- tools/clang/lib/Basic/Targets.cpp.orig
++++ tools/clang/lib/Basic/Targets.cpp
+@@ -349,6 +349,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
+       return new FreeBSDTargetInfo<PPC64TargetInfo>(Triple, Opts);
+     case llvm::Triple::NetBSD:
+       return new NetBSDTargetInfo<PPC64TargetInfo>(Triple, Opts);
++    case llvm::Triple::OpenBSD:
++      return new OpenBSDTargetInfo<PPC64TargetInfo>(Triple, Opts);
+     default:
+       return new PPC64TargetInfo(Triple, Opts);
+     }
+@@ -359,6 +361,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
+       return new LinuxTargetInfo<PPC64TargetInfo>(Triple, Opts);
+     case llvm::Triple::NetBSD:
+       return new NetBSDTargetInfo<PPC64TargetInfo>(Triple, Opts);
++    case llvm::Triple::OpenBSD:
++      return new OpenBSDTargetInfo<PPC64TargetInfo>(Triple, Opts);
+     default:
+       return new PPC64TargetInfo(Triple, Opts);
+     }
Index: patches/patch-tools_clang_lib_Driver_ToolChains_Clang_cpp
===================================================================
RCS file: 
/cvs/ports/devel/llvm/patches/patch-tools_clang_lib_Driver_ToolChains_Clang_cpp,v
retrieving revision 1.12
diff -u -p -r1.12 patch-tools_clang_lib_Driver_ToolChains_Clang_cpp
--- patches/patch-tools_clang_lib_Driver_ToolChains_Clang_cpp   5 Mar 2020 
00:50:00 -0000       1.12
+++ patches/patch-tools_clang_lib_Driver_ToolChains_Clang_cpp   13 Jun 2020 
03:37:24 -0000
@@ -1,5 +1,6 @@
 $OpenBSD: patch-tools_clang_lib_Driver_ToolChains_Clang_cpp,v 1.12 2020/03/05 
00:50:00 gkoehler Exp $
 
+- Optimize away the frame pointer on powerpc.
 - Add -msvr4-struct-return for powerpc.
 - Make LLVM create strict aligned code for OpenBSD/arm64.
 - Disable -fstrict-aliasing per default on OpenBSD.
@@ -34,7 +35,30 @@ $OpenBSD: patch-tools_clang_lib_Driver_T
 Index: tools/clang/lib/Driver/ToolChains/Clang.cpp
 --- tools/clang/lib/Driver/ToolChains/Clang.cpp.orig
 +++ tools/clang/lib/Driver/ToolChains/Clang.cpp
-@@ -3870,6 +3870,19 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -523,8 +523,12 @@ static bool useFramePointerForTargetByDefault(const Ar
+     // XCore never wants frame pointers, regardless of OS.
+     // WebAssembly never wants frame pointers.
+     return false;
++  case llvm::Triple::ppc:
++  case llvm::Triple::ppc64:
++  case llvm::Triple::ppc64le:
+   case llvm::Triple::riscv32:
+   case llvm::Triple::riscv64:
++    // PowerPC's frame pointer is often an extra copy of the stack pointer.
+     return !areOptimizationsEnabled(Args);
+   default:
+     break;
+@@ -542,9 +546,6 @@ static bool useFramePointerForTargetByDefault(const Ar
+     case llvm::Triple::mips64el:
+     case llvm::Triple::mips:
+     case llvm::Triple::mipsel:
+-    case llvm::Triple::ppc:
+-    case llvm::Triple::ppc64:
+-    case llvm::Triple::ppc64le:
+     case llvm::Triple::systemz:
+     case llvm::Triple::x86:
+     case llvm::Triple::x86_64:
+@@ -3870,6 +3871,19 @@ void Clang::ConstructJob(Compilation &C, const JobActi
      CmdArgs.push_back(A->getValue());
    }
  
@@ -54,7 +78,7 @@ Index: tools/clang/lib/Driver/ToolChains
    if (Arg *A = Args.getLastArg(options::OPT_fpcc_struct_return,
                                 options::OPT_freg_struct_return)) {
      if (TC.getArch() != llvm::Triple::x86) {
-@@ -3899,9 +3912,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -3899,9 +3913,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
        OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing;
    // We turn strict aliasing off by default if we're in CL mode, since MSVC
    // doesn't do any TBAA.
@@ -69,7 +93,7 @@ Index: tools/clang/lib/Driver/ToolChains
      CmdArgs.push_back("-relaxed-aliasing");
    if (!Args.hasFlag(options::OPT_fstruct_path_tbaa,
                      options::OPT_fno_struct_path_tbaa))
-@@ -4527,7 +4543,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -4527,7 +4544,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                        options::OPT_fno_strict_overflow)) {
      if (A->getOption().matches(options::OPT_fno_strict_overflow))
        CmdArgs.push_back("-fwrapv");
@@ -79,7 +103,7 @@ Index: tools/clang/lib/Driver/ToolChains
  
    if (Arg *A = Args.getLastArg(options::OPT_freroll_loops,
                                 options::OPT_fno_reroll_loops))
-@@ -4544,9 +4561,46 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -4544,9 +4562,46 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                     false))
      CmdArgs.push_back(Args.MakeArgString("-mspeculative-load-hardening"));
  
@@ -127,7 +151,7 @@ Index: tools/clang/lib/Driver/ToolChains
    // Translate -mstackrealign
    if (Args.hasFlag(options::OPT_mstackrealign, options::OPT_mno_stackrealign,
                     false))
-@@ -5029,6 +5083,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -5029,6 +5084,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                       options::OPT_fno_rewrite_imports, false);
    if (RewriteImports)
      CmdArgs.push_back("-frewrite-imports");

Reply via email to