[Beignet] [patch v2] remove the libFunc interface.

Zhigang Gong zhigang.gong at linux.intel.com
Thu Jan 29 19:39:42 PST 2015


LGTM, will push latter. thanks.

On Thu, Jan 29, 2015 at 04:45:20PM +0800, xionghu.luo at intel.com wrote:
> From: Luo Xionghu <xionghu.luo at intel.com>
> 
> the copysignf function is handled in libocl already.
> v2: also remove the llvm intrinsic copysign function.
> 
> Signed-off-by: Luo Xionghu <xionghu.luo at intel.com>
> ---
>  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
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list