Lines Matching defs:AMDGPULibFunc

1 //===-- AMDGPULibFunc.cpp -------------------------------------------------===//
13 #include "AMDGPULibFunc.h"
89 using ID = AMDGPULibFunc::EFuncId;
96 static_cast<unsigned>(AMDGPULibFunc::EI_LAST_MANGLED) &&
99 static_cast<unsigned>(AMDGPULibFunc::EI_LAST_MANGLED);
105 Index + 1 + static_cast<unsigned>(AMDGPULibFunc::EI_LAST_MANGLED));
118 // corresponds to the EFuncId enum at AMDGPULibFunc.h
126 // same order should be preserved for arguments in the AMDGPULibFunc structure
131 // AMDGPULibFunc insc;
353 static AMDGPULibFunc::Param getRetType(AMDGPULibFunc::EFuncId id,
354 const AMDGPULibFunc::Param (&Leads)[2]) {
355 AMDGPULibFunc::Param Res = Leads[0];
358 case AMDGPULibFunc::EI_SINCOS:
359 Res.PtrKind = AMDGPULibFunc::BYVALUE;
368 const AMDGPULibFunc::Param (&Leads)[2];
372 ParamIterator(const AMDGPULibFunc::Param (&leads)[2],
376 AMDGPULibFunc::Param getNextParam();
379 AMDGPULibFunc::Param ParamIterator::getNextParam() {
380 AMDGPULibFunc::Param P;
387 P.ArgType = AMDGPULibFunc::U32; break;
389 P.ArgType = AMDGPULibFunc::I32; P.VectorSize = 4; break;
391 P.ArgType = AMDGPULibFunc::U32; P.VectorSize = 4; break;
393 P.ArgType = AMDGPULibFunc::F32; P.VectorSize = 4; break;
395 P.ArgType = AMDGPULibFunc::U64; break;
397 P.ArgType = AMDGPULibFunc::EVENT; break;
399 P.ArgType = AMDGPULibFunc::SAMPLER; break;
410 P.PtrKind = AMDGPULibFunc::BYVALUE; break;
412 P.VectorSize = 2; P.PtrKind = AMDGPULibFunc::BYVALUE; break;
414 P.VectorSize = 3; P.PtrKind = AMDGPULibFunc::BYVALUE; break;
416 P.VectorSize = 4; P.PtrKind = AMDGPULibFunc::BYVALUE; break;
418 P.VectorSize = 8; P.PtrKind = AMDGPULibFunc::BYVALUE; break;
420 P.VectorSize = 16; P.PtrKind = AMDGPULibFunc::BYVALUE; break;
422 P.PtrKind |= AMDGPULibFunc::CONST; break;
424 P.PtrKind |= AMDGPULibFunc::VOLATILE; break;
426 P.ArgType = AMDGPULibFunc::I32; break;
428 P.ArgType = AMDGPULibFunc::U32; break;
431 P.ArgType &= ~AMDGPULibFunc::BASE_TYPE_MASK;
432 P.ArgType |= AMDGPULibFunc::UINT;
437 case AMDGPULibFunc::IMG1DA: P.VectorSize = 2; break;
438 case AMDGPULibFunc::IMG1DB: P.VectorSize = 1; break;
439 case AMDGPULibFunc::IMG2DA: P.VectorSize = 4; break;
440 case AMDGPULibFunc::IMG1D: P.VectorSize = 1; break;
441 case AMDGPULibFunc::IMG2D: P.VectorSize = 2; break;
442 case AMDGPULibFunc::IMG3D: P.VectorSize = 4; break;
444 P.PtrKind = AMDGPULibFunc::BYVALUE;
445 P.ArgType = AMDGPULibFunc::I32;
449 unsigned AS = AMDGPULibFunc::getAddrSpaceFromEPtrKind(P.PtrKind);
454 P.PtrKind = AMDGPULibFunc::getEPtrKindFromAddrSpace(AS);
455 P.PtrKind |= AMDGPULibFunc::CONST;
554 static AMDGPULibFunc::ENamePrefix parseNamePrefix(StringRef& mangledName) {
556 AMDGPULibFunc::ENamePrefix Pfx =
557 StringSwitch<AMDGPULibFunc::ENamePrefix>(P.first)
558 .Case("native", AMDGPULibFunc::NATIVE)
559 .Case("half" , AMDGPULibFunc::HALF)
560 .Default(AMDGPULibFunc::NOPFX);
562 if (Pfx != AMDGPULibFunc::NOPFX)
588 AMDGPULibFunc::Param Prev;
589 bool parseItaniumParam(StringRef& param, AMDGPULibFunc::Param &res);
594 AMDGPULibFunc::Param &res) {
600 if (eatTerm(param, 'K')) res.PtrKind |= AMDGPULibFunc::CONST;
601 if (eatTerm(param, 'V')) res.PtrKind |= AMDGPULibFunc::VOLATILE;
611 res.PtrKind = AMDGPULibFunc::BYVALUE;
623 res.ArgType = StringSwitch<AMDGPULibFunc::EType>
625 .Case("ocl_image1darray" , AMDGPULibFunc::IMG1DA)
626 .Case("ocl_image1dbuffer", AMDGPULibFunc::IMG1DB)
627 .Case("ocl_image2darray" , AMDGPULibFunc::IMG2DA)
628 .Case("ocl_image1d" , AMDGPULibFunc::IMG1D)
629 .Case("ocl_image2d" , AMDGPULibFunc::IMG2D)
630 .Case("ocl_image3d" , AMDGPULibFunc::IMG3D)
631 .Case("ocl_event" , AMDGPULibFunc::DUMMY)
632 .Case("ocl_sampler" , AMDGPULibFunc::DUMMY)
633 .Default(AMDGPULibFunc::DUMMY);
637 case 'h': res.ArgType = AMDGPULibFunc::U8; break;
638 case 't': res.ArgType = AMDGPULibFunc::U16; break;
639 case 'j': res.ArgType = AMDGPULibFunc::U32; break;
640 case 'm': res.ArgType = AMDGPULibFunc::U64; break;
641 case 'c': res.ArgType = AMDGPULibFunc::I8; break;
642 case 's': res.ArgType = AMDGPULibFunc::I16; break;
643 case 'i': res.ArgType = AMDGPULibFunc::I32; break;
644 case 'l': res.ArgType = AMDGPULibFunc::I64; break;
645 case 'f': res.ArgType = AMDGPULibFunc::F32; break;
646 case 'd': res.ArgType = AMDGPULibFunc::F64; break;
648 res.ArgType = AMDGPULibFunc::F16; break;
692 bool AMDGPULibFunc::parse(StringRef FuncName, AMDGPULibFunc &F) {
741 static const char *getItaniumTypeName(AMDGPULibFunc::EType T) {
743 case AMDGPULibFunc::U8: return "h";
744 case AMDGPULibFunc::U16: return "t";
745 case AMDGPULibFunc::U32: return "j";
746 case AMDGPULibFunc::U64: return "m";
747 case AMDGPULibFunc::I8: return "c";
748 case AMDGPULibFunc::I16: return "s";
749 case AMDGPULibFunc::I32: return "i";
750 case AMDGPULibFunc::I64: return "l";
751 case AMDGPULibFunc::F16: return "Dh";
752 case AMDGPULibFunc::F32: return "f";
753 case AMDGPULibFunc::F64: return "d";
754 case AMDGPULibFunc::IMG1DA: return "16ocl_image1darray";
755 case AMDGPULibFunc::IMG1DB: return "17ocl_image1dbuffer";
756 case AMDGPULibFunc::IMG2DA: return "16ocl_image2darray";
757 case AMDGPULibFunc::IMG1D: return "11ocl_image1d";
758 case AMDGPULibFunc::IMG2D: return "11ocl_image2d";
759 case AMDGPULibFunc::IMG3D: return "11ocl_image3d";
760 case AMDGPULibFunc::SAMPLER: return "11ocl_sampler";
761 case AMDGPULibFunc::EVENT: return "9ocl_event";
794 SmallVector<AMDGPULibFunc::Param, 10> Str; // list of accumulated substitutions
797 int findSubst(const AMDGPULibFunc::Param& P) const {
799 const AMDGPULibFunc::Param& T = Str[I];
810 bool trySubst(Stream& os, const AMDGPULibFunc::Param& p) {
826 void operator()(Stream& os, AMDGPULibFunc::Param p) {
838 AMDGPULibFunc::Param Ptr;
843 if (p.PtrKind & AMDGPULibFunc::CONST) os << 'K';
844 if (p.PtrKind & AMDGPULibFunc::VOLATILE) os << 'V';
860 os << getItaniumTypeName((AMDGPULibFunc::EType)p.ArgType);
898 P.ArgType = AMDGPULibFunc::F32;
901 P.ArgType = AMDGPULibFunc::F64;
904 P.ArgType = AMDGPULibFunc::F16;
909 P.ArgType = Signed ? AMDGPULibFunc::I8 : AMDGPULibFunc::U8;
912 P.ArgType = Signed ? AMDGPULibFunc::I16 : AMDGPULibFunc::U16;
915 P.ArgType = Signed ? AMDGPULibFunc::I32 : AMDGPULibFunc::U32;
918 P.ArgType = Signed ? AMDGPULibFunc::I64 : AMDGPULibFunc::U64;
934 const AMDGPULibFunc::Param& P,
938 case AMDGPULibFunc::U8:
939 case AMDGPULibFunc::I8: T = Type::getInt8Ty(C); break;
940 case AMDGPULibFunc::U16:
941 case AMDGPULibFunc::I16: T = Type::getInt16Ty(C); break;
942 case AMDGPULibFunc::U32:
943 case AMDGPULibFunc::I32: T = Type::getInt32Ty(C); break;
944 case AMDGPULibFunc::U64:
945 case AMDGPULibFunc::I64: T = Type::getInt64Ty(C); break;
946 case AMDGPULibFunc::F16: T = Type::getHalfTy(C); break;
947 case AMDGPULibFunc::F32: T = Type::getFloatTy(C); break;
948 case AMDGPULibFunc::F64: T = Type::getDoubleTy(C); break;
950 case AMDGPULibFunc::IMG1DA:
951 case AMDGPULibFunc::IMG1DB:
952 case AMDGPULibFunc::IMG2DA:
953 case AMDGPULibFunc::IMG1D:
954 case AMDGPULibFunc::IMG2D:
955 case AMDGPULibFunc::IMG3D:
957 case AMDGPULibFunc::SAMPLER:
959 case AMDGPULibFunc::EVENT:
967 if (P.PtrKind != AMDGPULibFunc::BYVALUE)
968 T = useAddrSpace ? T->getPointerTo((P.PtrKind & AMDGPULibFunc::ADDR_SPACE)
1002 bool AMDGPULibFunc::isCompatibleSignature(const FunctionType *FuncTy) const {
1007 Function *AMDGPULibFunc::getFunction(Module *M, const AMDGPULibFunc &fInfo) {
1023 FunctionCallee AMDGPULibFunc::getOrInsertFunction(Module *M,
1024 const AMDGPULibFunc &fInfo) {
1081 Id = AMDGPULibFunc::EI_NONE;
1085 AMDGPULibFunc::AMDGPULibFunc(const AMDGPULibFunc &F) {
1094 AMDGPULibFunc &AMDGPULibFunc::operator=(const AMDGPULibFunc &F) {
1097 new (this) AMDGPULibFunc(F);
1101 AMDGPULibFunc::AMDGPULibFunc(EFuncId Id, const AMDGPULibFunc &CopyFrom) {
1108 AMDGPULibFunc::AMDGPULibFunc(EFuncId Id, FunctionType *FT, bool SignedInts) {
1112 AMDGPULibFunc::AMDGPULibFunc(StringRef Name, FunctionType *FT) {
1116 void AMDGPULibFunc::initMangled() {
1120 AMDGPULibFunc::Param *AMDGPULibFunc::getLeads() {
1126 const AMDGPULibFunc::Param *AMDGPULibFunc::getLeads() const {