[llvm-commits] [llvm] r117119 - in /llvm/trunk/lib/Target/ARM: ARMCallingConv.td ARMISelLowering.cpp

Nick Lewycky nlewycky at google.com
Fri Oct 22 11:39:02 PDT 2010


On 22 October 2010 11:23, Evan Cheng <evan.cheng at apple.com> wrote:

> Author: evancheng
> Date: Fri Oct 22 13:23:05 2010
> New Revision: 117119
>
> URL: http://llvm.org/viewvc/llvm-project?rev=117119&view=rev
> Log:
> Add fastcc cc: pass and return VFP / NEON values in registers. Controlled
> by -arm-fastcc for now.
>

Hi Evan,

This is causing a few new warnings:

llvm/lib/Target/ARM/ARMGenCallingConv.inc.h:289: error: 'bool
FastCC_ARM_APCS(unsigned int, llvm::EVT, llvm::EVT,
llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)' defined
but not used [-Wunused-function]
llvm/lib/Target/ARM/ARMGenCallingConv.inc.h:538: error: 'bool
RetFastCC_ARM_APCS(unsigned int, llvm::EVT, llvm::EVT,
llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)' defined
but not used [-Wunused-function]
llvm/lib/Target/ARM/ARMGenCallingConv.inc.h:289: error: 'bool
FastCC_ARM_APCS(unsigned int, llvm::EVT, llvm::EVT,
llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)' defined
but not used [-Wunused-function]
llvm/lib/Target/ARM/ARMGenCallingConv.inc.h:538: error: 'bool
RetFastCC_ARM_APCS(unsigned int, llvm::EVT, llvm::EVT,
llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)' defined
but not used [-Wunused-function]

I realize that the code to make use of them is coming soon, but is there
something you can do about these in the mean time? We build with -Werror.

Nick

Modified:
>    llvm/trunk/lib/Target/ARM/ARMCallingConv.td
>    llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
>
> Modified: llvm/trunk/lib/Target/ARM/ARMCallingConv.td
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMCallingConv.td?rev=117119&r1=117118&r2=117119&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMCallingConv.td (original)
> +++ llvm/trunk/lib/Target/ARM/ARMCallingConv.td Fri Oct 22 13:23:05 2010
> @@ -53,6 +53,34 @@
>  ]>;
>
>
>  //===----------------------------------------------------------------------===//
> +// ARM APCS Calling Convention for FastCC (when VFP2 or later is
> available)
>
> +//===----------------------------------------------------------------------===//
> +def FastCC_ARM_APCS : CallingConv<[
> +  // Handle all vector types as either f64 or v2f64.
> +  CCIfType<[v1i64, v2i32, v4i16, v8i8, v2f32], CCBitConvertToType<f64>>,
> +  CCIfType<[v2i64, v4i32, v8i16, v16i8, v4f32],
> CCBitConvertToType<v2f64>>,
> +
> +  CCIfType<[v2f64], CCAssignToReg<[Q0, Q1, Q2, Q3]>>,
> +  CCIfType<[f64], CCAssignToReg<[D0, D1, D2, D3, D4, D5, D6, D7]>>,
> +  CCIfType<[f32], CCAssignToReg<[S0, S1, S2, S3, S4, S5, S6, S7, S8,
> +                                 S9, S10, S11, S12, S13, S14, S15]>>,
> +  CCDelegateTo<CC_ARM_APCS>
> +]>;
> +
> +def RetFastCC_ARM_APCS : CallingConv<[
> +  // Handle all vector types as either f64 or v2f64.
> +  CCIfType<[v1i64, v2i32, v4i16, v8i8, v2f32], CCBitConvertToType<f64>>,
> +  CCIfType<[v2i64, v4i32, v8i16, v16i8, v4f32],
> CCBitConvertToType<v2f64>>,
> +
> +  CCIfType<[v2f64], CCAssignToReg<[Q0, Q1, Q2, Q3]>>,
> +  CCIfType<[f64], CCAssignToReg<[D0, D1, D2, D3, D4, D5, D6, D7]>>,
> +  CCIfType<[f32], CCAssignToReg<[S0, S1, S2, S3, S4, S5, S6, S7, S8,
> +                                 S9, S10, S11, S12, S13, S14, S15]>>,
> +  CCDelegateTo<RetCC_ARM_APCS>
> +]>;
> +
> +
>
> +//===----------------------------------------------------------------------===//
>  // ARM AAPCS (EABI) Calling Convention, common parts
>
>  //===----------------------------------------------------------------------===//
>
> @@ -105,6 +133,7 @@
>
>
>  //===----------------------------------------------------------------------===//
>  // ARM AAPCS-VFP (EABI) Calling Convention
> +// Also used for FastCC (when VFP2 or later is available)
>
>  //===----------------------------------------------------------------------===//
>
>  def CC_ARM_AAPCS_VFP : CallingConv<[
>
> Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=117119&r1=117118&r2=117119&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Fri Oct 22 13:23:05 2010
> @@ -69,6 +69,10 @@
>   cl::desc("Enable / disable ARM interworking (for debugging only)"),
>   cl::init(true));
>
> +static cl::opt<bool>
> +ARMFastCC("arm-fastcc", cl::Hidden,
> +  cl::desc("Use AAPCS / AAPCS-VFP calling conventions for fastcc"));
> +
>  void ARMTargetLowering::addTypeForNEON(EVT VT, EVT PromotedLdStVT,
>                                        EVT PromotedBitwiseVT) {
>   if (VT != PromotedLdStVT) {
> @@ -955,23 +959,29 @@
>   switch (CC) {
>   default:
>     llvm_unreachable("Unsupported calling convention");
> -  case CallingConv::C:
>   case CallingConv::Fast:
> +    if (ARMFastCC && Subtarget->hasVFP2() && !isVarArg) {
> +      if (!Subtarget->isAAPCS_ABI())
> +        return (Return ? RetFastCC_ARM_APCS : FastCC_ARM_APCS);
> +      // For AAPCS ABI targets, just use VFP variant of the calling
> convention.
> +      return (Return ? RetCC_ARM_AAPCS_VFP : CC_ARM_AAPCS_VFP);
> +    }
> +    // Fallthrough
> +  case CallingConv::C: {
>     // Use target triple & subtarget features to do actual dispatch.
> -    if (Subtarget->isAAPCS_ABI()) {
> -      if (Subtarget->hasVFP2() &&
> -          FloatABIType == FloatABI::Hard && !isVarArg)
> -        return (Return ? RetCC_ARM_AAPCS_VFP: CC_ARM_AAPCS_VFP);
> -      else
> -        return (Return ? RetCC_ARM_AAPCS: CC_ARM_AAPCS);
> -    } else
> -        return (Return ? RetCC_ARM_APCS: CC_ARM_APCS);
> +    if (!Subtarget->isAAPCS_ABI())
> +      return (Return ? RetCC_ARM_APCS : CC_ARM_APCS);
> +    else if (Subtarget->hasVFP2() &&
> +             FloatABIType == FloatABI::Hard && !isVarArg)
> +      return (Return ? RetCC_ARM_AAPCS_VFP : CC_ARM_AAPCS_VFP);
> +    return (Return ? RetCC_ARM_AAPCS : CC_ARM_AAPCS);
> +  }
>   case CallingConv::ARM_AAPCS_VFP:
> -    return (Return ? RetCC_ARM_AAPCS_VFP: CC_ARM_AAPCS_VFP);
> +    return (Return ? RetCC_ARM_AAPCS_VFP : CC_ARM_AAPCS_VFP);
>   case CallingConv::ARM_AAPCS:
> -    return (Return ? RetCC_ARM_AAPCS: CC_ARM_AAPCS);
> +    return (Return ? RetCC_ARM_AAPCS : CC_ARM_AAPCS);
>   case CallingConv::ARM_APCS:
> -    return (Return ? RetCC_ARM_APCS: CC_ARM_APCS);
> +    return (Return ? RetCC_ARM_APCS : CC_ARM_APCS);
>   }
>  }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20101022/bff47432/attachment.html>


More information about the llvm-commits mailing list