r195268 - [NVPTX] Update ABI handling

Bill Wendling isanbard at gmail.com
Thu Nov 21 15:35:39 PST 2013


Sure. Done.

-bw

On Nov 21, 2013, at 8:44 AM, Justin Holewinski <justin.holewinski at gmail.com> wrote:

> Hi Bill, can you please pull this into the 3.4 branch?  This fixes an issue with struct arguments/returns.
> 
> 
> On Wed, Nov 20, 2013 at 3:35 PM, Justin Holewinski <jholewinski at nvidia.com> wrote:
> Author: jholewinski
> Date: Wed Nov 20 14:35:34 2013
> New Revision: 195268
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=195268&view=rev
> Log:
> [NVPTX] Update ABI handling
> 
> For PTX, we want the target to handle struct returns directly.
> 
> Added:
>     cfe/trunk/test/CodeGen/nvptx-abi.c
> Modified:
>     cfe/trunk/lib/CodeGen/TargetInfo.cpp
> 
> Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=195268&r1=195267&r2=195268&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Wed Nov 20 14:35:34 2013
> @@ -4197,16 +4197,26 @@ private:
>  ABIArgInfo NVPTXABIInfo::classifyReturnType(QualType RetTy) const {
>    if (RetTy->isVoidType())
>      return ABIArgInfo::getIgnore();
> -  if (isAggregateTypeForABI(RetTy))
> -    return ABIArgInfo::getIndirect(0);
> -  return ABIArgInfo::getDirect();
> +
> +  // note: this is different from default ABI
> +  if (!RetTy->isScalarType())
> +    return ABIArgInfo::getDirect();
> +
> +  // Treat an enum type as its underlying type.
> +  if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
> +    RetTy = EnumTy->getDecl()->getIntegerType();
> +
> +  return (RetTy->isPromotableIntegerType() ?
> +          ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
>  }
> 
>  ABIArgInfo NVPTXABIInfo::classifyArgumentType(QualType Ty) const {
> -  if (isAggregateTypeForABI(Ty))
> -    return ABIArgInfo::getIndirect(0);
> +  // Treat an enum type as its underlying type.
> +  if (const EnumType *EnumTy = Ty->getAs<EnumType>())
> +    Ty = EnumTy->getDecl()->getIntegerType();
> 
> -  return ABIArgInfo::getDirect();
> +  return (Ty->isPromotableIntegerType() ?
> +          ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
>  }
> 
>  void NVPTXABIInfo::computeInfo(CGFunctionInfo &FI) const {
> 
> Added: cfe/trunk/test/CodeGen/nvptx-abi.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/nvptx-abi.c?rev=195268&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/nvptx-abi.c (added)
> +++ cfe/trunk/test/CodeGen/nvptx-abi.c Wed Nov 20 14:35:34 2013
> @@ -0,0 +1,17 @@
> +// RUN: %clang_cc1 -triple nvptx-unknown-unknown -S -o - %s -emit-llvm | FileCheck %s
> +// RUN: %clang_cc1 -triple nvptx64-unknown-unknown -S -o - %s -emit-llvm | FileCheck %s
> +
> +typedef struct float4_s {
> +  float x, y, z, w;
> +} float4_t;
> +
> +float4_t my_function(void);
> +
> +// CHECK-DAG: declare %struct.float4_s @my_function
> +
> +float bar(void) {
> +  float4_t ret;
> +// CHECK-DAG: call %struct.float4_s @my_function
> +  ret = my_function();
> +  return ret.x;
> +}
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 
> 
> 
> -- 
> 
> Thanks,
> 
> Justin Holewinski

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131121/6ee4bf65/attachment.html>


More information about the cfe-commits mailing list