Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Feb 2015 20:05:53 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r278109 - head/contrib/llvm/patches
Message-ID:  <201502022005.t12K5reJ060429@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Mon Feb  2 20:05:52 2015
New Revision: 278109
URL: https://svnweb.freebsd.org/changeset/base/278109

Log:
  Belatedly add the clang patch corresponding to r277423.

Added:
  head/contrib/llvm/patches/patch-29-clang-add-mips-triples.diff
  head/contrib/llvm/patches/patch-30-llvm-r226664-aarch64-x18.diff
     - copied unchanged from r278063, head/contrib/llvm/patches/patch-29-llvm-r226664-aarch64-x18.diff
  head/contrib/llvm/patches/patch-31-clang-r227062-fixes-x18.diff
     - copied unchanged from r278063, head/contrib/llvm/patches/patch-30-clang-r227062-fixes-x18.diff
Deleted:
  head/contrib/llvm/patches/patch-29-llvm-r226664-aarch64-x18.diff
  head/contrib/llvm/patches/patch-30-clang-r227062-fixes-x18.diff

Added: head/contrib/llvm/patches/patch-29-clang-add-mips-triples.diff
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/contrib/llvm/patches/patch-29-clang-add-mips-triples.diff	Mon Feb  2 20:05:52 2015	(r278109)
@@ -0,0 +1,33 @@
+Allow clang to be built for mips/mips64 backend types by adding our mips
+triple ids
+
+This only allows testing and does not change the defaults for mips/mips64.
+They still build/use gcc by default.
+
+Differential Revision:	https://reviews.freebsd.org/D1190
+Reviewed by:	dim
+
+Introduced here: http://svnweb.freebsd.org/changeset/base/277423
+
+Index: tools/clang/lib/Driver/Tools.cpp
+===================================================================
+--- tools/clang/lib/Driver/Tools.cpp
++++ tools/clang/lib/Driver/Tools.cpp
+@@ -6592,6 +6592,17 @@ void freebsd::Link::ConstructJob(Compilation &C, c
+     CmdArgs.push_back("elf32ppc_fbsd");
+   }
+ 
++  if (Arg *A = Args.getLastArg(options::OPT_G)) {
++    if (ToolChain.getArch() == llvm::Triple::mips ||
++      ToolChain.getArch() == llvm::Triple::mipsel ||
++      ToolChain.getArch() == llvm::Triple::mips64 ||
++      ToolChain.getArch() == llvm::Triple::mips64el) {
++      StringRef v = A->getValue();
++      CmdArgs.push_back(Args.MakeArgString("-G" + v));
++      A->claim();
++    }
++  }
++
+   if (Output.isFilename()) {
+     CmdArgs.push_back("-o");
+     CmdArgs.push_back(Output.getFilename());

Copied: head/contrib/llvm/patches/patch-30-llvm-r226664-aarch64-x18.diff (from r278063, head/contrib/llvm/patches/patch-29-llvm-r226664-aarch64-x18.diff)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/contrib/llvm/patches/patch-30-llvm-r226664-aarch64-x18.diff	Mon Feb  2 20:05:52 2015	(r278109, copy of r278063, head/contrib/llvm/patches/patch-29-llvm-r226664-aarch64-x18.diff)
@@ -0,0 +1,83 @@
+Pull in r226664 from upstream llvm trunk (by Tim Northover):
+
+  AArch64: add backend option to reserve x18 (platform register)
+
+  AAPCS64 says that it's up to the platform to specify whether x18 is
+  reserved, and a first step on that way is to add a flag controlling
+  it.
+
+  From: Andrew Turner <andrew@fubar.geek.nz>
+
+Introduced here: http://svnweb.freebsd.org/changeset/base/277774
+
+Index: lib/Target/AArch64/AArch64RegisterInfo.cpp
+===================================================================
+--- lib/Target/AArch64/AArch64RegisterInfo.cpp
++++ lib/Target/AArch64/AArch64RegisterInfo.cpp
+@@ -33,6 +33,10 @@ using namespace llvm;
+ #define GET_REGINFO_TARGET_DESC
+ #include "AArch64GenRegisterInfo.inc"
+ 
++static cl::opt<bool>
++ReserveX18("aarch64-reserve-x18", cl::Hidden,
++          cl::desc("Reserve X18, making it unavailable as GPR"));
++
+ AArch64RegisterInfo::AArch64RegisterInfo(const AArch64InstrInfo *tii,
+                                          const AArch64Subtarget *sti)
+     : AArch64GenRegisterInfo(AArch64::LR), TII(tii), STI(sti) {}
+@@ -90,7 +94,7 @@ AArch64RegisterInfo::getReservedRegs(const Machine
+     Reserved.set(AArch64::W29);
+   }
+ 
+-  if (STI->isTargetDarwin()) {
++  if (STI->isTargetDarwin() || ReserveX18) {
+     Reserved.set(AArch64::X18); // Platform register
+     Reserved.set(AArch64::W18);
+   }
+@@ -117,7 +121,7 @@ bool AArch64RegisterInfo::isReservedReg(const Mach
+     return true;
+   case AArch64::X18:
+   case AArch64::W18:
+-    return STI->isTargetDarwin();
++    return STI->isTargetDarwin() || ReserveX18;
+   case AArch64::FP:
+   case AArch64::W29:
+     return TFI->hasFP(MF) || STI->isTargetDarwin();
+@@ -379,7 +383,7 @@ unsigned AArch64RegisterInfo::getRegPressureLimit(
+   case AArch64::GPR64commonRegClassID:
+     return 32 - 1                                      // XZR/SP
+            - (TFI->hasFP(MF) || STI->isTargetDarwin()) // FP
+-           - STI->isTargetDarwin() // X18 reserved as platform register
++           - (STI->isTargetDarwin() || ReserveX18) // X18 reserved as platform register
+            - hasBasePointer(MF);   // X19
+   case AArch64::FPR8RegClassID:
+   case AArch64::FPR16RegClassID:
+Index: test/CodeGen/AArch64/arm64-platform-reg.ll
+===================================================================
+--- test/CodeGen/AArch64/arm64-platform-reg.ll
++++ test/CodeGen/AArch64/arm64-platform-reg.ll
+@@ -1,4 +1,5 @@
+-; RUN: llc -mtriple=arm64-apple-ios -o - %s | FileCheck %s --check-prefix=CHECK-DARWIN
++; RUN: llc -mtriple=arm64-apple-ios -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE-X18
++; RUN: llc -mtriple=arm64-freebsd-gnu -aarch64-reserve-x18 -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE-X18
+ ; RUN: llc -mtriple=arm64-linux-gnu -o - %s | FileCheck %s
+ 
+ ; x18 is reserved as a platform register on Darwin but not on other
+@@ -16,11 +17,11 @@ define void @keep_live() {
+ ; CHECK: ldr x18
+ ; CHECK: str x18
+ 
+-; CHECK-DARWIN-NOT: ldr fp
+-; CHECK-DARWIN-NOT: ldr x18
+-; CHECK-DARWIN: Spill
+-; CHECK-DARWIN-NOT: ldr fp
+-; CHECK-DARWIN-NOT: ldr x18
+-; CHECK-DARWIN: ret
++; CHECK-RESERVE-X18-NOT: ldr fp
++; CHECK-RESERVE-X18-NOT: ldr x18
++; CHECK-RESERVE-X18: Spill
++; CHECK-RESERVE-X18-NOT: ldr fp
++; CHECK-RESERVE-X18-NOT: ldr x18
++; CHECK-RESERVE-X18: ret
+   ret void
+ }

Copied: head/contrib/llvm/patches/patch-31-clang-r227062-fixes-x18.diff (from r278063, head/contrib/llvm/patches/patch-30-clang-r227062-fixes-x18.diff)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/contrib/llvm/patches/patch-31-clang-r227062-fixes-x18.diff	Mon Feb  2 20:05:52 2015	(r278109, copy of r278063, head/contrib/llvm/patches/patch-30-clang-r227062-fixes-x18.diff)
@@ -0,0 +1,54 @@
+Pull in r227062 from upstream clang trunk (by Renato Golin):
+
+  Allows Clang to use LLVM's fixes-x18 option
+
+  This patch allows clang to have llvm reserve the x18
+  platform register on AArch64. FreeBSD will use this in the kernel for
+  per-cpu data but has no need to reserve this register in userland so
+  will need this flag to reserve it.
+
+  This uses llvm r226664 to allow this register to be reserved.
+
+  Patch by Andrew Turner.
+
+Introduced here: http://svnweb.freebsd.org/changeset/base/277775
+
+Index: tools/clang/include/clang/Driver/Options.td
+===================================================================
+--- tools/clang/include/clang/Driver/Options.td
++++ tools/clang/include/clang/Driver/Options.td
+@@ -1141,6 +1141,9 @@ def mno_long_calls : Flag<["-"], "mno-long-calls">
+ def mgeneral_regs_only : Flag<["-"], "mgeneral-regs-only">, Group<m_aarch64_Features_Group>,
+   HelpText<"Generate code which only uses the general purpose registers (AArch64 only)">;
+ 
++def ffixed_x18 : Flag<["-"], "ffixed-x18">, Group<m_aarch64_Features_Group>,
++  HelpText<"Reserve the x18 register (AArch64 only)">;
++
+ def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
+ def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
+ def mfprnd : Flag<["-"], "mfprnd">, Group<m_ppc_Features_Group>;
+Index: tools/clang/lib/Driver/Tools.cpp
+===================================================================
+--- tools/clang/lib/Driver/Tools.cpp
++++ tools/clang/lib/Driver/Tools.cpp
+@@ -887,6 +887,11 @@ void Clang::AddAArch64TargetArgs(const ArgList &Ar
+     if (A->getOption().matches(options::OPT_mno_global_merge))
+       CmdArgs.push_back("-mno-global-merge");
+   }
++
++  if (Args.hasArg(options::OPT_ffixed_x18)) {
++    CmdArgs.push_back("-backend-option");
++    CmdArgs.push_back("-aarch64-reserve-x18");
++  }
+ }
+ 
+ // Get CPU and ABI names. They are not independent
+Index: tools/clang/test/Driver/aarch64-fixed-x18.c
+===================================================================
+--- tools/clang/test/Driver/aarch64-fixed-x18.c
++++ tools/clang/test/Driver/aarch64-fixed-x18.c
+@@ -0,0 +1,4 @@
++// RUN: %clang -target aarch64-none-gnu -ffixed-x18 -### %s 2> %t
++// RUN: FileCheck --check-prefix=CHECK-FIXED-X18 < %t %s
++
++// CHECK-FIXED-X18: "-backend-option" "-aarch64-reserve-x18"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201502022005.t12K5reJ060429>