| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #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)
- #endif
- ATTRIBUTE_ENUM(AlwaysInline,alwaysinline)
- ATTRIBUTE_ENUM(ArgMemOnly,argmemonly)
- ATTRIBUTE_ENUM(Builtin,builtin)
- ATTRIBUTE_ENUM(Cold,cold)
- ATTRIBUTE_ENUM(Convergent,convergent)
- ATTRIBUTE_ENUM(Hot,hot)
- ATTRIBUTE_ENUM(ImmArg,immarg)
- ATTRIBUTE_ENUM(InReg,inreg)
- ATTRIBUTE_ENUM(InaccessibleMemOnly,inaccessiblememonly)
- ATTRIBUTE_ENUM(InaccessibleMemOrArgMemOnly,inaccessiblemem_or_argmemonly)
- ATTRIBUTE_ENUM(InlineHint,inlinehint)
- ATTRIBUTE_ENUM(JumpTable,jumptable)
- ATTRIBUTE_ENUM(MinSize,minsize)
- 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(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(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(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(UWTable,uwtable)
- ATTRIBUTE_ENUM(WillReturn,willreturn)
- ATTRIBUTE_ENUM(WriteOnly,writeonly)
- ATTRIBUTE_ENUM(ZExt,zeroext)
- ATTRIBUTE_ENUM(ByRef,byref)
- ATTRIBUTE_ENUM(ByVal,byval)
- ATTRIBUTE_ENUM(InAlloca,inalloca)
- ATTRIBUTE_ENUM(MustProgress,mustprogress)
- ATTRIBUTE_ENUM(Preallocated,preallocated)
- ATTRIBUTE_ENUM(StructRet,sret)
- ATTRIBUTE_ENUM(Alignment,align)
- ATTRIBUTE_ENUM(AllocSize,allocsize)
- ATTRIBUTE_ENUM(Dereferenceable,dereferenceable)
- ATTRIBUTE_ENUM(DereferenceableOrNull,dereferenceable_or_null)
- ATTRIBUTE_ENUM(StackAlignment,alignstack)
- ATTRIBUTE_ENUM(VScaleRange,vscale_range)
- #undef ATTRIBUTE_ENUM
- #ifndef ATTRIBUTE_STRBOOL
- #define ATTRIBUTE_STRBOOL(FIRST, SECOND) ATTRIBUTE_ALL(FIRST, SECOND)
- #endif
- 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_COMPAT_FUNC
- #undef GET_ATTR_COMPAT_FUNC
- static 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);
- return Ret;
- }
- static inline void mergeFnAttrs(Function &Caller,
- const Function &Callee) {
- setAND<NoNansFPMathAttr>(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);
- setAND<NoInfsFPMathAttr>(Caller, Callee);
- }
- #endif
|