Have 'addFnAttr' take the attribute enum value. Then have it build the attribute object and add it appropriately. No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165595 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Bill Wendling 2012-10-10 03:12:49 +00:00
parent ebf3a37c0a
commit f5e6d70f8c
4 changed files with 19 additions and 28 deletions

View File

@ -176,9 +176,11 @@ public:
/// addFnAttr - Add function attributes to this function. /// addFnAttr - Add function attributes to this function.
/// ///
void addFnAttr(Attributes N) { void addFnAttr(Attributes::AttrVal N) {
// Function Attributes are stored at ~0 index // Function Attributes are stored at ~0 index
addAttribute(~0U, N); Attributes::Builder B;
B.addAttribute(N);
addAttribute(~0U, Attributes::get(B));
} }
/// removeFnAttr - Remove function attributes from this function. /// removeFnAttr - Remove function attributes from this function.
@ -221,9 +223,8 @@ public:
bool doesNotAccessMemory() const { bool doesNotAccessMemory() const {
return getFnAttributes().hasAttribute(Attributes::ReadNone); return getFnAttributes().hasAttribute(Attributes::ReadNone);
} }
void setDoesNotAccessMemory(bool DoesNotAccessMemory = true) { void setDoesNotAccessMemory() {
if (DoesNotAccessMemory) addFnAttr(Attribute::ReadNone); addFnAttr(Attributes::ReadNone);
else removeFnAttr(Attribute::ReadNone);
} }
/// @brief Determine if the function does not access or only reads memory. /// @brief Determine if the function does not access or only reads memory.
@ -231,27 +232,24 @@ public:
return doesNotAccessMemory() || return doesNotAccessMemory() ||
getFnAttributes().hasAttribute(Attributes::ReadOnly); getFnAttributes().hasAttribute(Attributes::ReadOnly);
} }
void setOnlyReadsMemory(bool OnlyReadsMemory = true) { void setOnlyReadsMemory() {
if (OnlyReadsMemory) addFnAttr(Attribute::ReadOnly); addFnAttr(Attributes::ReadOnly);
else removeFnAttr(Attribute::ReadOnly | Attribute::ReadNone);
} }
/// @brief Determine if the function cannot return. /// @brief Determine if the function cannot return.
bool doesNotReturn() const { bool doesNotReturn() const {
return getFnAttributes().hasAttribute(Attributes::NoReturn); return getFnAttributes().hasAttribute(Attributes::NoReturn);
} }
void setDoesNotReturn(bool DoesNotReturn = true) { void setDoesNotReturn() {
if (DoesNotReturn) addFnAttr(Attribute::NoReturn); addFnAttr(Attributes::NoReturn);
else removeFnAttr(Attribute::NoReturn);
} }
/// @brief Determine if the function cannot unwind. /// @brief Determine if the function cannot unwind.
bool doesNotThrow() const { bool doesNotThrow() const {
return getFnAttributes().hasAttribute(Attributes::NoUnwind); return getFnAttributes().hasAttribute(Attributes::NoUnwind);
} }
void setDoesNotThrow(bool DoesNotThrow = true) { void setDoesNotThrow() {
if (DoesNotThrow) addFnAttr(Attribute::NoUnwind); addFnAttr(Attributes::NoUnwind);
else removeFnAttr(Attribute::NoUnwind);
} }
/// @brief True if the ABI mandates (or the user requested) that this /// @brief True if the ABI mandates (or the user requested) that this
@ -259,11 +257,8 @@ public:
bool hasUWTable() const { bool hasUWTable() const {
return getFnAttributes().hasAttribute(Attributes::UWTable); return getFnAttributes().hasAttribute(Attributes::UWTable);
} }
void setHasUWTable(bool HasUWTable = true) { void setHasUWTable() {
if (HasUWTable) addFnAttr(Attributes::UWTable);
addFnAttr(Attribute::UWTable);
else
removeFnAttr(Attribute::UWTable);
} }
/// @brief True if this function needs an unwind table. /// @brief True if this function needs an unwind table.

View File

@ -94,10 +94,10 @@ static bool InlineCallIfPossible(CallSite CS, InlineFunctionInfo &IFI,
// If the inlined function had a higher stack protection level than the // If the inlined function had a higher stack protection level than the
// calling function, then bump up the caller's stack protection level. // calling function, then bump up the caller's stack protection level.
if (Callee->getFnAttributes().hasAttribute(Attributes::StackProtectReq)) if (Callee->getFnAttributes().hasAttribute(Attributes::StackProtectReq))
Caller->addFnAttr(Attribute::StackProtectReq); Caller->addFnAttr(Attributes::StackProtectReq);
else if (Callee->getFnAttributes().hasAttribute(Attributes::StackProtect) && else if (Callee->getFnAttributes().hasAttribute(Attributes::StackProtect) &&
!Caller->getFnAttributes().hasAttribute(Attributes::StackProtectReq)) !Caller->getFnAttributes().hasAttribute(Attributes::StackProtectReq))
Caller->addFnAttr(Attribute::StackProtect); Caller->addFnAttr(Attributes::StackProtect);
// Look at all of the allocas that we inlined through this call site. If we // Look at all of the allocas that we inlined through this call site. If we
// have already inlined other allocas through other calls into this function, // have already inlined other allocas through other calls into this function,

View File

@ -682,9 +682,7 @@ void GCOVProfiler::insertCounterWriteout(
"__llvm_gcov_init", M); "__llvm_gcov_init", M);
F->setUnnamedAddr(true); F->setUnnamedAddr(true);
F->setLinkage(GlobalValue::InternalLinkage); F->setLinkage(GlobalValue::InternalLinkage);
Attributes::Builder B; F->addFnAttr(Attributes::NoInline);
B.addAttribute(Attributes::NoInline);
F->addFnAttr(Attributes::get(B));
BB = BasicBlock::Create(*Ctx, "entry", F); BB = BasicBlock::Create(*Ctx, "entry", F);
Builder.SetInsertPoint(BB); Builder.SetInsertPoint(BB);
@ -703,9 +701,7 @@ void GCOVProfiler::insertIndirectCounterIncrement() {
cast<Function>(GCOVProfiler::getIncrementIndirectCounterFunc()); cast<Function>(GCOVProfiler::getIncrementIndirectCounterFunc());
Fn->setUnnamedAddr(true); Fn->setUnnamedAddr(true);
Fn->setLinkage(GlobalValue::InternalLinkage); Fn->setLinkage(GlobalValue::InternalLinkage);
Attributes::Builder B; Fn->addFnAttr(Attributes::NoInline);
B.addAttribute(Attributes::NoInline);
Fn->addFnAttr(Attributes::get(B));
Type *Int32Ty = Type::getInt32Ty(*Ctx); Type *Int32Ty = Type::getInt32Ty(*Ctx);
Type *Int64Ty = Type::getInt64Ty(*Ctx); Type *Int64Ty = Type::getInt64Ty(*Ctx);

View File

@ -346,7 +346,7 @@ Function *CodeExtractor::constructFunction(const ValueSet &inputs,
header->getName(), M); header->getName(), M);
// If the old function is no-throw, so is the new one. // If the old function is no-throw, so is the new one.
if (oldFunction->doesNotThrow()) if (oldFunction->doesNotThrow())
newFunction->setDoesNotThrow(true); newFunction->setDoesNotThrow();
newFunction->getBasicBlockList().push_back(newRootNode); newFunction->getBasicBlockList().push_back(newRootNode);