Rollup merge of #112791 - WaffleLapkin:wag_the_llvm, r=cuviper
llvm ffi: Expose `CallInst->setTailCallKind` This is needed for the explicit tail calls experiment.
This commit is contained in:
commit
e461502e06
2 changed files with 37 additions and 0 deletions
|
@ -585,6 +585,16 @@ pub enum ThreadLocalMode {
|
|||
LocalExec,
|
||||
}
|
||||
|
||||
/// LLVMRustTailCallKind
|
||||
#[derive(Copy, Clone)]
|
||||
#[repr(C)]
|
||||
pub enum TailCallKind {
|
||||
None,
|
||||
Tail,
|
||||
MustTail,
|
||||
NoTail,
|
||||
}
|
||||
|
||||
/// LLVMRustChecksumKind
|
||||
#[derive(Copy, Clone)]
|
||||
#[repr(C)]
|
||||
|
@ -1196,6 +1206,7 @@ extern "C" {
|
|||
NameLen: size_t,
|
||||
) -> Option<&Value>;
|
||||
pub fn LLVMSetTailCall(CallInst: &Value, IsTailCall: Bool);
|
||||
pub fn LLVMRustSetTailCallKind(CallInst: &Value, TKC: TailCallKind);
|
||||
|
||||
// Operations on attributes
|
||||
pub fn LLVMRustCreateAttrNoValue(C: &Context, attr: AttributeKind) -> &Attribute;
|
||||
|
|
|
@ -121,6 +121,32 @@ extern "C" LLVMValueRef LLVMRustGetNamedValue(LLVMModuleRef M, const char *Name,
|
|||
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,
|
||||
const char *Name,
|
||||
size_t NameLen,
|
||||
|
|
Loading…
Add table
Reference in a new issue