[llvm] r226664 - AArch64: add backend option to reserve x18 (platform register)

Dimitry Andric dimitry at andric.com
Mon Jan 26 13:54:11 PST 2015


Hi Tim and Hans,

Can we please get this revision (and its accompanying clang revision r227062) into the release_36 branch, targeting 3.6.0?

-Dimitry

> On 21 Jan 2015, at 16:43, Tim Northover <tnorthover at apple.com> wrote:
> 
> Author: tnorthover
> Date: Wed Jan 21 09:43:31 2015
> New Revision: 226664
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=226664&view=rev
> Log:
> 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>
> 
> Modified:
>    llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.cpp
>    llvm/trunk/test/CodeGen/AArch64/arm64-platform-reg.ll
> 
> Modified: llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.cpp?rev=226664&r1=226663&r2=226664&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.cpp Wed Jan 21 09:43:31 2015
> @@ -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) {}
> @@ -98,7 +102,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);
>   }
> @@ -125,7 +129,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();
> @@ -387,7 +391,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:
> 
> Modified: llvm/trunk/test/CodeGen/AArch64/arm64-platform-reg.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-platform-reg.ll?rev=226664&r1=226663&r2=226664&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/AArch64/arm64-platform-reg.ll (original)
> +++ llvm/trunk/test/CodeGen/AArch64/arm64-platform-reg.ll Wed Jan 21 09:43:31 2015
> @@ -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
> }
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 194 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150126/8e4bab95/attachment.sig>


More information about the llvm-commits mailing list