add llvm wrappers and corresponding methods in attribute
This commit is contained in:
parent
847e3ee6b0
commit
f319dd909e
3 changed files with 44 additions and 0 deletions
|
|
@ -28,6 +28,22 @@ pub(crate) fn apply_to_callsite(callsite: &Value, idx: AttributePlace, attrs: &[
|
|||
}
|
||||
}
|
||||
|
||||
pub(crate) fn has_attr(llfn: &Value, idx: AttributePlace, attr: AttributeKind) -> bool {
|
||||
llvm::HasAttributeAtIndex(llfn, idx, attr)
|
||||
}
|
||||
|
||||
pub(crate) fn has_string_attr(llfn: &Value, name: *const i8) -> bool {
|
||||
llvm::HasStringAttribute(llfn, name)
|
||||
}
|
||||
|
||||
pub(crate) fn remove_from_llfn(llfn: &Value, place: AttributePlace, kind: AttributeKind) {
|
||||
llvm::RemoveRustEnumAttributeAtIndex(llfn, place, kind);
|
||||
}
|
||||
|
||||
pub(crate) fn remove_string_attr_from_llfn(llfn: &Value, name: *const i8) {
|
||||
llvm::RemoveStringAttrFromFn(llfn, name);
|
||||
}
|
||||
|
||||
/// Get LLVM attribute for the provided inline heuristic.
|
||||
#[inline]
|
||||
fn inline_attr<'ll>(cx: &CodegenCx<'ll, '_>, inline: InlineAttr) -> Option<&'ll Attribute> {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,15 @@ unsafe extern "C" {
|
|||
pub(crate) fn LLVMRustVerifyFunction(V: &Value, action: LLVMRustVerifierFailureAction) -> Bool;
|
||||
pub(crate) fn LLVMRustHasAttributeAtIndex(V: &Value, i: c_uint, Kind: AttributeKind) -> bool;
|
||||
pub(crate) fn LLVMRustGetArrayNumElements(Ty: &Type) -> u64;
|
||||
pub(crate) fn LLVMRustHasFnAttribute(F: &Value, Name: *const c_char) -> bool;
|
||||
pub(crate) fn LLVMRustRemoveFnAttribute(F: &Value, Name: *const c_char);
|
||||
pub(crate) fn LLVMGetFirstFunction(M: &Module) -> Option<&Value>;
|
||||
pub(crate) fn LLVMGetNextFunction(Fn: &Value) -> Option<&Value>;
|
||||
pub(crate) fn LLVMRustRemoveEnumAttributeAtIndex(
|
||||
Fn: &Value,
|
||||
index: c_uint,
|
||||
kind: AttributeKind,
|
||||
);
|
||||
}
|
||||
|
||||
unsafe extern "C" {
|
||||
|
|
|
|||
|
|
@ -973,6 +973,25 @@ extern "C" LLVMMetadataRef LLVMRustDIGetInstMetadata(LLVMValueRef x) {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
extern "C" void
|
||||
LLVMRustRemoveEnumAttributeAtIndex(LLVMValueRef F, size_t index,
|
||||
LLVMRustAttributeKind RustAttr) {
|
||||
LLVMRemoveEnumAttributeAtIndex(F, index, fromRust(RustAttr));
|
||||
}
|
||||
|
||||
extern "C" bool LLVMRustHasFnAttribute(LLVMValueRef F, const char *Name) {
|
||||
if (auto *Fn = dyn_cast<Function>(unwrap<Value>(F))) {
|
||||
return Fn->hasFnAttribute(Name);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustRemoveFnAttribute(LLVMValueRef Fn, const char *Name) {
|
||||
if (auto *F = dyn_cast<Function>(unwrap<Value>(Fn))) {
|
||||
F->removeFnAttr(Name);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void LLVMRustGlobalAddMetadata(LLVMValueRef Global, unsigned Kind,
|
||||
LLVMMetadataRef MD) {
|
||||
unwrap<GlobalObject>(Global)->addMetadata(Kind, *unwrap<MDNode>(MD));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue