Blame | Last modification | View Log | Download | RSS feed
#ifdef GET_ATTR_NAMES#undef GET_ATTR_NAMES#ifndef ATTRIBUTE_ALL#define ATTRIBUTE_ALL(FIRST, SECOND)#endif#ifndef ATTRIBUTE_ENUM#define ATTRIBUTE_ENUM(FIRST, SECOND) ATTRIBUTE_ALL(FIRST, SECOND)#endifATTRIBUTE_ENUM(AllocAlign,allocalign)ATTRIBUTE_ENUM(AllocatedPointer,allocptr)ATTRIBUTE_ENUM(AlwaysInline,alwaysinline)ATTRIBUTE_ENUM(Builtin,builtin)ATTRIBUTE_ENUM(Cold,cold)ATTRIBUTE_ENUM(Convergent,convergent)ATTRIBUTE_ENUM(DisableSanitizerInstrumentation,disable_sanitizer_instrumentation)ATTRIBUTE_ENUM(FnRetThunkExtern,fn_ret_thunk_extern)ATTRIBUTE_ENUM(Hot,hot)ATTRIBUTE_ENUM(ImmArg,immarg)ATTRIBUTE_ENUM(InReg,inreg)ATTRIBUTE_ENUM(InlineHint,inlinehint)ATTRIBUTE_ENUM(JumpTable,jumptable)ATTRIBUTE_ENUM(MinSize,minsize)ATTRIBUTE_ENUM(MustProgress,mustprogress)ATTRIBUTE_ENUM(Naked,naked)ATTRIBUTE_ENUM(Nest,nest)ATTRIBUTE_ENUM(NoAlias,noalias)ATTRIBUTE_ENUM(NoBuiltin,nobuiltin)ATTRIBUTE_ENUM(NoCallback,nocallback)ATTRIBUTE_ENUM(NoCapture,nocapture)ATTRIBUTE_ENUM(NoCfCheck,nocf_check)ATTRIBUTE_ENUM(NoDuplicate,noduplicate)ATTRIBUTE_ENUM(NoFree,nofree)ATTRIBUTE_ENUM(NoImplicitFloat,noimplicitfloat)ATTRIBUTE_ENUM(NoInline,noinline)ATTRIBUTE_ENUM(NoMerge,nomerge)ATTRIBUTE_ENUM(NoProfile,noprofile)ATTRIBUTE_ENUM(NoRecurse,norecurse)ATTRIBUTE_ENUM(NoRedZone,noredzone)ATTRIBUTE_ENUM(NoReturn,noreturn)ATTRIBUTE_ENUM(NoSanitizeBounds,nosanitize_bounds)ATTRIBUTE_ENUM(NoSanitizeCoverage,nosanitize_coverage)ATTRIBUTE_ENUM(NoSync,nosync)ATTRIBUTE_ENUM(NoUndef,noundef)ATTRIBUTE_ENUM(NoUnwind,nounwind)ATTRIBUTE_ENUM(NonLazyBind,nonlazybind)ATTRIBUTE_ENUM(NonNull,nonnull)ATTRIBUTE_ENUM(NullPointerIsValid,null_pointer_is_valid)ATTRIBUTE_ENUM(OptForFuzzing,optforfuzzing)ATTRIBUTE_ENUM(OptimizeForSize,optsize)ATTRIBUTE_ENUM(OptimizeNone,optnone)ATTRIBUTE_ENUM(PresplitCoroutine,presplitcoroutine)ATTRIBUTE_ENUM(ReadNone,readnone)ATTRIBUTE_ENUM(ReadOnly,readonly)ATTRIBUTE_ENUM(Returned,returned)ATTRIBUTE_ENUM(ReturnsTwice,returns_twice)ATTRIBUTE_ENUM(SExt,signext)ATTRIBUTE_ENUM(SafeStack,safestack)ATTRIBUTE_ENUM(SanitizeAddress,sanitize_address)ATTRIBUTE_ENUM(SanitizeHWAddress,sanitize_hwaddress)ATTRIBUTE_ENUM(SanitizeMemTag,sanitize_memtag)ATTRIBUTE_ENUM(SanitizeMemory,sanitize_memory)ATTRIBUTE_ENUM(SanitizeThread,sanitize_thread)ATTRIBUTE_ENUM(ShadowCallStack,shadowcallstack)ATTRIBUTE_ENUM(SkipProfile,skipprofile)ATTRIBUTE_ENUM(Speculatable,speculatable)ATTRIBUTE_ENUM(SpeculativeLoadHardening,speculative_load_hardening)ATTRIBUTE_ENUM(StackProtect,ssp)ATTRIBUTE_ENUM(StackProtectReq,sspreq)ATTRIBUTE_ENUM(StackProtectStrong,sspstrong)ATTRIBUTE_ENUM(StrictFP,strictfp)ATTRIBUTE_ENUM(SwiftAsync,swiftasync)ATTRIBUTE_ENUM(SwiftError,swifterror)ATTRIBUTE_ENUM(SwiftSelf,swiftself)ATTRIBUTE_ENUM(WillReturn,willreturn)ATTRIBUTE_ENUM(WriteOnly,writeonly)ATTRIBUTE_ENUM(ZExt,zeroext)ATTRIBUTE_ENUM(ByRef,byref)ATTRIBUTE_ENUM(ByVal,byval)ATTRIBUTE_ENUM(ElementType,elementtype)ATTRIBUTE_ENUM(InAlloca,inalloca)ATTRIBUTE_ENUM(Preallocated,preallocated)ATTRIBUTE_ENUM(StructRet,sret)ATTRIBUTE_ENUM(Alignment,align)ATTRIBUTE_ENUM(AllocKind,allockind)ATTRIBUTE_ENUM(AllocSize,allocsize)ATTRIBUTE_ENUM(Dereferenceable,dereferenceable)ATTRIBUTE_ENUM(DereferenceableOrNull,dereferenceable_or_null)ATTRIBUTE_ENUM(Memory,memory)ATTRIBUTE_ENUM(StackAlignment,alignstack)ATTRIBUTE_ENUM(UWTable,uwtable)ATTRIBUTE_ENUM(VScaleRange,vscale_range)#undef ATTRIBUTE_ENUM#ifndef ATTRIBUTE_STRBOOL#define ATTRIBUTE_STRBOOL(FIRST, SECOND) ATTRIBUTE_ALL(FIRST, SECOND)#endifATTRIBUTE_STRBOOL(ApproxFuncFPMath,approx-func-fp-math)ATTRIBUTE_STRBOOL(LessPreciseFPMAD,less-precise-fpmad)ATTRIBUTE_STRBOOL(NoInfsFPMath,no-infs-fp-math)ATTRIBUTE_STRBOOL(NoInlineLineTables,no-inline-line-tables)ATTRIBUTE_STRBOOL(NoJumpTables,no-jump-tables)ATTRIBUTE_STRBOOL(NoNansFPMath,no-nans-fp-math)ATTRIBUTE_STRBOOL(NoSignedZerosFPMath,no-signed-zeros-fp-math)ATTRIBUTE_STRBOOL(ProfileSampleAccurate,profile-sample-accurate)ATTRIBUTE_STRBOOL(UnsafeFPMath,unsafe-fp-math)ATTRIBUTE_STRBOOL(UseSampleProfile,use-sample-profile)#undef ATTRIBUTE_STRBOOL#undef ATTRIBUTE_ALL#endif#ifdef GET_ATTR_ENUM#undef GET_ATTR_ENUMFirstEnumAttr = 1,AllocAlign = 1,AllocatedPointer = 2,AlwaysInline = 3,Builtin = 4,Cold = 5,Convergent = 6,DisableSanitizerInstrumentation = 7,FnRetThunkExtern = 8,Hot = 9,ImmArg = 10,InReg = 11,InlineHint = 12,JumpTable = 13,MinSize = 14,MustProgress = 15,Naked = 16,Nest = 17,NoAlias = 18,NoBuiltin = 19,NoCallback = 20,NoCapture = 21,NoCfCheck = 22,NoDuplicate = 23,NoFree = 24,NoImplicitFloat = 25,NoInline = 26,NoMerge = 27,NoProfile = 28,NoRecurse = 29,NoRedZone = 30,NoReturn = 31,NoSanitizeBounds = 32,NoSanitizeCoverage = 33,NoSync = 34,NoUndef = 35,NoUnwind = 36,NonLazyBind = 37,NonNull = 38,NullPointerIsValid = 39,OptForFuzzing = 40,OptimizeForSize = 41,OptimizeNone = 42,PresplitCoroutine = 43,ReadNone = 44,ReadOnly = 45,Returned = 46,ReturnsTwice = 47,SExt = 48,SafeStack = 49,SanitizeAddress = 50,SanitizeHWAddress = 51,SanitizeMemTag = 52,SanitizeMemory = 53,SanitizeThread = 54,ShadowCallStack = 55,SkipProfile = 56,Speculatable = 57,SpeculativeLoadHardening = 58,StackProtect = 59,StackProtectReq = 60,StackProtectStrong = 61,StrictFP = 62,SwiftAsync = 63,SwiftError = 64,SwiftSelf = 65,WillReturn = 66,WriteOnly = 67,ZExt = 68,LastEnumAttr = 68,FirstTypeAttr = 69,ByRef = 69,ByVal = 70,ElementType = 71,InAlloca = 72,Preallocated = 73,StructRet = 74,LastTypeAttr = 74,FirstIntAttr = 75,Alignment = 75,AllocKind = 76,AllocSize = 77,Dereferenceable = 78,DereferenceableOrNull = 79,Memory = 80,StackAlignment = 81,UWTable = 82,VScaleRange = 83,LastIntAttr = 83,#endif#ifdef GET_ATTR_COMPAT_FUNC#undef GET_ATTR_COMPAT_FUNCstatic inline bool hasCompatibleFnAttrs(const Function &Caller,const Function &Callee) {bool Ret = true;Ret &= isEqual<SanitizeAddressAttr>(Caller, Callee);Ret &= isEqual<SanitizeThreadAttr>(Caller, Callee);Ret &= isEqual<SanitizeMemoryAttr>(Caller, Callee);Ret &= isEqual<SanitizeHWAddressAttr>(Caller, Callee);Ret &= isEqual<SanitizeMemTagAttr>(Caller, Callee);Ret &= isEqual<SafeStackAttr>(Caller, Callee);Ret &= isEqual<ShadowCallStackAttr>(Caller, Callee);Ret &= isEqual<UseSampleProfileAttr>(Caller, Callee);Ret &= isEqual<NoProfileAttr>(Caller, Callee);return Ret;}static inline void mergeFnAttrs(Function &Caller,const Function &Callee) {setAND<NoInfsFPMathAttr>(Caller, Callee);setAND<NoNansFPMathAttr>(Caller, Callee);setAND<ApproxFuncFPMathAttr>(Caller, Callee);setAND<NoSignedZerosFPMathAttr>(Caller, Callee);setAND<UnsafeFPMathAttr>(Caller, Callee);setOR<NoImplicitFloatAttr>(Caller, Callee);setOR<NoJumpTablesAttr>(Caller, Callee);setOR<ProfileSampleAccurateAttr>(Caller, Callee);setOR<SpeculativeLoadHardeningAttr>(Caller, Callee);adjustCallerSSPLevel(Caller, Callee);adjustCallerStackProbes(Caller, Callee);adjustCallerStackProbeSize(Caller, Callee);adjustMinLegalVectorWidth(Caller, Callee);adjustNullPointerValidAttr(Caller, Callee);setAND<MustProgressAttr>(Caller, Callee);setAND<LessPreciseFPMADAttr>(Caller, Callee);}#endif#ifdef GET_ATTR_PROP_TABLE#undef GET_ATTR_PROP_TABLEstatic const uint8_t AttrPropTable[] = {0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr | AttributeProperty::RetAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr | AttributeProperty::RetAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr | AttributeProperty::ParamAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr | AttributeProperty::RetAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr | AttributeProperty::RetAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr | AttributeProperty::RetAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr | AttributeProperty::RetAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::FnAttr | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr,0 | AttributeProperty::ParamAttr | AttributeProperty::RetAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::ParamAttr | AttributeProperty::RetAttr,0 | AttributeProperty::ParamAttr | AttributeProperty::RetAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr | AttributeProperty::ParamAttr,0 | AttributeProperty::FnAttr,0 | AttributeProperty::FnAttr,};#endif