aboutsummaryrefslogtreecommitdiff
path: root/lib/VMCore/Function.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VMCore/Function.cpp')
-rw-r--r--lib/VMCore/Function.cpp37
1 files changed, 6 insertions, 31 deletions
diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp
index f5712e7561..5a69c099f6 100644
--- a/lib/VMCore/Function.cpp
+++ b/lib/VMCore/Function.cpp
@@ -14,7 +14,6 @@
#include "llvm/Module.h"
#include "llvm/DerivedTypes.h"
#include "llvm/IntrinsicInst.h"
-#include "llvm/ParamAttrsList.h"
#include "llvm/CodeGen/ValueTypes.h"
#include "llvm/Support/LeakDetector.h"
#include "llvm/Support/StringPool.h"
@@ -140,12 +139,12 @@ void Function::eraseFromParent() {
/// @brief Determine whether the function has the given attribute.
bool Function::paramHasAttr(uint16_t i, ParameterAttributes attr) const {
- return ParamAttrs && ParamAttrs->paramHasAttr(i, attr);
+ return ParamAttrs.paramHasAttr(i, attr);
}
/// @brief Extract the alignment for a call or parameter (0=unknown).
uint16_t Function::getParamAlignment(uint16_t i) const {
- return ParamAttrs ? ParamAttrs->getParamAlignment(i) : 0;
+ return ParamAttrs.getParamAlignment(i);
}
/// @brief Determine if the function cannot return.
@@ -181,8 +180,7 @@ bool Function::hasStructRetAttr() const {
Function::Function(const FunctionType *Ty, LinkageTypes Linkage,
const std::string &name, Module *ParentModule)
: GlobalValue(PointerType::getUnqual(Ty),
- Value::FunctionVal, 0, 0, Linkage, name),
- ParamAttrs(0) {
+ Value::FunctionVal, 0, 0, Linkage, name) {
SymTab = new ValueSymbolTable();
assert((getReturnType()->isFirstClassType() ||getReturnType() == Type::VoidTy
@@ -207,10 +205,6 @@ Function::~Function() {
ArgumentList.clear();
delete SymTab;
- // Drop our reference to the parameter attributes, if any.
- if (ParamAttrs)
- ParamAttrs->dropRef();
-
// Remove the function from the on-the-side collector table.
clearCollector();
}
@@ -243,24 +237,6 @@ void Function::setParent(Module *parent) {
LeakDetector::removeGarbageObject(this);
}
-void Function::setParamAttrs(const ParamAttrsList *attrs) {
- // Avoid deleting the ParamAttrsList if they are setting the
- // attributes to the same list.
- if (ParamAttrs == attrs)
- return;
-
- // Drop reference on the old ParamAttrsList
- if (ParamAttrs)
- ParamAttrs->dropRef();
-
- // Add reference to the new ParamAttrsList
- if (attrs)
- attrs->addRef();
-
- // Set the new ParamAttrsList.
- ParamAttrs = attrs;
-}
-
// dropAllReferences() - This function causes all the subinstructions to "let
// go" of all references that they are maintaining. This allows one to
// 'delete' a whole class at a time, even though there may be circular
@@ -370,8 +346,7 @@ const FunctionType *Intrinsic::getType(ID id, const Type **Tys,
return FunctionType::get(ResultTy, ArgTys, IsVarArg);
}
-const ParamAttrsList *Intrinsic::getParamAttrs(ID id) {
- ParamAttrsVector Attrs;
+PAListPtr Intrinsic::getParamAttrs(ID id) {
ParameterAttributes Attr = ParamAttr::None;
#define GET_INTRINSIC_ATTRIBUTES
@@ -381,8 +356,8 @@ const ParamAttrsList *Intrinsic::getParamAttrs(ID id) {
// Intrinsics cannot throw exceptions.
Attr |= ParamAttr::NoUnwind;
- Attrs.push_back(ParamAttrsWithIndex::get(0, Attr));
- return ParamAttrsList::get(Attrs);
+ ParamAttrsWithIndex PAWI = ParamAttrsWithIndex::get(0, Attr);
+ return PAListPtr::get(&PAWI, 1);
}
Function *Intrinsic::getDeclaration(Module *M, ID id, const Type **Tys,