From owner-svn-src-head@FreeBSD.ORG Mon Feb 2 20:05:54 2015 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 59A771C7; Mon, 2 Feb 2015 20:05:54 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 44C57BC3; Mon, 2 Feb 2015 20:05:54 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t12K5s9l060432; Mon, 2 Feb 2015 20:05:54 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t12K5reJ060429; Mon, 2 Feb 2015 20:05:53 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201502022005.t12K5reJ060429@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Mon, 2 Feb 2015 20:05:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r278109 - head/contrib/llvm/patches X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Feb 2015 20:05:54 -0000 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 + +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 ++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, + HelpText<"Generate code which only uses the general purpose registers (AArch64 only)">; + ++def ffixed_x18 : Flag<["-"], "ffixed-x18">, Group, ++ HelpText<"Reserve the x18 register (AArch64 only)">; ++ + def mvsx : Flag<["-"], "mvsx">, Group; + def mno_vsx : Flag<["-"], "mno-vsx">, Group; + def mfprnd : Flag<["-"], "mfprnd">, 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"