Lines Matching refs:FInfo
71 bool parseFunctionName(const StringRef &FMangledName, FuncInfo &FInfo);
73 bool TDOFold(CallInst *CI, const FuncInfo &FInfo);
78 bool fold_pow(FPMathOperator *FPOp, IRBuilder<> &B, const FuncInfo &FInfo);
81 bool fold_rootn(FPMathOperator *FPOp, IRBuilder<> &B, const FuncInfo &FInfo);
84 bool sincosUseNative(CallInst *aCI, const FuncInfo &FInfo);
87 bool evaluateScalarMathFunc(const FuncInfo &FInfo, double &Res0, double &Res1,
89 bool evaluateCall(CallInst *aCI, const FuncInfo &FInfo);
99 bool fold_sincos(FPMathOperator *FPOp, IRBuilder<> &B, const FuncInfo &FInfo);
103 const FuncInfo &FInfo);
106 FunctionCallee getNativeFunction(Module *M, const FuncInfo &FInfo);
401 static inline int getVecSize(const AMDGPULibFunc& FInfo) { in getVecSize() argument
402 return FInfo.getLeads()[0].VectorSize; in getVecSize()
405 static inline AMDGPULibFunc::EType getArgType(const AMDGPULibFunc& FInfo) { in getArgType() argument
406 return (AMDGPULibFunc::EType)FInfo.getLeads()[0].ArgType; in getArgType()
418 FuncInfo &FInfo) { in parseFunctionName() argument
419 return AMDGPULibFunc::parse(FMangledName, FInfo); in parseFunctionName()
454 bool AMDGPULibCalls::sincosUseNative(CallInst *aCI, const FuncInfo &FInfo) { in sincosUseNative() argument
463 nf.getLeads()[0].ArgType = FInfo.getLeads()[0].ArgType; in sincosUseNative()
464 nf.getLeads()[0].VectorSize = FInfo.getLeads()[0].VectorSize; in sincosUseNative()
495 FuncInfo FInfo; in useNative() local
496 if (!parseFunctionName(Callee->getName(), FInfo) || !FInfo.isMangled() || in useNative()
497 FInfo.getPrefix() != AMDGPULibFunc::NOPFX || in useNative()
498 getArgType(FInfo) == AMDGPULibFunc::F64 || !HasNative(FInfo.getId()) || in useNative()
499 !(AllNative || useNativeFunc(FInfo.getName()))) { in useNative()
503 if (FInfo.getId() == AMDGPULibFunc::EI_SINCOS) in useNative()
504 return sincosUseNative(aCI, FInfo); in useNative()
506 FInfo.setPrefix(AMDGPULibFunc::NATIVE); in useNative()
507 FunctionCallee F = getFunction(aCI->getModule(), FInfo); in useNative()
525 const FuncInfo &FInfo) { in fold_read_write_pipe() argument
654 FuncInfo FInfo; in fold() local
655 if (!parseFunctionName(Callee->getName(), FInfo)) in fold()
660 if (!FInfo.isCompatibleSignature(CI->getFunctionType())) in fold()
665 if (TDOFold(CI, FInfo)) in fold()
676 if (canIncreasePrecisionOfConstantFold(FPOp) && evaluateCall(CI, FInfo)) in fold()
686 switch (FInfo.getId()) { in fold()
763 AMDGPULibFunc PowrInfo(AMDGPULibFunc::EI_POWR, FInfo); in fold()
798 return fold_pow(FPOp, B, FInfo); in fold()
802 return fold_pow(FPOp, B, FInfo); in fold()
804 return fold_rootn(FPOp, B, FInfo); in fold()
811 return fold_sincos(FPOp, B, FInfo); in fold()
817 switch (FInfo.getId()) { in fold()
822 return fold_read_write_pipe(CI, B, FInfo); in fold()
831 bool AMDGPULibCalls::TDOFold(CallInst *CI, const FuncInfo &FInfo) { in TDOFold() argument
833 const TableRef tr = getOptTable(FInfo.getId()); in TDOFold()
840 if (getVecSize(FInfo) > 1) { in TDOFold()
843 for (int eltNo = 0; eltNo < getVecSize(FInfo); ++eltNo) { in TDOFold()
862 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in TDOFold()
904 const FuncInfo &FInfo) { in fold_pow() argument
905 assert((FInfo.getId() == AMDGPULibFunc::EI_POW || in fold_pow()
906 FInfo.getId() == AMDGPULibFunc::EI_POWR || in fold_pow()
907 FInfo.getId() == AMDGPULibFunc::EI_POWN) && in fold_pow()
927 if (getVecSize(FInfo) > 1) { in fold_pow()
928 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
951 if (getVecSize(FInfo) > 1) { in fold_pow()
952 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
965 FInfo))) { in fold_pow()
966 LLVM_DEBUG(errs() << "AMDIC: " << *FPOp << " ---> " << FInfo.getName() in fold_pow()
982 double dval = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1000 if (getVecSize(FInfo) > 1) { in fold_pow()
1001 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
1018 if (getVecSize(FInfo) > 1) { in fold_pow()
1019 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
1039 ExpExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_EXP2, FInfo)); in fold_pow()
1048 if (getVecSize(FInfo) == 1) { in fold_pow()
1053 double V = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1059 needcopysign = (FInfo.getId() != AMDGPULibFunc::EI_POWR) && in fold_pow()
1063 needcopysign = needabs = FInfo.getId() != AMDGPULibFunc::EI_POWR; in fold_pow()
1070 needcopysign = needabs = FInfo.getId() != AMDGPULibFunc::EI_POWR; in fold_pow()
1072 assert ((int)CDV->getNumElements() == getVecSize(FInfo) && in fold_pow()
1076 for (int i=0; i < getVecSize(FInfo); ++i) { in fold_pow()
1082 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in fold_pow()
1095 if (needcopysign && (FInfo.getId() == AMDGPULibFunc::EI_POW)) { in fold_pow()
1114 LogExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_LOG2, FInfo)); in fold_pow()
1122 if (FInfo.getId() == AMDGPULibFunc::EI_POWN) { in fold_pow()
1153 const FuncInfo &FInfo) { in fold_rootn() argument
1198 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_CBRT, FInfo))) { in fold_rootn()
1247 const FuncInfo &FInfo) { in getNativeFunction() argument
1248 if (getArgType(FInfo) == AMDGPULibFunc::F64 || !HasNative(FInfo.getId())) in getNativeFunction()
1250 FuncInfo nf = FInfo; in getNativeFunction()
1460 bool AMDGPULibCalls::evaluateScalarMathFunc(const FuncInfo &FInfo, double &Res0, in evaluateScalarMathFunc() argument
1470 opr0 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1476 opr1 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1481 switch (FInfo.getId()) { in evaluateScalarMathFunc()
1625 bool AMDGPULibCalls::evaluateCall(CallInst *aCI, const FuncInfo &FInfo) { in evaluateCall() argument
1639 if (FInfo.getId() != AMDGPULibFunc::EI_SINCOS) in evaluateCall()
1648 int FuncVecSize = getVecSize(FInfo); in evaluateCall()
1649 bool hasTwoResults = (FInfo.getId() == AMDGPULibFunc::EI_SINCOS); in evaluateCall()
1651 if (!evaluateScalarMathFunc(FInfo, DVal0[0], DVal1[0], copr0, copr1)) { in evaluateCall()
1660 if (!evaluateScalarMathFunc(FInfo, DVal0[i], DVal1[i], celt0, celt1)) { in evaluateCall()
1673 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in evaluateCall()
1697 assert(FInfo.getId() == AMDGPULibFunc::EI_SINCOS && in evaluateCall()