Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Jan 2015 21:17:15 +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: r277774 - head/contrib/llvm/lib/Target/AArch64
Message-ID:  <201501262117.t0QLHF14072352@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Mon Jan 26 21:17:14 2015
New Revision: 277774
URL: https://svnweb.freebsd.org/changeset/base/277774

Log:
  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>
  
  Requested by:	andrew

Modified:
  head/contrib/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp

Modified: head/contrib/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp
==============================================================================
--- head/contrib/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp	Mon Jan 26 19:42:39 2015	(r277773)
+++ head/contrib/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp	Mon Jan 26 21:17:14 2015	(r277774)
@@ -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(con
     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(
     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::getRegPres
   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:



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