19 #define DEBUG_TYPE "forceattrs"
23 cl::desc(
"Add an attribute to a function. This should be a "
24 "pair of 'function-name:attribute-name', for "
25 "example -force-attribute=foo:noinline. This "
26 "option can be specified multiple times."));
30 .Case(
"alwaysinline", Attribute::AlwaysInline)
31 .
Case(
"builtin", Attribute::Builtin)
34 .
Case(
"inlinehint", Attribute::InlineHint)
36 .
Case(
"minsize", Attribute::MinSize)
37 .
Case(
"naked", Attribute::Naked)
38 .
Case(
"nobuiltin", Attribute::NoBuiltin)
39 .
Case(
"noduplicate", Attribute::NoDuplicate)
40 .
Case(
"noimplicitfloat", Attribute::NoImplicitFloat)
41 .
Case(
"noinline", Attribute::NoInline)
42 .
Case(
"nonlazybind", Attribute::NonLazyBind)
43 .
Case(
"noredzone", Attribute::NoRedZone)
44 .
Case(
"noreturn", Attribute::NoReturn)
45 .
Case(
"norecurse", Attribute::NoRecurse)
46 .
Case(
"nounwind", Attribute::NoUnwind)
47 .
Case(
"optnone", Attribute::OptimizeNone)
48 .
Case(
"optsize", Attribute::OptimizeForSize)
49 .
Case(
"readnone", Attribute::ReadNone)
51 .
Case(
"argmemonly", Attribute::ArgMemOnly)
52 .
Case(
"returns_twice", Attribute::ReturnsTwice)
53 .
Case(
"safestack", Attribute::SafeStack)
54 .
Case(
"sanitize_address", Attribute::SanitizeAddress)
55 .
Case(
"sanitize_memory", Attribute::SanitizeMemory)
56 .
Case(
"sanitize_thread", Attribute::SanitizeThread)
57 .
Case(
"ssp", Attribute::StackProtect)
58 .
Case(
"sspreq", Attribute::StackProtectReq)
59 .
Case(
"sspstrong", Attribute::StackProtectStrong)
60 .
Case(
"uwtable", Attribute::UWTable)
73 DEBUG(
dbgs() <<
"ForcedAttribute: " << KV.second
74 <<
" unknown or not handled!\n");
96 struct ForceFunctionAttrsLegacyPass :
public ModulePass {
103 bool runOnModule(
Module &M)
override {
118 "Force set function attributes",
false,
false)
121 return new ForceFunctionAttrsLegacyPass();
Super simple passes to force specific function attrs from the commandline into the IR for debugging p...
Pass interface - Implemented by all 'passes'.
static cl::list< std::string > ForceAttributes("force-attribute", cl::Hidden, cl::desc("Add an attribute to a function. This should be a ""pair of 'function-name:attribute-name', for ""example -force-attribute=foo:noinline. This ""option can be specified multiple times."))
static PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
A Module instance is used to store all the information related to an LLVM module. ...
INITIALIZE_PASS(ForceFunctionAttrsLegacyPass,"forceattrs","Force set function attributes", false, false) Pass *llvm
StringRef getName() const
Return a constant reference to the value's name.
static void addForcedAttributes(Function &F)
If F has any forced attributes given on the command line, add them.
LLVM_ATTRIBUTE_ALWAYS_INLINE R Default(const T &Value) const
No attributes have been set.
LLVM_ATTRIBUTE_ALWAYS_INLINE StringSwitch & Case(const char(&S)[N], const T &Value)
static PreservedAnalyses none()
Convenience factory function for the empty preserved set.
A switch()-like statement whose cases are string literals.
A set of analyses that are preserved following a run of a transformation pass.
iterator_range< iterator > functions()
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
static Attribute::AttrKind parseAttrKind(StringRef Kind)
Module.h This file contains the declarations for the Module class.
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
LLVM_NODISCARD std::pair< StringRef, StringRef > split(char Separator) const
Split into two substrings around the first occurrence of a separator character.
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
bool hasFnAttribute(Attribute::AttrKind Kind) const
Return true if the function has the attribute.
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
void initializeForceFunctionAttrsLegacyPassPass(PassRegistry &)
void addFnAttr(Attribute::AttrKind Kind)
Add function attributes to this function.
StringRef - Represent a constant reference to a string, i.e.
A container for analyses that lazily runs them and caches their results.
Pass * createForceFunctionAttrsLegacyPass()
Create a legacy pass manager instance of a pass to force function attrs.
AttrKind
This enumeration lists the attributes that can be associated with parameters, function results...