[llvm] r175911 - x86_64: designate most general purpose and SSE registers as callee save under coldcc

Anna Zaks ganna at apple.com
Fri Feb 22 11:51:03 PST 2013


Peter,

The new test is failing on one of our builders:

http://lab.llvm.org:8011/console

******************** TEST 'LLVM :: CodeGen/X86/coldcc64.ll' FAILED ********************
Script:
--
./clang-build/Release+Asserts/bin/llc < ./llvm/test/CodeGen/X86/coldcc64.ll | ./clang-build/Release+Asserts/bin/FileCheck ./llvm/test/CodeGen/X86/coldcc64.ll
--
Exit Code: 1
Command Output (stderr):
--
./llvm/test/CodeGen/X86/coldcc64.ll:20:10: error: expected string not found in input
; CHECK: vmovaps %xmm15
         ^
<stdin>:49:1: note: scanning from here
.Ltmp28:
^
<stdin>:83:2: note: possible intended match here
 movaps %xmm15, -40(%rsp) # 16-byte Spill
 ^
--
On Feb 22, 2013, at 11:19 AM, Peter Collingbourne <peter at pcc.me.uk> wrote:

> Author: pcc
> Date: Fri Feb 22 13:19:44 2013
> New Revision: 175911
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=175911&view=rev
> Log:
> x86_64: designate most general purpose and SSE registers as callee save under coldcc
> 
> Added:
>    llvm/trunk/test/CodeGen/X86/coldcc64.ll
> Modified:
>    llvm/trunk/lib/Target/X86/X86CallingConv.td
>    llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
> 
> Modified: llvm/trunk/lib/Target/X86/X86CallingConv.td
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CallingConv.td?rev=175911&r1=175910&r2=175911&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86CallingConv.td (original)
> +++ llvm/trunk/lib/Target/X86/X86CallingConv.td Fri Feb 22 13:19:44 2013
> @@ -519,6 +519,9 @@ def CSR_64EHRet : CalleeSavedRegs<(add R
> def CSR_Win64 : CalleeSavedRegs<(add RBX, RBP, RDI, RSI, R12, R13, R14, R15,
>                                      (sequence "XMM%u", 6, 15))>;
> 
> +def CSR_MostRegs_64 : CalleeSavedRegs<(add RBX, RCX, RDX, RSI, RDI, R8, R9, R10,
> +                                           R11, R12, R13, R14, R15, RBP,
> +                                           (sequence "XMM%u", 0, 15))>;
> 
> // Standard C + YMM6-15
> def CSR_Win64_Intel_OCL_BI_AVX : CalleeSavedRegs<(add RBX, RBP, RDI, RSI, R12,
> 
> Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=175911&r1=175910&r2=175911&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Fri Feb 22 13:19:44 2013
> @@ -235,38 +235,40 @@ X86RegisterInfo::getRegPressureLimit(con
> 
> const uint16_t *
> X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
> -  bool callsEHReturn = false;
> -  bool ghcCall = false;
> -  bool oclBiCall = false;
> -  bool hipeCall = false;
> -  bool HasAVX = TM.getSubtarget<X86Subtarget>().hasAVX();
> -
> -  if (MF) {
> -    callsEHReturn = MF->getMMI().callsEHReturn();
> -    const Function *F = MF->getFunction();
> -    ghcCall = (F ? F->getCallingConv() == CallingConv::GHC : false);
> -    oclBiCall = (F ? F->getCallingConv() == CallingConv::Intel_OCL_BI : false);
> -    hipeCall = (F ? F->getCallingConv() == CallingConv::HiPE : false);
> -  }
> -
> -  if (ghcCall || hipeCall)
> +  switch (MF->getFunction()->getCallingConv()) {
> +  case CallingConv::GHC:
> +  case CallingConv::HiPE:
>     return CSR_NoRegs_SaveList;
> -  if (oclBiCall) {
> +
> +  case CallingConv::Intel_OCL_BI: {
> +    bool HasAVX = TM.getSubtarget<X86Subtarget>().hasAVX();
>     if (HasAVX && IsWin64)
> -        return CSR_Win64_Intel_OCL_BI_AVX_SaveList;
> +      return CSR_Win64_Intel_OCL_BI_AVX_SaveList;
>     if (HasAVX && Is64Bit)
> -        return CSR_64_Intel_OCL_BI_AVX_SaveList;
> +      return CSR_64_Intel_OCL_BI_AVX_SaveList;
>     if (!HasAVX && !IsWin64 && Is64Bit)
> -        return CSR_64_Intel_OCL_BI_SaveList;
> +      return CSR_64_Intel_OCL_BI_SaveList;
> +    break;
>   }
> +
> +  case CallingConv::Cold:
> +    if (Is64Bit)
> +      return CSR_MostRegs_64_SaveList;
> +    break;
> +
> +  default:
> +    break;
> +  }
> +
> +  bool CallsEHReturn = MF->getMMI().callsEHReturn();
>   if (Is64Bit) {
>     if (IsWin64)
>       return CSR_Win64_SaveList;
> -    if (callsEHReturn)
> +    if (CallsEHReturn)
>       return CSR_64EHRet_SaveList;
>     return CSR_64_SaveList;
>   }
> -  if (callsEHReturn)
> +  if (CallsEHReturn)
>     return CSR_32EHRet_SaveList;
>   return CSR_32_SaveList;
> }
> @@ -287,6 +289,8 @@ X86RegisterInfo::getCallPreservedMask(Ca
>     return CSR_NoRegs_RegMask;
>   if (!Is64Bit)
>     return CSR_32_RegMask;
> +  if (CC == CallingConv::Cold)
> +    return CSR_MostRegs_64_RegMask;
>   if (IsWin64)
>     return CSR_Win64_RegMask;
>   return CSR_64_RegMask;
> 
> Added: llvm/trunk/test/CodeGen/X86/coldcc64.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/coldcc64.ll?rev=175911&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/coldcc64.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/coldcc64.ll Fri Feb 22 13:19:44 2013
> @@ -0,0 +1,24 @@
> +; RUN: llc < %s | FileCheck %s
> +
> +target triple = "x86_64-linux-gnu"
> +
> +define coldcc void @foo() {
> +; CHECK: pushq %rbp
> +; CHECK: pushq %r15
> +; CHECK: pushq %r14
> +; CHECK: pushq %r13
> +; CHECK: pushq %r12
> +; CHECK: pushq %r11
> +; CHECK: pushq %r10
> +; CHECK: pushq %r9
> +; CHECK: pushq %r8
> +; CHECK: pushq %rdi
> +; CHECK: pushq %rsi
> +; CHECK: pushq %rdx
> +; CHECK: pushq %rcx
> +; CHECK: pushq %rbx
> +; CHECK: vmovaps %xmm15
> +; CHECK: vmovaps %xmm0
> +  call void asm sideeffect "", "~{xmm15},~{xmm0},~{rbp},~{r15},~{r14},~{r13},~{r12},~{r11},~{r10},~{r9},~{r8},~{rdi},~{rsi},~{rdx},~{rcx},~{rbx}"()
> +  ret void
> +}
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list