LGTM, will push latter. thanks.
On Thu, Jan 29, 2015 at 04:45:20PM +0800, [email protected] wrote: > From: Luo Xionghu <[email protected]> > > the copysignf function is handled in libocl already. > v2: also remove the llvm intrinsic copysign function. > > Signed-off-by: Luo Xionghu <[email protected]> > --- > backend/src/llvm/llvm_gen_backend.cpp | 104 > ---------------------------------- > backend/src/llvm/llvm_scalarize.cpp | 40 ------------- > 2 files changed, 144 deletions(-) > > diff --git a/backend/src/llvm/llvm_gen_backend.cpp > b/backend/src/llvm/llvm_gen_backend.cpp > index 66a7e93..d10d5c0 100644 > --- a/backend/src/llvm/llvm_gen_backend.cpp > +++ b/backend/src/llvm/llvm_gen_backend.cpp > @@ -151,7 +151,6 @@ > #include "llvm/Support/Host.h" > #include "llvm/Support/ToolOutputFile.h" > #include "llvm/Support/SourceMgr.h" > -#include "llvm/Target/TargetLibraryInfo.h" > > #include "llvm/llvm_gen_backend.hpp" > #include "ir/context.hpp" > @@ -660,8 +659,6 @@ namespace gbe > ir::ImmediateIndex processSeqConstant(ConstantDataSequential *seq, > int index, ConstTypeId tid); > ir::ImmediateIndex processConstantVector(ConstantVector *cv, int > index); > - > - bool isLibFuncFunc(CallInst* call, LibFunc::Func& Func); > }; > > char GenWriter::ID = 0; > @@ -2756,27 +2753,6 @@ error: > } > } > > - bool GenWriter::isLibFuncFunc(CallInst* call, LibFunc::Func& Func) > - { > - TargetLibraryInfo *LibInfo; > - Function *F = call->getCalledFunction(); > - > - LibInfo = getAnalysisIfAvailable<TargetLibraryInfo>(); > - if (!F->hasLocalLinkage() && F->hasName() && LibInfo && > - LibInfo->getLibFunc(F->getName(), Func) && > - LibInfo->hasOptimizedCodeGen(Func)) { > - // Non-read-only functions are never treated as intrinsics. > - if (!call->onlyReadsMemory()) > - return false; > - > - // Conversion happens only for FP calls. > - if (!call->getArgOperand(0)->getType()->isFloatingPointTy()) > - return false; > - return true; > - } > - return false; > - } > - > void GenWriter::regAllocateCallInst(CallInst &I) { > Value *dst = &I; > Value *Callee = I.getCalledValue(); > @@ -2822,7 +2798,6 @@ error: > case Intrinsic::ceil: > case Intrinsic::fma: > case Intrinsic::trunc: > - case Intrinsic::copysign: > this->newRegister(&I); > break; > case Intrinsic::fabs: > @@ -2834,30 +2809,6 @@ error: > return; > } > } > - > - if (Function *F = I.getCalledFunction()) { > - // Most intrinsics don't become function calls, but some might. > - // sin, cos, exp and log are always calls. > - if (F->getIntrinsicID() != Intrinsic::not_intrinsic) { > - switch (F->getIntrinsicID()) { > - default: > - GBE_ASSERTM(false, "Unsupported intrinsics"); > - } > - } > - LibFunc::Func Func; > - if(isLibFuncFunc(&I, Func)) > - { > - switch (Func) { > - case LibFunc::copysignf: > - this->newRegister(&I); > - break; > - default: > - GBE_ASSERTM(false, "Unsupported libFuncs"); > - } > - return; > - } > - } > - > // Get the name of the called function and handle it > const std::string fnName = Callee->getName(); > auto genIntrinsicID = intrinsicMap.find(fnName); > @@ -3348,64 +3299,9 @@ error: > ctx.RNDZ(dstType, dst, src); > } > break; > - case Intrinsic::copysign: > - { > - ir::Type srcType = getType(ctx, I.getType()); > - const ir::Register dst = this->getRegister(&I); > - const ir::Register src0 = this->getRegister(I.getOperand(0)); > - const ir::Register src1 = this->getRegister(I.getOperand(1)); > - const ir::Register cmp = ctx.reg(ir::FAMILY_BOOL); > - > - const ir::Register tmp1 = ctx.reg(getFamily(srcType)); > - const ir::Register tmp2 = ctx.reg(getFamily(srcType)); > - > - const ir::RegisterFamily family = getFamily(srcType); > - const ir::ImmediateIndex zero = > ctx.newFloatImmediate((float)0.0); > - const ir::Register zeroReg = ctx.reg(family); > - ctx.LOADI(srcType, zeroReg, zero); > - > - ctx.GE(srcType, cmp, src1, zeroReg); > - ctx.ALU1(ir::OP_ABS, srcType, tmp1, src0); > - ctx.SUB(srcType, tmp2, zeroReg, tmp1); > - ctx.SEL(srcType, dst, cmp, tmp1, tmp2); > - } > - break; > default: NOT_IMPLEMENTED; > } > } else { > - > - LibFunc::Func Func; > - if(isLibFuncFunc(&I, Func)) > - { > - switch (Func) { > - case LibFunc::copysignf: > - { > - ir::Type srcType = getType(ctx, I.getType()); > - const ir::Register dst = this->getRegister(&I); > - const ir::Register src0 = this->getRegister(I.getOperand(0)); > - const ir::Register src1 = this->getRegister(I.getOperand(1)); > - const ir::Register cmp = ctx.reg(ir::FAMILY_BOOL); > - > - const ir::Register tmp1 = ctx.reg(getFamily(srcType)); > - const ir::Register tmp2 = ctx.reg(getFamily(srcType)); > - > - const ir::RegisterFamily family = getFamily(srcType); > - const ir::ImmediateIndex zero = > ctx.newFloatImmediate((float)0.0); > - const ir::Register zeroReg = ctx.reg(family); > - ctx.LOADI(srcType, zeroReg, zero); > - > - ctx.GE(srcType, cmp, src1, zeroReg); > - ctx.ALU1(ir::OP_ABS, srcType, tmp1, src0); > - ctx.SUB(srcType, tmp2, zeroReg, tmp1); > - ctx.SEL(srcType, dst, cmp, tmp1, tmp2); > - } > - break; > - default: > - GBE_ASSERTM(false, "Unsupported libFuncs"); > - } > - return; > - } > - > // Get the name of the called function and handle it > Value *Callee = I.getCalledValue(); > const std::string fnName = Callee->getName(); > diff --git a/backend/src/llvm/llvm_scalarize.cpp > b/backend/src/llvm/llvm_scalarize.cpp > index 987e16b..4df849f 100644 > --- a/backend/src/llvm/llvm_scalarize.cpp > +++ b/backend/src/llvm/llvm_scalarize.cpp > @@ -92,7 +92,6 @@ > #include "llvm/Support/CFG.h" > #endif > #include "llvm/Support/raw_ostream.h" > -#include "llvm/Target/TargetLibraryInfo.h" > > #include "llvm/llvm_gen_backend.hpp" > #include "sys/map.hpp" > @@ -159,7 +158,6 @@ namespace gbe { > bool scalarizeShuffleVector(ShuffleVectorInst*); > bool scalarizePHI(PHINode*); > void scalarizeArgs(Function& F); > - bool isLibFuncFunc(CallInst* call, LibFunc::Func& Func); > // ... > > // Helpers to make the actual multiple scalar calls, one per > @@ -286,7 +284,6 @@ namespace gbe { > default: return false; > case Intrinsic::sqrt: > case Intrinsic::ceil: > - case Intrinsic::copysign: > case Intrinsic::trunc: > return true; > } > @@ -645,27 +642,6 @@ namespace gbe { > return II; > } > > - bool Scalarize::isLibFuncFunc(CallInst* call, LibFunc::Func& Func) > - { > - TargetLibraryInfo *LibInfo; > - Function *F = call->getCalledFunction(); > - > - LibInfo = getAnalysisIfAvailable<TargetLibraryInfo>(); > - if (!F->hasLocalLinkage() && F->hasName() && LibInfo && > - LibInfo->getLibFunc(F->getName(), Func) && > - LibInfo->hasOptimizedCodeGen(Func)) { > - // Non-read-only functions are never treated as intrinsics. > - if (!call->onlyReadsMemory()) > - return false; > - > - // Conversion happens only for FP calls. > - if (!call->getArgOperand(0)->getType()->isFloatingPointTy()) > - return false; > - return true; > - } > - return false; > - } > - > bool Scalarize::scalarizeFuncCall(CallInst* call) { > if (Function *F = call->getCalledFunction()) { > if (F->getIntrinsicID() != 0) { //Intrinsic functions > @@ -675,7 +651,6 @@ namespace gbe { > default: GBE_ASSERTM(false, "Unsupported Intrinsic"); > case Intrinsic::sqrt: > case Intrinsic::ceil: > - case Intrinsic::copysign: > case Intrinsic::trunc: > { > scalarizePerComponent(call); > @@ -683,21 +658,6 @@ namespace gbe { > break; > } > } else { > - LibFunc::Func Func; > - if(isLibFuncFunc(call, Func)) > - { > - switch (Func) { > - case LibFunc::copysignf: > - { > - scalarizePerComponent(call); > - } > - break; > - default: > - GBE_ASSERTM(false, "Unsupported libFuncs"); > - } > - return true; > - } > - > Value *Callee = call->getCalledValue(); > const std::string fnName = Callee->getName(); > auto genIntrinsicID = intrinsicMap.find(fnName); > -- > 1.9.1 > > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
