mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-25 04:39:51 +00:00
Make sure that intrinsics automagically get the
right parameter attributes no matter how they are obtained. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49335 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dc1adac582
commit
79ab3e8014
@ -160,6 +160,10 @@ Function::Function(const FunctionType *Ty, LinkageTypes Linkage,
|
|||||||
|
|
||||||
if (ParentModule)
|
if (ParentModule)
|
||||||
ParentModule->getFunctionList().push_back(this);
|
ParentModule->getFunctionList().push_back(this);
|
||||||
|
|
||||||
|
// Ensure intrinsics have the right parameter attributes.
|
||||||
|
if (unsigned IID = getIntrinsicID(true))
|
||||||
|
setParamAttrs(Intrinsic::getParamAttrs(Intrinsic::ID(IID)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Function::~Function() {
|
Function::~Function() {
|
||||||
@ -328,11 +332,9 @@ Function *Intrinsic::getDeclaration(Module *M, ID id, const Type **Tys,
|
|||||||
unsigned numTys) {
|
unsigned numTys) {
|
||||||
// There can never be multiple globals with the same name of different types,
|
// There can never be multiple globals with the same name of different types,
|
||||||
// because intrinsics must be a specific type.
|
// because intrinsics must be a specific type.
|
||||||
Function *F =
|
return
|
||||||
cast<Function>(M->getOrInsertFunction(getName(id, Tys, numTys),
|
cast<Function>(M->getOrInsertFunction(getName(id, Tys, numTys),
|
||||||
getType(id, Tys, numTys)));
|
getType(id, Tys, numTys)));
|
||||||
F->setParamAttrs(getParamAttrs(id));
|
|
||||||
return F;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {
|
Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {
|
||||||
|
@ -1452,6 +1452,10 @@ void Verifier::VerifyIntrinsicPrototype(Intrinsic::ID ID,
|
|||||||
F->getName().substr(Name.length()) + "'. It should be '" +
|
F->getName().substr(Name.length()) + "'. It should be '" +
|
||||||
Suffix + "'", F);
|
Suffix + "'", F);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check parameter attributes.
|
||||||
|
Assert1(F->getParamAttrs() == Intrinsic::getParamAttrs(ID),
|
||||||
|
"Intrinsic has wrong parameter attributes!", F);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user