Lines Matching refs:FInfo
70 bool parseFunctionName(const StringRef &FMangledName, FuncInfo &FInfo);
72 bool TDOFold(CallInst *CI, const FuncInfo &FInfo);
77 bool fold_pow(FPMathOperator *FPOp, IRBuilder<> &B, const FuncInfo &FInfo);
80 bool fold_rootn(FPMathOperator *FPOp, IRBuilder<> &B, const FuncInfo &FInfo);
83 bool sincosUseNative(CallInst *aCI, const FuncInfo &FInfo);
86 bool evaluateScalarMathFunc(const FuncInfo &FInfo, double &Res0, double &Res1,
88 bool evaluateCall(CallInst *aCI, const FuncInfo &FInfo);
98 bool fold_sincos(FPMathOperator *FPOp, IRBuilder<> &B, const FuncInfo &FInfo);
102 const FuncInfo &FInfo);
105 FunctionCallee getNativeFunction(Module *M, const FuncInfo &FInfo);
400 static inline int getVecSize(const AMDGPULibFunc& FInfo) { in getVecSize() argument
401 return FInfo.getLeads()[0].VectorSize; in getVecSize()
404 static inline AMDGPULibFunc::EType getArgType(const AMDGPULibFunc& FInfo) { in getArgType() argument
405 return (AMDGPULibFunc::EType)FInfo.getLeads()[0].ArgType; in getArgType()
417 FuncInfo &FInfo) { in parseFunctionName() argument
418 return AMDGPULibFunc::parse(FMangledName, FInfo); in parseFunctionName()
453 bool AMDGPULibCalls::sincosUseNative(CallInst *aCI, const FuncInfo &FInfo) { in sincosUseNative() argument
462 nf.getLeads()[0].ArgType = FInfo.getLeads()[0].ArgType; in sincosUseNative()
463 nf.getLeads()[0].VectorSize = FInfo.getLeads()[0].VectorSize; in sincosUseNative()
492 FuncInfo FInfo; in useNative() local
493 if (!parseFunctionName(Callee->getName(), FInfo) || !FInfo.isMangled() || in useNative()
494 FInfo.getPrefix() != AMDGPULibFunc::NOPFX || in useNative()
495 getArgType(FInfo) == AMDGPULibFunc::F64 || !HasNative(FInfo.getId()) || in useNative()
496 !(AllNative || useNativeFunc(FInfo.getName()))) { in useNative()
500 if (FInfo.getId() == AMDGPULibFunc::EI_SINCOS) in useNative()
501 return sincosUseNative(aCI, FInfo); in useNative()
503 FInfo.setPrefix(AMDGPULibFunc::NATIVE); in useNative()
504 FunctionCallee F = getFunction(aCI->getModule(), FInfo); in useNative()
522 const FuncInfo &FInfo) { in fold_read_write_pipe() argument
643 FuncInfo FInfo; in fold() local
644 if (!parseFunctionName(Callee->getName(), FInfo)) in fold()
649 if (!FInfo.isCompatibleSignature(CI->getFunctionType())) in fold()
654 if (TDOFold(CI, FInfo)) in fold()
663 if (canIncreasePrecisionOfConstantFold(FPOp) && evaluateCall(CI, FInfo)) in fold()
673 switch (FInfo.getId()) { in fold()
750 AMDGPULibFunc PowrInfo(AMDGPULibFunc::EI_POWR, FInfo); in fold()
784 return fold_pow(FPOp, B, FInfo); in fold()
788 return fold_pow(FPOp, B, FInfo); in fold()
790 return fold_rootn(FPOp, B, FInfo); in fold()
797 return fold_sincos(FPOp, B, FInfo); in fold()
803 switch (FInfo.getId()) { in fold()
808 return fold_read_write_pipe(CI, B, FInfo); in fold()
817 bool AMDGPULibCalls::TDOFold(CallInst *CI, const FuncInfo &FInfo) { in TDOFold() argument
819 const TableRef tr = getOptTable(FInfo.getId()); in TDOFold()
826 if (getVecSize(FInfo) > 1) { in TDOFold()
829 for (int eltNo = 0; eltNo < getVecSize(FInfo); ++eltNo) { in TDOFold()
848 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in TDOFold()
891 const FuncInfo &FInfo) { in fold_pow() argument
892 assert((FInfo.getId() == AMDGPULibFunc::EI_POW || in fold_pow()
893 FInfo.getId() == AMDGPULibFunc::EI_POWR || in fold_pow()
894 FInfo.getId() == AMDGPULibFunc::EI_POWN) && in fold_pow()
914 if (getVecSize(FInfo) > 1) { in fold_pow()
915 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
938 if (getVecSize(FInfo) > 1) { in fold_pow()
939 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
952 FInfo))) { in fold_pow()
953 LLVM_DEBUG(errs() << "AMDIC: " << *FPOp << " ---> " << FInfo.getName() in fold_pow()
969 double dval = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
987 if (getVecSize(FInfo) > 1) { in fold_pow()
988 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
1005 if (getVecSize(FInfo) > 1) { in fold_pow()
1006 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
1026 ExpExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_EXP2, FInfo)); in fold_pow()
1035 if (getVecSize(FInfo) == 1) { in fold_pow()
1040 double V = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1046 needcopysign = (FInfo.getId() != AMDGPULibFunc::EI_POWR) && in fold_pow()
1050 needcopysign = needabs = FInfo.getId() != AMDGPULibFunc::EI_POWR; in fold_pow()
1057 needcopysign = needabs = FInfo.getId() != AMDGPULibFunc::EI_POWR; in fold_pow()
1059 assert ((int)CDV->getNumElements() == getVecSize(FInfo) && in fold_pow()
1063 for (int i=0; i < getVecSize(FInfo); ++i) { in fold_pow()
1069 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in fold_pow()
1083 if (needcopysign && (FInfo.getId() == AMDGPULibFunc::EI_POW)) { in fold_pow()
1102 LogExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_LOG2, FInfo)); in fold_pow()
1110 if (FInfo.getId() == AMDGPULibFunc::EI_POWN) { in fold_pow()
1145 const FuncInfo &FInfo) { in fold_rootn() argument
1147 if (getVecSize(FInfo) != 1) in fold_rootn()
1167 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_SQRT, FInfo))) { in fold_rootn()
1176 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_CBRT, FInfo))) { in fold_rootn()
1192 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_RSQRT, FInfo))) { in fold_rootn()
1205 const FuncInfo &FInfo) { in getNativeFunction() argument
1206 if (getArgType(FInfo) == AMDGPULibFunc::F64 || !HasNative(FInfo.getId())) in getNativeFunction()
1208 FuncInfo nf = FInfo; in getNativeFunction()
1418 bool AMDGPULibCalls::evaluateScalarMathFunc(const FuncInfo &FInfo, double &Res0, in evaluateScalarMathFunc() argument
1428 opr0 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1434 opr1 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1439 switch (FInfo.getId()) { in evaluateScalarMathFunc()
1583 bool AMDGPULibCalls::evaluateCall(CallInst *aCI, const FuncInfo &FInfo) { in evaluateCall() argument
1597 if (FInfo.getId() != AMDGPULibFunc::EI_SINCOS) in evaluateCall()
1606 int FuncVecSize = getVecSize(FInfo); in evaluateCall()
1607 bool hasTwoResults = (FInfo.getId() == AMDGPULibFunc::EI_SINCOS); in evaluateCall()
1609 if (!evaluateScalarMathFunc(FInfo, DVal0[0], DVal1[0], copr0, copr1)) { in evaluateCall()
1618 if (!evaluateScalarMathFunc(FInfo, DVal0[i], DVal1[i], celt0, celt1)) { in evaluateCall()
1631 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in evaluateCall()
1655 assert(FInfo.getId() == AMDGPULibFunc::EI_SINCOS && in evaluateCall()