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:[email protected]] On Behalf Of > > Song, Ruiling > > Sent: Thursday, January 15, 2015 4:00 PM > > To: Luo, Xionghu; [email protected] > > 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 > > [email protected] > > http://lists.freedesktop.org/mailman/listinfo/beignet > > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
