Lines Matching refs:FInfo

62   bool parseFunctionName(const StringRef &FMangledName, FuncInfo &FInfo);
64 bool TDOFold(CallInst *CI, const FuncInfo &FInfo);
69 bool fold_recip(CallInst *CI, IRBuilder<> &B, const FuncInfo &FInfo);
72 bool fold_divide(CallInst *CI, IRBuilder<> &B, const FuncInfo &FInfo);
75 bool fold_pow(CallInst *CI, IRBuilder<> &B, const FuncInfo &FInfo);
78 bool fold_rootn(CallInst *CI, IRBuilder<> &B, const FuncInfo &FInfo);
81 bool fold_fma_mad(CallInst *CI, IRBuilder<> &B, const FuncInfo &FInfo);
84 bool sincosUseNative(CallInst *aCI, const FuncInfo &FInfo);
87 bool evaluateScalarMathFunc(const FuncInfo &FInfo, double& Res0,
89 bool evaluateCall(CallInst *aCI, const FuncInfo &FInfo);
92 bool fold_sqrt(CallInst *CI, IRBuilder<> &B, const FuncInfo &FInfo);
99 const FuncInfo &FInfo);
109 FunctionCallee getNativeFunction(Module *M, const FuncInfo &FInfo);
425 static inline int getVecSize(const AMDGPULibFunc& FInfo) { in getVecSize() argument
426 return FInfo.getLeads()[0].VectorSize; in getVecSize()
429 static inline AMDGPULibFunc::EType getArgType(const AMDGPULibFunc& FInfo) { in getArgType() argument
430 return (AMDGPULibFunc::EType)FInfo.getLeads()[0].ArgType; in getArgType()
442 FuncInfo &FInfo) { in parseFunctionName() argument
443 return AMDGPULibFunc::parse(FMangledName, FInfo); in parseFunctionName()
465 bool AMDGPULibCalls::sincosUseNative(CallInst *aCI, const FuncInfo &FInfo) { in sincosUseNative() argument
474 nf.getLeads()[0].ArgType = FInfo.getLeads()[0].ArgType; in sincosUseNative()
475 nf.getLeads()[0].VectorSize = FInfo.getLeads()[0].VectorSize; in sincosUseNative()
503 FuncInfo FInfo; in useNative() local
504 if (!parseFunctionName(Callee->getName(), FInfo) || !FInfo.isMangled() || in useNative()
505 FInfo.getPrefix() != AMDGPULibFunc::NOPFX || in useNative()
506 getArgType(FInfo) == AMDGPULibFunc::F64 || !HasNative(FInfo.getId()) || in useNative()
507 !(AllNative || useNativeFunc(FInfo.getName()))) { in useNative()
511 if (FInfo.getId() == AMDGPULibFunc::EI_SINCOS) in useNative()
512 return sincosUseNative(aCI, FInfo); in useNative()
514 FInfo.setPrefix(AMDGPULibFunc::NATIVE); in useNative()
515 FunctionCallee F = getFunction(aCI->getModule(), FInfo); in useNative()
533 const FuncInfo &FInfo) { in fold_read_write_pipe() argument
619 FuncInfo FInfo; in fold() local
620 if (!parseFunctionName(Callee->getName(), FInfo)) in fold()
624 if (CI->arg_size() != FInfo.getNumArgs()) in fold()
627 if (TDOFold(CI, FInfo)) in fold()
633 if (isUnsafeMath(CI) && evaluateCall(CI, FInfo)) in fold()
637 switch (FInfo.getId()) { in fold()
640 assert ((FInfo.getPrefix() == AMDGPULibFunc::NATIVE || in fold()
641 FInfo.getPrefix() == AMDGPULibFunc::HALF) && in fold()
643 return (getVecSize(FInfo) != 1) ? false : fold_recip(CI, B, FInfo); in fold()
647 assert ((FInfo.getPrefix() == AMDGPULibFunc::NATIVE || in fold()
648 FInfo.getPrefix() == AMDGPULibFunc::HALF) && in fold()
650 return (getVecSize(FInfo) != 1) ? false : fold_divide(CI, B, FInfo); in fold()
655 return fold_pow(CI, B, FInfo); in fold()
659 return (getVecSize(FInfo) != 1) ? false : fold_rootn(CI, B, FInfo); in fold()
665 return (getVecSize(FInfo) != 1) ? false : fold_fma_mad(CI, B, FInfo); in fold()
668 return isUnsafeMath(CI) && fold_sqrt(CI, B, FInfo); in fold()
671 if ((getArgType(FInfo) == AMDGPULibFunc::F32 || in fold()
672 getArgType(FInfo) == AMDGPULibFunc::F64) in fold()
673 && (FInfo.getPrefix() == AMDGPULibFunc::NOPFX)) in fold()
681 return fold_read_write_pipe(CI, B, FInfo); in fold()
690 bool AMDGPULibCalls::TDOFold(CallInst *CI, const FuncInfo &FInfo) { in TDOFold() argument
692 const TableRef tr = getOptTable(FInfo.getId()); in TDOFold()
699 if (getVecSize(FInfo) > 1) { in TDOFold()
702 for (int eltNo = 0; eltNo < getVecSize(FInfo); ++eltNo) { in TDOFold()
721 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in TDOFold()
755 const FuncInfo &FInfo) { in fold_recip() argument
773 const FuncInfo &FInfo) { in fold_divide() argument
780 (CF1 && (getArgType(FInfo) == AMDGPULibFunc::F32))) in fold_divide()
803 const FuncInfo &FInfo) { in fold_pow() argument
804 assert((FInfo.getId() == AMDGPULibFunc::EI_POW || in fold_pow()
805 FInfo.getId() == AMDGPULibFunc::EI_POWR || in fold_pow()
806 FInfo.getId() == AMDGPULibFunc::EI_POWN) && in fold_pow()
818 if (getVecSize(FInfo) == 1) { in fold_pow()
844 if (getVecSize(FInfo) > 1) { in fold_pow()
845 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
868 if (getVecSize(FInfo) > 1) { in fold_pow()
869 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
883 FInfo))) { in fold_pow()
885 << FInfo.getName().c_str() << "(" << *opr0 << ")\n"); in fold_pow()
900 double dval = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
918 if (getVecSize(FInfo) > 1) { in fold_pow()
919 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
936 if (getVecSize(FInfo) > 1) { in fold_pow()
937 cnval = ConstantDataVector::getSplat(getVecSize(FInfo), cnval); in fold_pow()
951 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_EXP2, FInfo)); in fold_pow()
959 if (getVecSize(FInfo) == 1) { in fold_pow()
963 double V = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
969 needcopysign = (FInfo.getId() != AMDGPULibFunc::EI_POWR) && in fold_pow()
973 needcopysign = needabs = FInfo.getId() != AMDGPULibFunc::EI_POWR && in fold_pow()
981 needcopysign = needabs = FInfo.getId() != AMDGPULibFunc::EI_POWR; in fold_pow()
983 assert ((int)CDV->getNumElements() == getVecSize(FInfo) && in fold_pow()
987 for (int i=0; i < getVecSize(FInfo); ++i) { in fold_pow()
988 double V = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
995 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in fold_pow()
1009 if (needcopysign && (FInfo.getId() == AMDGPULibFunc::EI_POW)) { in fold_pow()
1012 if (getVecSize(FInfo) == 1) { in fold_pow()
1014 double y = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1023 for (int i=0; i < getVecSize(FInfo); ++i) { in fold_pow()
1024 double y = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1038 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_FABS, FInfo)); in fold_pow()
1047 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_LOG2, FInfo)); in fold_pow()
1053 if (FInfo.getId() == AMDGPULibFunc::EI_POWN) { in fold_pow()
1088 const FuncInfo &FInfo) { in fold_rootn() argument
1105 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_SQRT, FInfo))) { in fold_rootn()
1114 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_CBRT, FInfo))) { in fold_rootn()
1130 getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_RSQRT, FInfo))) { in fold_rootn()
1142 const FuncInfo &FInfo) { in fold_fma_mad() argument
1187 const FuncInfo &FInfo) { in getNativeFunction() argument
1188 if (getArgType(FInfo) == AMDGPULibFunc::F64 || !HasNative(FInfo.getId())) in getNativeFunction()
1190 FuncInfo nf = FInfo; in getNativeFunction()
1197 const FuncInfo &FInfo) { in fold_sqrt() argument
1198 if (getArgType(FInfo) == AMDGPULibFunc::F32 && (getVecSize(FInfo) == 1) && in fold_sqrt()
1199 (FInfo.getPrefix() != AMDGPULibFunc::NATIVE)) { in fold_sqrt()
1201 CI->getModule(), AMDGPULibFunc(AMDGPULibFunc::EI_SQRT, FInfo))) { in fold_sqrt()
1363 bool AMDGPULibCalls::evaluateScalarMathFunc(const FuncInfo &FInfo, in evaluateScalarMathFunc() argument
1375 opr0 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1381 opr1 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1387 opr2 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1392 switch (FInfo.getId()) { in evaluateScalarMathFunc()
1558 bool AMDGPULibCalls::evaluateCall(CallInst *aCI, const FuncInfo &FInfo) { in evaluateCall() argument
1573 if (FInfo.getId() != AMDGPULibFunc::EI_SINCOS) in evaluateCall()
1587 int FuncVecSize = getVecSize(FInfo); in evaluateCall()
1588 bool hasTwoResults = (FInfo.getId() == AMDGPULibFunc::EI_SINCOS); in evaluateCall()
1590 if (!evaluateScalarMathFunc(FInfo, DVal0[0], in evaluateCall()
1602 if (!evaluateScalarMathFunc(FInfo, DVal0[i], in evaluateCall()
1616 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in evaluateCall()
1640 assert(FInfo.getId() == AMDGPULibFunc::EI_SINCOS && in evaluateCall()