> -----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
