rustc_trans: compute better align/dereferenceable attributes from pointees.
This commit is contained in:
parent
ced5e04e8b
commit
f8d5d0c30c
5 changed files with 242 additions and 128 deletions
|
@ -178,6 +178,22 @@ extern "C" void LLVMRustAddCallSiteAttribute(LLVMValueRef Instr, unsigned Index,
|
|||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddAlignmentCallSiteAttr(LLVMValueRef Instr,
|
||||
unsigned Index,
|
||||
uint32_t Bytes) {
|
||||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||
AttrBuilder B;
|
||||
B.addAlignmentAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index, B));
|
||||
#else
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index,
|
||||
AttributeSet::get(Call->getContext(), Index, B)));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddDereferenceableCallSiteAttr(LLVMValueRef Instr,
|
||||
unsigned Index,
|
||||
uint64_t Bytes) {
|
||||
|
@ -194,6 +210,22 @@ extern "C" void LLVMRustAddDereferenceableCallSiteAttr(LLVMValueRef Instr,
|
|||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddDereferenceableOrNullCallSiteAttr(LLVMValueRef Instr,
|
||||
unsigned Index,
|
||||
uint64_t Bytes) {
|
||||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||
AttrBuilder B;
|
||||
B.addDereferenceableOrNullAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index, B));
|
||||
#else
|
||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||
Call->getContext(), Index,
|
||||
AttributeSet::get(Call->getContext(), Index, B)));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddFunctionAttribute(LLVMValueRef Fn, unsigned Index,
|
||||
LLVMRustAttribute RustAttr) {
|
||||
Function *A = unwrap<Function>(Fn);
|
||||
|
@ -206,6 +238,19 @@ extern "C" void LLVMRustAddFunctionAttribute(LLVMValueRef Fn, unsigned Index,
|
|||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddAlignmentAttr(LLVMValueRef Fn,
|
||||
unsigned Index,
|
||||
uint32_t Bytes) {
|
||||
Function *A = unwrap<Function>(Fn);
|
||||
AttrBuilder B;
|
||||
B.addAlignmentAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
A->addAttributes(Index, B);
|
||||
#else
|
||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddDereferenceableAttr(LLVMValueRef Fn, unsigned Index,
|
||||
uint64_t Bytes) {
|
||||
Function *A = unwrap<Function>(Fn);
|
||||
|
@ -218,6 +263,19 @@ extern "C" void LLVMRustAddDereferenceableAttr(LLVMValueRef Fn, unsigned Index,
|
|||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddDereferenceableOrNullAttr(LLVMValueRef Fn,
|
||||
unsigned Index,
|
||||
uint64_t Bytes) {
|
||||
Function *A = unwrap<Function>(Fn);
|
||||
AttrBuilder B;
|
||||
B.addDereferenceableOrNullAttr(Bytes);
|
||||
#if LLVM_VERSION_GE(5, 0)
|
||||
A->addAttributes(Index, B);
|
||||
#else
|
||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustAddFunctionAttrStringValue(LLVMValueRef Fn,
|
||||
unsigned Index,
|
||||
const char *Name,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue