[Beignet] [PATCH 3/3] add llvm intrinsic call translate.
Zhigang Gong
zhigang.gong at linux.intel.com
Wed Jan 14 23:26:23 PST 2015
After check the spec, I found we have an instruction "rndz" which
could do the same job with only one instruction.
Xionghu,
Please consider to optimize it in another patch. Please be noted, rndz
only supports float type.
On Thu, Jan 15, 2015 at 04:13:17PM +0800, Zhigang Gong wrote:
>
>
> > -----Original Message-----
> > From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> > Song, Ruiling
> > Sent: Thursday, January 15, 2015 4:00 PM
> > To: Luo, Xionghu; beignet at lists.freedesktop.org
> > Cc: Luo, Xionghu
> > Subject: Re: [Beignet] [PATCH 3/3] add llvm intrinsic call translate.
> >
> > > + case Intrinsic::trunc:
> > > + {
> > > + Type *llvmDstType = I.getType();
> > > + Type *llvmSrcType = I.getOperand(0)->getType();
> > > + ir::Type dstType = getType(ctx, llvmDstType);
> > > + ir::Type srcType = getType(ctx, llvmSrcType);
> > > + GBE_ASSERT(srcType == dstType);
> > > +
> > > + const ir::Register tmp = ctx.reg(getFamily(ir::TYPE_S32));
> > > + const ir::Register dst = this->getRegister(&I);
> > > + const ir::Register src = this->getRegister(I.getOperand(0));
> > > + ctx.CVT(ir::TYPE_S32, srcType, tmp, src);
> > > + ctx.CVT(dstType, ir::TYPE_S32, dst, tmp);
> > Why do we need to convert to TYPE_S32 to convert from TYPE_S32 to dstType?
> This is what llvm.trunc's purpose:
>
> ‘llvm.trunc.*‘ Intrinsic
>
> Syntax:
>
> This is an overloaded intrinsic. You can use llvm.trunc on any floating point or vector of floating point type. Not all targets support all types however.
>
> declare float @llvm.trunc.f32(float %Val)
> declare double @llvm.trunc.f64(double %Val)
> declare x86_fp80 @llvm.trunc.f80(x86_fp80 %Val)
> declare fp128 @llvm.trunc.f128(fp128 %Val)
> declare ppc_fp128 @llvm.trunc.ppcf128(ppc_fp128 %Val)
> Overview:
>
> The ‘llvm.trunc.*‘ intrinsics returns the operand rounded to the nearest integer not larger in magnitude than the operand.
>
> >
> > _______________________________________________
> > Beignet mailing list
> > Beignet at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/beignet
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list