[cfe-dev] [OpenCL patch] Half type as native when OpenCL's cl_khr_fp16 extension is enabled

Anton Lokhmotov Anton.Lokhmotov at arm.com
Wed Jun 13 08:55:48 PDT 2012


Hi John,

Sorry I missed your original email.  Yes, you are right that the previous
patch missed the case of array subscripting.  Please review the updated
patch.

Many thanks,
Anton.


> -----Original Message-----
> From: John Garvin [mailto:jgarvin at apple.com]
> Sent: 11 June 2012 22:46
> To: cfe-dev at cs.uiuc.edu; Anton Lokhmotov
> Subject: Re: [cfe-dev] [OpenCL patch] Half type as native when OpenCL's
> cl_khr_fp16 extension is enabled
> 
> Another comment: be sure to check for dereferences of half pointers
> using array subscripting as well as dereferences using the * operator.
> For example:
> 
> half *a;
> half *b;
> half *c;
> ...
> c[10] = a[10] + b[10];  // this should be an error
> 
> John
> 
> On Jun 4, 2012, at 5:35 PM, John Garvin wrote:
> 
> > Two small comments, if I may:
> >
> > @@ -348,13 +351,18 @@ llvm::Type *CodeGenTypes::ConvertType(QualType
> T) {
> >
> >       // FIXME: Ask target which kind of half FP it prefers (storage
> only vs
> >       // native).
> > -      ResultType = llvm::Type::getInt16Ty(getLLVMContext());
> > +      if (Context.getLangOpts().OpenCL)
> > +        ResultType = getTypeForFormat(getLLVMContext(),
> > +            Context.getFloatTypeSemantics(T), /* isOpenCL = */
> true);
> > +      else
> > +        ResultType = llvm::Type::getInt16Ty(getLLVMContext());
> >       break;
> >     case BuiltinType::Float:
> >     case BuiltinType::Double:
> >
> > It seems like the if is unnecessary here, since the logic is already
> in getTypeForFormat.
> >
> > @@ -1763,7 +1763,8 @@ bool Sema::IsFloatingPointPromotion(QualType
> FromType, QualType ToType) {
> >         return true;
> >
> >       // Half can be promoted to float.
> > -      if (FromBuiltin->getKind() == BuiltinType::Half &&
> > +      if (!(getLangOpts().OpenCL || getOpenCLOptions().cl_khr_fp16)
> &&
> > +           FromBuiltin->getKind() == BuiltinType::Half &&
> >           ToBuiltin->getKind() == BuiltinType::Float)
> >         return true;
> >     }
> >
> > Did you mean the following? As written, it returns true in the OpenCL
> case whether or not cl_khr_fp16 is true.
> >
> > if ((!getLangOpts().OpenCL || getOpenCLOptions().cl_khr_fp16) &&
> >
> > John
> >
> > On May 17, 2012, at 5:06 AM, Anton Lokhmotov wrote:
> >
> >> Hi David,
> >>
> >> Many thanks for your comments.
> >>
> >>> Generally the code changes look good.  I would like to see some
> test
> >>> cases for code generation updates:
> >>> - half constant generation
> >>> - conversion to and from half, with other type being "float"
> >> Please see new test/CodeGenOpenCL/half.cl.
> >>
> >>> - ++ and --
> >> OpenCL 1.1 forbids using the increment and decrement operators on
> >> floating-point values.  We haven't open-sourced the semantic check
> for this,
> >> so it's hard for us to test.  However, incrementing and decrementing
> a half
> >> variable by 2.0f is done in the above test.
> >>
> >>> I have one detailed comment:
> >>> The following part of the patch seems unnecessary.
> >>> I think the existing code should work because the HalfTypeID should
> be
> >>> lower than the other floating types?
> >>>
> >>>  @@ -641,7 +641,10 @@ Value
> >>> *ScalarExprEmitter::EmitScalarConversion(Value *Src, QualType
> SrcType,
> >>>     } else {
> >>>       assert(SrcTy->isFloatingPointTy() && DstTy-
> >isFloatingPointTy()
> >>> &&
> >>>              "Unknown real conversion");
> >>>  -    if (DstTy->getTypeID() < SrcTy->getTypeID())
> >>>  +    int DstId = DstTy->getTypeID();
> >>>  +    int SrcId = Src->getType()->getTypeID();
> >>>  +    if ((SrcId != llvm::Type::HalfTyID && DstId < SrcId) ||
> >>>  +        DstId == llvm::Type::HalfTyID)
> >>>         Res = Builder.CreateFPTrunc(Src, DstTy, "conv");
> >>>       else
> >>>         Res = Builder.CreateFPExt(Src, DstTy, "conv");
> >> Good point!  Removed.
> >>
> >> Many thanks,
> >> Anton.<half-
> clang.patch>_______________________________________________
> >> cfe-dev mailing list
> >> cfe-dev at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
> >
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: half-clang.patch
Type: application/octet-stream
Size: 17305 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120613/af7254a0/attachment.obj>


More information about the cfe-dev mailing list