svn commit: r277774 - head/contrib/llvm/lib/Target/AArch64
Dimitry Andric
dim at FreeBSD.org
Mon Jan 26 21:17:15 UTC 2015
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 at 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:
More information about the svn-src-all
mailing list