llvm ffi: Expose CallInst->setTailCallKind
This commit is contained in:
parent
8d1fa473dd
commit
bf5eaa4550
2 changed files with 37 additions and 0 deletions
|
@ -585,6 +585,16 @@ pub enum ThreadLocalMode {
|
||||||
LocalExec,
|
LocalExec,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// LLVMRustTailCallKind
|
||||||
|
#[derive(Copy, Clone)]
|
||||||
|
#[repr(C)]
|
||||||
|
pub enum TailCallKind {
|
||||||
|
None,
|
||||||
|
Tail,
|
||||||
|
MustTail,
|
||||||
|
NoTail,
|
||||||
|
}
|
||||||
|
|
||||||
/// LLVMRustChecksumKind
|
/// LLVMRustChecksumKind
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
|
@ -1195,6 +1205,7 @@ extern "C" {
|
||||||
NameLen: size_t,
|
NameLen: size_t,
|
||||||
) -> Option<&Value>;
|
) -> Option<&Value>;
|
||||||
pub fn LLVMSetTailCall(CallInst: &Value, IsTailCall: Bool);
|
pub fn LLVMSetTailCall(CallInst: &Value, IsTailCall: Bool);
|
||||||
|
pub fn LLVMRustSetTailCallKind(CallInst: &Value, TKC: TailCallKind);
|
||||||
|
|
||||||
// Operations on attributes
|
// Operations on attributes
|
||||||
pub fn LLVMRustCreateAttrNoValue(C: &Context, attr: AttributeKind) -> &Attribute;
|
pub fn LLVMRustCreateAttrNoValue(C: &Context, attr: AttributeKind) -> &Attribute;
|
||||||
|
|
|
@ -116,6 +116,32 @@ extern "C" LLVMValueRef LLVMRustGetNamedValue(LLVMModuleRef M, const char *Name,
|
||||||
return wrap(unwrap(M)->getNamedValue(StringRef(Name, NameLen)));
|
return wrap(unwrap(M)->getNamedValue(StringRef(Name, NameLen)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class LLVMRustTailCallKind {
|
||||||
|
None,
|
||||||
|
Tail,
|
||||||
|
MustTail,
|
||||||
|
NoTail,
|
||||||
|
};
|
||||||
|
|
||||||
|
static CallInst::TailCallKind fromRust(LLVMRustTailCallKind Kind) {
|
||||||
|
switch (Kind) {
|
||||||
|
case LLVMRustTailCallKind::None:
|
||||||
|
return CallInst::TailCallKind::TCK_None;
|
||||||
|
case LLVMRustTailCallKind::Tail:
|
||||||
|
return CallInst::TailCallKind::TCK_Tail;
|
||||||
|
case LLVMRustTailCallKind::MustTail:
|
||||||
|
return CallInst::TailCallKind::TCK_MustTail;
|
||||||
|
case LLVMRustTailCallKind::NoTail:
|
||||||
|
return CallInst::TailCallKind::TCK_NoTail;
|
||||||
|
default:
|
||||||
|
report_fatal_error("bad CallInst::TailCallKind.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void LLVMRustSetTailCallKind(LLVMValueRef Call, LLVMRustTailCallKind TCK) {
|
||||||
|
unwrap<CallInst>(Call)->setTailCallKind(fromRust(TCK));
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" LLVMValueRef LLVMRustGetOrInsertFunction(LLVMModuleRef M,
|
extern "C" LLVMValueRef LLVMRustGetOrInsertFunction(LLVMModuleRef M,
|
||||||
const char *Name,
|
const char *Name,
|
||||||
size_t NameLen,
|
size_t NameLen,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue