Lines Matching refs:AMDGPULibFunc
67 typedef llvm::AMDGPULibFunc FuncInfo;
390 static bool HasNative(AMDGPULibFunc::EFuncId id) { in HasNative()
392 case AMDGPULibFunc::EI_DIVIDE: in HasNative()
393 case AMDGPULibFunc::EI_COS: in HasNative()
394 case AMDGPULibFunc::EI_EXP: in HasNative()
395 case AMDGPULibFunc::EI_EXP2: in HasNative()
396 case AMDGPULibFunc::EI_EXP10: in HasNative()
397 case AMDGPULibFunc::EI_LOG: in HasNative()
398 case AMDGPULibFunc::EI_LOG2: in HasNative()
399 case AMDGPULibFunc::EI_LOG10: in HasNative()
400 case AMDGPULibFunc::EI_POWR: in HasNative()
401 case AMDGPULibFunc::EI_RECIP: in HasNative()
402 case AMDGPULibFunc::EI_RSQRT: in HasNative()
403 case AMDGPULibFunc::EI_SIN: in HasNative()
404 case AMDGPULibFunc::EI_SINCOS: in HasNative()
405 case AMDGPULibFunc::EI_SQRT: in HasNative()
406 case AMDGPULibFunc::EI_TAN: in HasNative()
423 static TableRef getOptTable(AMDGPULibFunc::EFuncId id) { in getOptTable()
425 case AMDGPULibFunc::EI_ACOS: return TableRef(tbl_acos); in getOptTable()
426 case AMDGPULibFunc::EI_ACOSH: return TableRef(tbl_acosh); in getOptTable()
427 case AMDGPULibFunc::EI_ACOSPI: return TableRef(tbl_acospi); in getOptTable()
428 case AMDGPULibFunc::EI_ASIN: return TableRef(tbl_asin); in getOptTable()
429 case AMDGPULibFunc::EI_ASINH: return TableRef(tbl_asinh); in getOptTable()
430 case AMDGPULibFunc::EI_ASINPI: return TableRef(tbl_asinpi); in getOptTable()
431 case AMDGPULibFunc::EI_ATAN: return TableRef(tbl_atan); in getOptTable()
432 case AMDGPULibFunc::EI_ATANH: return TableRef(tbl_atanh); in getOptTable()
433 case AMDGPULibFunc::EI_ATANPI: return TableRef(tbl_atanpi); in getOptTable()
434 case AMDGPULibFunc::EI_CBRT: return TableRef(tbl_cbrt); in getOptTable()
435 case AMDGPULibFunc::EI_NCOS: in getOptTable()
436 case AMDGPULibFunc::EI_COS: return TableRef(tbl_cos); in getOptTable()
437 case AMDGPULibFunc::EI_COSH: return TableRef(tbl_cosh); in getOptTable()
438 case AMDGPULibFunc::EI_COSPI: return TableRef(tbl_cospi); in getOptTable()
439 case AMDGPULibFunc::EI_ERFC: return TableRef(tbl_erfc); in getOptTable()
440 case AMDGPULibFunc::EI_ERF: return TableRef(tbl_erf); in getOptTable()
441 case AMDGPULibFunc::EI_EXP: return TableRef(tbl_exp); in getOptTable()
442 case AMDGPULibFunc::EI_NEXP2: in getOptTable()
443 case AMDGPULibFunc::EI_EXP2: return TableRef(tbl_exp2); in getOptTable()
444 case AMDGPULibFunc::EI_EXP10: return TableRef(tbl_exp10); in getOptTable()
445 case AMDGPULibFunc::EI_EXPM1: return TableRef(tbl_expm1); in getOptTable()
446 case AMDGPULibFunc::EI_LOG: return TableRef(tbl_log); in getOptTable()
447 case AMDGPULibFunc::EI_NLOG2: in getOptTable()
448 case AMDGPULibFunc::EI_LOG2: return TableRef(tbl_log2); in getOptTable()
449 case AMDGPULibFunc::EI_LOG10: return TableRef(tbl_log10); in getOptTable()
450 case AMDGPULibFunc::EI_NRSQRT: in getOptTable()
451 case AMDGPULibFunc::EI_RSQRT: return TableRef(tbl_rsqrt); in getOptTable()
452 case AMDGPULibFunc::EI_NSIN: in getOptTable()
453 case AMDGPULibFunc::EI_SIN: return TableRef(tbl_sin); in getOptTable()
454 case AMDGPULibFunc::EI_SINH: return TableRef(tbl_sinh); in getOptTable()
455 case AMDGPULibFunc::EI_SINPI: return TableRef(tbl_sinpi); in getOptTable()
456 case AMDGPULibFunc::EI_NSQRT: in getOptTable()
457 case AMDGPULibFunc::EI_SQRT: return TableRef(tbl_sqrt); in getOptTable()
458 case AMDGPULibFunc::EI_TAN: return TableRef(tbl_tan); in getOptTable()
459 case AMDGPULibFunc::EI_TANH: return TableRef(tbl_tanh); in getOptTable()
460 case AMDGPULibFunc::EI_TANPI: return TableRef(tbl_tanpi); in getOptTable()
461 case AMDGPULibFunc::EI_TGAMMA: return TableRef(tbl_tgamma); in getOptTable()
467 static inline int getVecSize(const AMDGPULibFunc& FInfo) { in getVecSize()
471 static inline AMDGPULibFunc::EType getArgType(const AMDGPULibFunc& FInfo) { in getArgType()
472 return (AMDGPULibFunc::EType)FInfo.getLeads()[0].ArgType; in getArgType()
479 return EnablePreLink ? AMDGPULibFunc::getOrInsertFunction(M, fInfo) in getFunction()
480 : AMDGPULibFunc::getFunction(M, fInfo); in getFunction()
485 return AMDGPULibFunc::parse(FMangledName, *FInfo); in parseFunctionName()
516 AMDGPULibFunc nf; in sincosUseNative()
520 nf.setPrefix(AMDGPULibFunc::NATIVE); in sincosUseNative()
521 nf.setId(AMDGPULibFunc::EI_SIN); in sincosUseNative()
524 nf.setPrefix(AMDGPULibFunc::NATIVE); in sincosUseNative()
525 nf.setId(AMDGPULibFunc::EI_COS); in sincosUseNative()
548 FInfo.getPrefix() != AMDGPULibFunc::NOPFX || in useNative()
549 getArgType(FInfo) == AMDGPULibFunc::F64 || !HasNative(FInfo.getId()) || in useNative()
554 if (FInfo.getId() == AMDGPULibFunc::EI_SINCOS) in useNative()
557 FInfo.setPrefix(AMDGPULibFunc::NATIVE); in useNative()
615 AMDGPULibFunc NewLibFunc(Name, FTy); in fold_read_write_pipe()
616 auto *F = AMDGPULibFunc::getOrInsertFunction(M, NewLibFunc); in fold_read_write_pipe()
673 case AMDGPULibFunc::EI_RECIP: in fold()
675 assert ((FInfo.getPrefix() == AMDGPULibFunc::NATIVE || in fold()
676 FInfo.getPrefix() == AMDGPULibFunc::HALF) && in fold()
680 case AMDGPULibFunc::EI_DIVIDE: in fold()
682 assert ((FInfo.getPrefix() == AMDGPULibFunc::NATIVE || in fold()
683 FInfo.getPrefix() == AMDGPULibFunc::HALF) && in fold()
687 case AMDGPULibFunc::EI_POW: in fold()
688 case AMDGPULibFunc::EI_POWR: in fold()
689 case AMDGPULibFunc::EI_POWN: in fold()
692 case AMDGPULibFunc::EI_ROOTN: in fold()
696 case AMDGPULibFunc::EI_FMA: in fold()
697 case AMDGPULibFunc::EI_MAD: in fold()
698 case AMDGPULibFunc::EI_NFMA: in fold()
702 case AMDGPULibFunc::EI_SQRT: in fold()
704 case AMDGPULibFunc::EI_COS: in fold()
705 case AMDGPULibFunc::EI_SIN: in fold()
706 if ((getArgType(FInfo) == AMDGPULibFunc::F32 || in fold()
707 getArgType(FInfo) == AMDGPULibFunc::F64) in fold()
708 && (FInfo.getPrefix() == AMDGPULibFunc::NOPFX)) in fold()
712 case AMDGPULibFunc::EI_READ_PIPE_2: in fold()
713 case AMDGPULibFunc::EI_READ_PIPE_4: in fold()
714 case AMDGPULibFunc::EI_WRITE_PIPE_2: in fold()
715 case AMDGPULibFunc::EI_WRITE_PIPE_4: in fold()
757 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in TDOFold()
791 if (getArgType(FInfo) != AMDGPULibFunc::F32 || in replaceWithNative()
792 FInfo.getPrefix() != AMDGPULibFunc::NOPFX || in replaceWithNative()
796 AMDGPULibFunc nf = FInfo; in replaceWithNative()
797 nf.setPrefix(AMDGPULibFunc::NATIVE); in replaceWithNative()
837 (CF1 && (getArgType(FInfo) == AMDGPULibFunc::F32))) in fold_divide()
861 assert((FInfo.getId() == AMDGPULibFunc::EI_POW || in fold_pow()
862 FInfo.getId() == AMDGPULibFunc::EI_POWR || in fold_pow()
863 FInfo.getId() == AMDGPULibFunc::EI_POWN) && in fold_pow()
938 AMDGPULibFunc(issqrt ? AMDGPULibFunc::EI_SQRT in fold_pow()
939 : AMDGPULibFunc::EI_RSQRT, FInfo))) { in fold_pow()
956 double dval = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1006 Constant *ExpExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_EXP2, in fold_pow()
1019 double V = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1025 needcopysign = (FInfo.getId() != AMDGPULibFunc::EI_POWR) && in fold_pow()
1029 needcopysign = needabs = FInfo.getId() != AMDGPULibFunc::EI_POWR && in fold_pow()
1037 needcopysign = needabs = FInfo.getId() != AMDGPULibFunc::EI_POWR; in fold_pow()
1044 double V = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1051 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in fold_pow()
1065 if (needcopysign && (FInfo.getId() == AMDGPULibFunc::EI_POW)) { in fold_pow()
1070 double y = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1080 double y = (getArgType(FInfo) == AMDGPULibFunc::F32) in fold_pow()
1093 Constant *AbsExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_FABS, in fold_pow()
1102 Constant *LogExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_LOG2, in fold_pow()
1109 if (FInfo.getId() == AMDGPULibFunc::EI_POWN) { in fold_pow()
1162 if (Constant *FPExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_SQRT, in fold_rootn()
1171 if (Constant *FPExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_CBRT, in fold_rootn()
1189 if (Constant *FPExpr = getFunction(M, AMDGPULibFunc(AMDGPULibFunc::EI_RSQRT, in fold_rootn()
1247 if (getArgType(FInfo) == AMDGPULibFunc::F64 || !HasNative(FInfo.getId())) in getNativeFunction()
1250 nf.setPrefix(AMDGPULibFunc::NATIVE); in getNativeFunction()
1257 if (getArgType(FInfo) == AMDGPULibFunc::F32 && (getVecSize(FInfo) == 1) && in fold_sqrt()
1258 (FInfo.getPrefix() != AMDGPULibFunc::NATIVE)) { in fold_sqrt()
1260 CI->getModule(), AMDGPULibFunc(AMDGPULibFunc::EI_SQRT, FInfo))) { in fold_sqrt()
1275 AMDGPULibFunc fInfo; in fold_sincos()
1276 if (!AMDGPULibFunc::parse(CI->getCalledFunction()->getName(), fInfo)) in fold_sincos()
1279 assert(fInfo.getId() == AMDGPULibFunc::EI_SIN || in fold_sincos()
1280 fInfo.getId() == AMDGPULibFunc::EI_COS); in fold_sincos()
1281 bool const isSin = fInfo.getId() == AMDGPULibFunc::EI_SIN; in fold_sincos()
1303 fInfo.setId(isSin ? AMDGPULibFunc::EI_COS : AMDGPULibFunc::EI_SIN); in fold_sincos()
1335 AMDGPULibFunc nf(AMDGPULibFunc::EI_SINCOS, fInfo); in fold_sincos()
1336 nf.getLeads()[0].PtrKind = AMDGPULibFunc::getEPtrKindFromAddrSpace(AMDGPUAS::FLAT_ADDRESS); in fold_sincos()
1408 opr0 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1414 opr1 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1420 opr2 = (getArgType(FInfo) == AMDGPULibFunc::F64) in evaluateScalarMathFunc()
1428 case AMDGPULibFunc::EI_ACOS: in evaluateScalarMathFunc()
1432 case AMDGPULibFunc::EI_ACOSH: in evaluateScalarMathFunc()
1437 case AMDGPULibFunc::EI_ACOSPI: in evaluateScalarMathFunc()
1441 case AMDGPULibFunc::EI_ASIN: in evaluateScalarMathFunc()
1445 case AMDGPULibFunc::EI_ASINH: in evaluateScalarMathFunc()
1450 case AMDGPULibFunc::EI_ASINPI: in evaluateScalarMathFunc()
1454 case AMDGPULibFunc::EI_ATAN: in evaluateScalarMathFunc()
1458 case AMDGPULibFunc::EI_ATANH: in evaluateScalarMathFunc()
1463 case AMDGPULibFunc::EI_ATANPI: in evaluateScalarMathFunc()
1467 case AMDGPULibFunc::EI_CBRT: in evaluateScalarMathFunc()
1471 case AMDGPULibFunc::EI_COS: in evaluateScalarMathFunc()
1475 case AMDGPULibFunc::EI_COSH: in evaluateScalarMathFunc()
1479 case AMDGPULibFunc::EI_COSPI: in evaluateScalarMathFunc()
1483 case AMDGPULibFunc::EI_EXP: in evaluateScalarMathFunc()
1487 case AMDGPULibFunc::EI_EXP2: in evaluateScalarMathFunc()
1491 case AMDGPULibFunc::EI_EXP10: in evaluateScalarMathFunc()
1495 case AMDGPULibFunc::EI_EXPM1: in evaluateScalarMathFunc()
1499 case AMDGPULibFunc::EI_LOG: in evaluateScalarMathFunc()
1503 case AMDGPULibFunc::EI_LOG2: in evaluateScalarMathFunc()
1507 case AMDGPULibFunc::EI_LOG10: in evaluateScalarMathFunc()
1511 case AMDGPULibFunc::EI_RSQRT: in evaluateScalarMathFunc()
1515 case AMDGPULibFunc::EI_SIN: in evaluateScalarMathFunc()
1519 case AMDGPULibFunc::EI_SINH: in evaluateScalarMathFunc()
1523 case AMDGPULibFunc::EI_SINPI: in evaluateScalarMathFunc()
1527 case AMDGPULibFunc::EI_SQRT: in evaluateScalarMathFunc()
1531 case AMDGPULibFunc::EI_TAN: in evaluateScalarMathFunc()
1535 case AMDGPULibFunc::EI_TANH: in evaluateScalarMathFunc()
1539 case AMDGPULibFunc::EI_TANPI: in evaluateScalarMathFunc()
1543 case AMDGPULibFunc::EI_RECIP: in evaluateScalarMathFunc()
1548 case AMDGPULibFunc::EI_DIVIDE: in evaluateScalarMathFunc()
1552 case AMDGPULibFunc::EI_POW: in evaluateScalarMathFunc()
1553 case AMDGPULibFunc::EI_POWR: in evaluateScalarMathFunc()
1557 case AMDGPULibFunc::EI_POWN: { in evaluateScalarMathFunc()
1566 case AMDGPULibFunc::EI_ROOTN: { in evaluateScalarMathFunc()
1576 case AMDGPULibFunc::EI_SINCOS: in evaluateScalarMathFunc()
1582 case AMDGPULibFunc::EI_FMA: in evaluateScalarMathFunc()
1583 case AMDGPULibFunc::EI_MAD: in evaluateScalarMathFunc()
1606 if (FInfo.getId() != AMDGPULibFunc::EI_SINCOS) in evaluateCall()
1620 bool hasTwoResults = (FInfo.getId() == AMDGPULibFunc::EI_SINCOS); in evaluateCall()
1648 if (getArgType(FInfo) == AMDGPULibFunc::F32) { in evaluateCall()
1672 assert(FInfo.getId() == AMDGPULibFunc::EI_SINCOS && in evaluateCall()