Warning, /include/llvm/IR/Attributes.td is written in an unsupported language. File is not indexed.
0001 //===- Attributes.td - Defines all LLVM attributes ---------*- tablegen -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This file defines all the LLVM attributes.
0010 //
0011 //===----------------------------------------------------------------------===//
0012
0013 /// Attribute property base class.
0014 class AttrProperty;
0015
0016 /// Can be used as function attribute.
0017 def FnAttr : AttrProperty;
0018
0019 /// Can be used as parameter attribute.
0020 def ParamAttr : AttrProperty;
0021
0022 /// Can be used as return attribute.
0023 def RetAttr : AttrProperty;
0024
0025
0026
0027 /// Intersection rules. Used for example in sinking/hoisting two
0028 /// callbases to find a set of attributes that apply to both.
0029 /// Note, there are some attributes we can (probably) legally drop
0030 /// but are intentionally excluded as of now.
0031 ///
0032 /// When intersecting the attributes both must be present and equal.
0033 /// Use this for attributes it is not safe to drop at any time. E.g.
0034 /// `byval(Ty)` on a parameter.
0035 def IntersectPreserve : AttrProperty;
0036
0037 /// When intersecting take the AND of the two attrs.
0038 /// Only valid for Enum attrs.
0039 def IntersectAnd : AttrProperty;
0040
0041 /// When intersecting take the min value of the two attrs.
0042 /// Only valid for Int attrs.
0043 def IntersectMin : AttrProperty;
0044
0045 /// When intersecting rely on some specially defined code.
0046 def IntersectCustom : AttrProperty;
0047
0048
0049
0050 /// Attribute base class.
0051 class Attr<string S, AttrProperty I, list<AttrProperty> P> {
0052 // String representation of this attribute in the IR.
0053 string AttrString = S;
0054 list<AttrProperty> Properties = P # [I];
0055 }
0056
0057 /// Enum attribute.
0058 class EnumAttr<string S, AttrProperty I, list<AttrProperty> P> : Attr<S, I, P>;
0059
0060 /// Int attribute.
0061 class IntAttr<string S, AttrProperty I, list<AttrProperty> P> : Attr<S, I, P>;
0062
0063 /// Type attribute.
0064 class TypeAttr<string S, AttrProperty I, list<AttrProperty> P> : Attr<S, I, P>;
0065
0066 /// StringBool attribute.
0067 class StrBoolAttr<string S> : Attr<S, IntersectPreserve, []>;
0068
0069 /// Arbitrary string attribute.
0070 class ComplexStrAttr<string S, list<AttrProperty> P> : Attr<S, IntersectPreserve, P>;
0071
0072 /// ConstantRange attribute.
0073 class ConstantRangeAttr<string S, AttrProperty I, list<AttrProperty> P> : Attr<S, I, P>;
0074
0075 /// ConstantRangeList attribute.
0076 class ConstantRangeListAttr<string S, AttrProperty I, list<AttrProperty> P> : Attr<S, I, P>;
0077
0078 /// Target-independent enum attributes.
0079
0080 /// Alignment of parameter (5 bits) stored as log2 of alignment with +1 bias.
0081 /// 0 means unaligned (different from align(1)).
0082 def Alignment : IntAttr<"align", IntersectCustom, [ParamAttr, RetAttr]>;
0083
0084 /// Parameter of a function that tells us the alignment of an allocation, as in
0085 /// aligned_alloc and aligned ::operator::new.
0086 def AllocAlign: EnumAttr<"allocalign", IntersectAnd, [ParamAttr]>;
0087
0088 /// Describes behavior of an allocator function in terms of known properties.
0089 def AllocKind: IntAttr<"allockind", IntersectPreserve, [FnAttr]>;
0090
0091 /// Parameter is the pointer to be manipulated by the allocator function.
0092 def AllocatedPointer : EnumAttr<"allocptr", IntersectAnd, [ParamAttr]>;
0093
0094 /// The result of the function is guaranteed to point to a number of bytes that
0095 /// we can determine if we know the value of the function's arguments.
0096 def AllocSize : IntAttr<"allocsize", IntersectPreserve, [FnAttr]>;
0097
0098 /// inline=always.
0099 def AlwaysInline : EnumAttr<"alwaysinline", IntersectPreserve, [FnAttr]>;
0100
0101 /// Callee is recognized as a builtin, despite nobuiltin attribute on its
0102 /// declaration.
0103 def Builtin : EnumAttr<"builtin", IntersectPreserve, [FnAttr]>;
0104
0105 /// Pass structure by value.
0106 def ByVal : TypeAttr<"byval", IntersectPreserve, [ParamAttr]>;
0107
0108 /// Mark in-memory ABI type.
0109 def ByRef : TypeAttr<"byref", IntersectPreserve, [ParamAttr]>;
0110
0111 /// Parameter or return value may not contain uninitialized or poison bits.
0112 def NoUndef : EnumAttr<"noundef", IntersectAnd, [ParamAttr, RetAttr]>;
0113
0114 /// Marks function as being in a cold path.
0115 def Cold : EnumAttr<"cold", IntersectAnd, [FnAttr]>;
0116
0117 /// Can only be moved to control-equivalent blocks.
0118 /// NB: Could be IntersectCustom with "or" handling.
0119 def Convergent : EnumAttr<"convergent", IntersectPreserve, [FnAttr]>;
0120
0121 /// Marks function as being in a hot path and frequently called.
0122 def Hot: EnumAttr<"hot", IntersectAnd, [FnAttr]>;
0123
0124 /// Pointer is known to be dereferenceable.
0125 def Dereferenceable : IntAttr<"dereferenceable", IntersectMin, [ParamAttr, RetAttr]>;
0126
0127 /// Pointer is either null or dereferenceable.
0128 def DereferenceableOrNull : IntAttr<"dereferenceable_or_null", IntersectMin,
0129 [ParamAttr, RetAttr]>;
0130
0131 /// Do not instrument function with sanitizers.
0132 def DisableSanitizerInstrumentation: EnumAttr<"disable_sanitizer_instrumentation", IntersectPreserve, [FnAttr]>;
0133
0134 /// Provide pointer element type to intrinsic.
0135 def ElementType : TypeAttr<"elementtype", IntersectPreserve, [ParamAttr]>;
0136
0137 /// Whether to keep return instructions, or replace with a jump to an external
0138 /// symbol.
0139 def FnRetThunkExtern : EnumAttr<"fn_ret_thunk_extern", IntersectPreserve, [FnAttr]>;
0140
0141 /// Function has a hybrid patchable thunk.
0142 def HybridPatchable : EnumAttr<"hybrid_patchable", IntersectPreserve, [FnAttr]>;
0143
0144 /// Pass structure in an alloca.
0145 def InAlloca : TypeAttr<"inalloca", IntersectPreserve, [ParamAttr]>;
0146
0147 /// Pointer argument memory is initialized.
0148 def Initializes : ConstantRangeListAttr<"initializes", IntersectPreserve, [ParamAttr]>;
0149
0150 /// Source said inlining was desirable.
0151 def InlineHint : EnumAttr<"inlinehint", IntersectAnd, [FnAttr]>;
0152
0153 /// Force argument to be passed in register.
0154 def InReg : EnumAttr<"inreg", IntersectPreserve, [ParamAttr, RetAttr]>;
0155
0156 /// Build jump-instruction tables and replace refs.
0157 def JumpTable : EnumAttr<"jumptable", IntersectPreserve, [FnAttr]>;
0158
0159 /// Memory effects of the function.
0160 def Memory : IntAttr<"memory", IntersectCustom, [FnAttr]>;
0161
0162 /// Forbidden floating-point classes.
0163 def NoFPClass : IntAttr<"nofpclass", IntersectCustom, [ParamAttr, RetAttr]>;
0164
0165 /// Function must be optimized for size first.
0166 def MinSize : EnumAttr<"minsize", IntersectPreserve, [FnAttr]>;
0167
0168 /// Naked function.
0169 def Naked : EnumAttr<"naked", IntersectPreserve, [FnAttr]>;
0170
0171 /// Nested function static chain.
0172 def Nest : EnumAttr<"nest", IntersectPreserve, [ParamAttr]>;
0173
0174 /// Considered to not alias after call.
0175 def NoAlias : EnumAttr<"noalias", IntersectAnd, [ParamAttr, RetAttr]>;
0176
0177 /// Callee isn't recognized as a builtin.
0178 def NoBuiltin : EnumAttr<"nobuiltin", IntersectPreserve, [FnAttr]>;
0179
0180 /// Function cannot enter into caller's translation unit.
0181 def NoCallback : EnumAttr<"nocallback", IntersectAnd, [FnAttr]>;
0182
0183 /// Function creates no aliases of pointer.
0184 def NoCapture : EnumAttr<"nocapture", IntersectAnd, [ParamAttr]>;
0185
0186 /// Specify how the pointer may be captured.
0187 def Captures : IntAttr<"captures", IntersectCustom, [ParamAttr]>;
0188
0189 /// Function is not a source of divergence.
0190 def NoDivergenceSource : EnumAttr<"nodivergencesource", IntersectAnd, [FnAttr]>;
0191
0192 /// Call cannot be duplicated.
0193 def NoDuplicate : EnumAttr<"noduplicate", IntersectPreserve, [FnAttr]>;
0194
0195 /// No extension needed before/after call (high bits are undefined).
0196 def NoExt : EnumAttr<"noext", IntersectPreserve, [ParamAttr, RetAttr]>;
0197
0198 /// Function does not deallocate memory.
0199 def NoFree : EnumAttr<"nofree", IntersectAnd, [FnAttr, ParamAttr]>;
0200
0201 /// Argument is dead if the call unwinds.
0202 def DeadOnUnwind : EnumAttr<"dead_on_unwind", IntersectAnd, [ParamAttr]>;
0203
0204 /// Disable implicit floating point insts.
0205 def NoImplicitFloat : EnumAttr<"noimplicitfloat", IntersectPreserve, [FnAttr]>;
0206
0207 /// inline=never.
0208 def NoInline : EnumAttr<"noinline", IntersectPreserve, [FnAttr]>;
0209
0210 /// Function is called early and/or often, so lazy binding isn't worthwhile.
0211 def NonLazyBind : EnumAttr<"nonlazybind", IntersectPreserve, [FnAttr]>;
0212
0213 /// Disable merging for specified functions or call sites.
0214 def NoMerge : EnumAttr<"nomerge", IntersectPreserve, [FnAttr]>;
0215
0216 /// Pointer is known to be not null.
0217 def NonNull : EnumAttr<"nonnull", IntersectAnd, [ParamAttr, RetAttr]>;
0218
0219 /// The function does not recurse.
0220 def NoRecurse : EnumAttr<"norecurse", IntersectAnd, [FnAttr]>;
0221
0222 /// Disable redzone.
0223 def NoRedZone : EnumAttr<"noredzone", IntersectPreserve, [FnAttr]>;
0224
0225 /// Mark the function as not returning.
0226 def NoReturn : EnumAttr<"noreturn", IntersectAnd, [FnAttr]>;
0227
0228 /// Function does not synchronize.
0229 def NoSync : EnumAttr<"nosync", IntersectAnd, [FnAttr]>;
0230
0231 /// Disable Indirect Branch Tracking.
0232 def NoCfCheck : EnumAttr<"nocf_check", IntersectPreserve, [FnAttr]>;
0233
0234 /// Function should not be instrumented.
0235 def NoProfile : EnumAttr<"noprofile", IntersectPreserve, [FnAttr]>;
0236
0237 /// This function should not be instrumented but it is ok to inline profiled
0238 // functions into it.
0239 def SkipProfile : EnumAttr<"skipprofile", IntersectPreserve, [FnAttr]>;
0240
0241 /// Function doesn't unwind stack.
0242 def NoUnwind : EnumAttr<"nounwind", IntersectAnd, [FnAttr]>;
0243
0244 /// No SanitizeBounds instrumentation.
0245 def NoSanitizeBounds : EnumAttr<"nosanitize_bounds", IntersectPreserve, [FnAttr]>;
0246
0247 /// No SanitizeCoverage instrumentation.
0248 def NoSanitizeCoverage : EnumAttr<"nosanitize_coverage", IntersectPreserve, [FnAttr]>;
0249
0250 /// Null pointer in address space zero is valid.
0251 def NullPointerIsValid : EnumAttr<"null_pointer_is_valid", IntersectPreserve, [FnAttr]>;
0252
0253 /// Select optimizations that give decent debug info.
0254 def OptimizeForDebugging : EnumAttr<"optdebug", IntersectPreserve, [FnAttr]>;
0255
0256 /// Select optimizations for best fuzzing signal.
0257 def OptForFuzzing : EnumAttr<"optforfuzzing", IntersectPreserve, [FnAttr]>;
0258
0259 /// opt_size.
0260 def OptimizeForSize : EnumAttr<"optsize", IntersectPreserve, [FnAttr]>;
0261
0262 /// Function must not be optimized.
0263 def OptimizeNone : EnumAttr<"optnone", IntersectPreserve, [FnAttr]>;
0264
0265 /// Similar to byval but without a copy.
0266 def Preallocated : TypeAttr<"preallocated", IntersectPreserve, [FnAttr, ParamAttr]>;
0267
0268 /// Parameter or return value is within the specified range.
0269 def Range : ConstantRangeAttr<"range", IntersectCustom, [ParamAttr, RetAttr]>;
0270
0271 /// Function does not access memory.
0272 def ReadNone : EnumAttr<"readnone", IntersectAnd, [ParamAttr]>;
0273
0274 /// Function only reads from memory.
0275 def ReadOnly : EnumAttr<"readonly", IntersectAnd, [ParamAttr]>;
0276
0277 /// Return value is always equal to this argument.
0278 def Returned : EnumAttr<"returned", IntersectAnd, [ParamAttr]>;
0279
0280 /// Parameter is required to be a trivial constant.
0281 def ImmArg : EnumAttr<"immarg", IntersectPreserve, [ParamAttr]>;
0282
0283 /// Function can return twice.
0284 def ReturnsTwice : EnumAttr<"returns_twice", IntersectPreserve, [FnAttr]>;
0285
0286 /// Safe Stack protection.
0287 def SafeStack : EnumAttr<"safestack", IntersectPreserve, [FnAttr]>;
0288
0289 /// Shadow Call Stack protection.
0290 def ShadowCallStack : EnumAttr<"shadowcallstack", IntersectPreserve, [FnAttr]>;
0291
0292 /// Sign extended before/after call.
0293 def SExt : EnumAttr<"signext", IntersectPreserve, [ParamAttr, RetAttr]>;
0294
0295 /// Alignment of stack for function (3 bits) stored as log2 of alignment with
0296 /// +1 bias 0 means unaligned (different from alignstack=(1)).
0297 def StackAlignment : IntAttr<"alignstack", IntersectPreserve, [FnAttr, ParamAttr]>;
0298
0299 /// Function can be speculated.
0300 def Speculatable : EnumAttr<"speculatable", IntersectAnd, [FnAttr]>;
0301
0302 /// Stack protection.
0303 def StackProtect : EnumAttr<"ssp", IntersectPreserve, [FnAttr]>;
0304
0305 /// Stack protection required.
0306 def StackProtectReq : EnumAttr<"sspreq", IntersectPreserve, [FnAttr]>;
0307
0308 /// Strong Stack protection.
0309 def StackProtectStrong : EnumAttr<"sspstrong", IntersectPreserve, [FnAttr]>;
0310
0311 /// Function was called in a scope requiring strict floating point semantics.
0312 def StrictFP : EnumAttr<"strictfp", IntersectPreserve, [FnAttr]>;
0313
0314 /// Hidden pointer to structure to return.
0315 def StructRet : TypeAttr<"sret", IntersectPreserve, [ParamAttr]>;
0316
0317 /// AddressSanitizer is on.
0318 def SanitizeAddress : EnumAttr<"sanitize_address", IntersectPreserve, [FnAttr]>;
0319
0320 /// ThreadSanitizer is on.
0321 def SanitizeThread : EnumAttr<"sanitize_thread", IntersectPreserve, [FnAttr]>;
0322
0323 /// TypeSanitizer is on.
0324 def SanitizeType : EnumAttr<"sanitize_type", IntersectPreserve, [FnAttr]>;
0325
0326 /// MemorySanitizer is on.
0327 def SanitizeMemory : EnumAttr<"sanitize_memory", IntersectPreserve, [FnAttr]>;
0328
0329 /// HWAddressSanitizer is on.
0330 def SanitizeHWAddress : EnumAttr<"sanitize_hwaddress", IntersectPreserve, [FnAttr]>;
0331
0332 /// MemTagSanitizer is on.
0333 def SanitizeMemTag : EnumAttr<"sanitize_memtag", IntersectPreserve, [FnAttr]>;
0334
0335 /// NumericalStabilitySanitizer is on.
0336 def SanitizeNumericalStability : EnumAttr<"sanitize_numerical_stability", IntersectPreserve, [FnAttr]>;
0337
0338 /// RealtimeSanitizer is on.
0339 def SanitizeRealtime : EnumAttr<"sanitize_realtime", IntersectPreserve, [FnAttr]>;
0340
0341 /// RealtimeSanitizer should error if a real-time unsafe function is invoked
0342 /// during a real-time sanitized function (see `sanitize_realtime`).
0343 def SanitizeRealtimeBlocking : EnumAttr<"sanitize_realtime_blocking", IntersectPreserve, [FnAttr]>;
0344
0345 /// Speculative Load Hardening is enabled.
0346 ///
0347 /// Note that this uses the default compatibility (always compatible during
0348 /// inlining) and a conservative merge strategy where inlining an attributed
0349 /// body will add the attribute to the caller. This ensures that code carrying
0350 /// this attribute will always be lowered with hardening enabled.
0351 def SpeculativeLoadHardening : EnumAttr<"speculative_load_hardening",
0352 IntersectPreserve,
0353 [FnAttr]>;
0354
0355 /// Argument is swift error.
0356 def SwiftError : EnumAttr<"swifterror", IntersectPreserve, [ParamAttr]>;
0357
0358 /// Argument is swift self/context.
0359 def SwiftSelf : EnumAttr<"swiftself", IntersectPreserve, [ParamAttr]>;
0360
0361 /// Argument is swift async context.
0362 def SwiftAsync : EnumAttr<"swiftasync", IntersectPreserve, [ParamAttr]>;
0363
0364 /// Function must be in a unwind table.
0365 def UWTable : IntAttr<"uwtable", IntersectPreserve, [FnAttr]>;
0366
0367 /// Minimum/Maximum vscale value for function.
0368 def VScaleRange : IntAttr<"vscale_range", IntersectPreserve, [FnAttr]>;
0369
0370 /// Function always comes back to callsite.
0371 def WillReturn : EnumAttr<"willreturn", IntersectAnd, [FnAttr]>;
0372
0373 /// Pointer argument is writable.
0374 def Writable : EnumAttr<"writable", IntersectAnd, [ParamAttr]>;
0375
0376 /// Function only writes to memory.
0377 def WriteOnly : EnumAttr<"writeonly", IntersectAnd, [ParamAttr]>;
0378
0379 /// Zero extended before/after call.
0380 def ZExt : EnumAttr<"zeroext", IntersectPreserve, [ParamAttr, RetAttr]>;
0381
0382 /// Function is required to make Forward Progress.
0383 def MustProgress : EnumAttr<"mustprogress", IntersectAnd, [FnAttr]>;
0384
0385 /// Function is a presplit coroutine.
0386 def PresplitCoroutine : EnumAttr<"presplitcoroutine", IntersectPreserve, [FnAttr]>;
0387
0388 /// The coroutine would only be destroyed when it is complete.
0389 def CoroDestroyOnlyWhenComplete : EnumAttr<"coro_only_destroy_when_complete", IntersectPreserve, [FnAttr]>;
0390
0391 /// The coroutine call meets the elide requirement. Hint the optimization
0392 /// pipeline to perform elide on the call or invoke instruction.
0393 def CoroElideSafe : EnumAttr<"coro_elide_safe", IntersectPreserve, [FnAttr]>;
0394
0395 /// Target-independent string attributes.
0396 def LessPreciseFPMAD : StrBoolAttr<"less-precise-fpmad">;
0397 def NoInfsFPMath : StrBoolAttr<"no-infs-fp-math">;
0398 def NoNansFPMath : StrBoolAttr<"no-nans-fp-math">;
0399 def ApproxFuncFPMath : StrBoolAttr<"approx-func-fp-math">;
0400 def NoSignedZerosFPMath : StrBoolAttr<"no-signed-zeros-fp-math">;
0401 def UnsafeFPMath : StrBoolAttr<"unsafe-fp-math">;
0402 def NoJumpTables : StrBoolAttr<"no-jump-tables">;
0403 def NoInlineLineTables : StrBoolAttr<"no-inline-line-tables">;
0404 def ProfileSampleAccurate : StrBoolAttr<"profile-sample-accurate">;
0405 def UseSampleProfile : StrBoolAttr<"use-sample-profile">;
0406
0407 def DenormalFPMath : ComplexStrAttr<"denormal-fp-math", [FnAttr]>;
0408 def DenormalFPMathF32 : ComplexStrAttr<"denormal-fp-math-f32", [FnAttr]>;
0409
0410 // Attribute compatiblity rules are generated to check the attribute of the
0411 // caller and callee and decide whether inlining should be allowed. CompatRule
0412 // and child classes are used for the rule generation. CompatRule takes only a
0413 // compare function which could be templated with the attribute type.
0414 // CompatRuleStrAttr takes the compare function and the string attribute for
0415 // checking compatibility for inline substitution.
0416 class CompatRule<string F> {
0417 // The function's signature must match "bool(const Function&, const
0418 // Function&)", where the first parameter is the reference to the caller and
0419 // the second parameter is the reference to the callee. It must return false
0420 // if the attributes of the caller and callee are incompatible, and true
0421 // otherwise.
0422 string CompatFunc = F;
0423 string AttrName = "";
0424 }
0425
0426 class CompatRuleStrAttr<string F, string Attr> : CompatRule<F> {
0427 // The checker function is extended with an third argument as the function
0428 // attribute string "bool(const Function&, const Function&, const StringRef&)".
0429 string AttrName = Attr;
0430 }
0431
0432 def : CompatRule<"isEqual<SanitizeAddressAttr>">;
0433 def : CompatRule<"isEqual<SanitizeThreadAttr>">;
0434 def : CompatRule<"isEqual<SanitizeTypeAttr>">;
0435 def : CompatRule<"isEqual<SanitizeMemoryAttr>">;
0436 def : CompatRule<"isEqual<SanitizeHWAddressAttr>">;
0437 def : CompatRule<"isEqual<SanitizeMemTagAttr>">;
0438 def : CompatRule<"isEqual<SanitizeNumericalStabilityAttr>">;
0439 def : CompatRule<"isEqual<SanitizeRealtimeAttr>">;
0440 def : CompatRule<"isEqual<SanitizeRealtimeBlockingAttr>">;
0441 def : CompatRule<"isEqual<SafeStackAttr>">;
0442 def : CompatRule<"isEqual<ShadowCallStackAttr>">;
0443 def : CompatRule<"isEqual<UseSampleProfileAttr>">;
0444 def : CompatRule<"isEqual<NoProfileAttr>">;
0445 def : CompatRule<"checkDenormMode">;
0446 def : CompatRule<"checkStrictFP">;
0447 def : CompatRuleStrAttr<"isEqual", "sign-return-address">;
0448 def : CompatRuleStrAttr<"isEqual", "sign-return-address-key">;
0449 def : CompatRuleStrAttr<"isEqual", "branch-protection-pauth-lr">;
0450
0451 class MergeRule<string F> {
0452 // The name of the function called to merge the attributes of the caller and
0453 // callee. The function's signature must match
0454 // "void(Function&, const Function &)", where the first parameter is the
0455 // reference to the caller and the second parameter is the reference to the
0456 // callee.
0457 string MergeFunc = F;
0458 }
0459
0460 def : MergeRule<"setAND<LessPreciseFPMADAttr>">;
0461 def : MergeRule<"setAND<NoInfsFPMathAttr>">;
0462 def : MergeRule<"setAND<NoNansFPMathAttr>">;
0463 def : MergeRule<"setAND<ApproxFuncFPMathAttr>">;
0464 def : MergeRule<"setAND<NoSignedZerosFPMathAttr>">;
0465 def : MergeRule<"setAND<UnsafeFPMathAttr>">;
0466 def : MergeRule<"setOR<NoImplicitFloatAttr>">;
0467 def : MergeRule<"setOR<NoJumpTablesAttr>">;
0468 def : MergeRule<"setOR<ProfileSampleAccurateAttr>">;
0469 def : MergeRule<"setOR<SpeculativeLoadHardeningAttr>">;
0470 def : MergeRule<"adjustCallerSSPLevel">;
0471 def : MergeRule<"adjustCallerStackProbes">;
0472 def : MergeRule<"adjustCallerStackProbeSize">;
0473 def : MergeRule<"adjustMinLegalVectorWidth">;
0474 def : MergeRule<"adjustNullPointerValidAttr">;
0475 def : MergeRule<"setAND<MustProgressAttr>">;