Skip to content

Commit 7f3383f

Browse files
committed
add LLVM wrapper FFI
1 parent d08c39a commit 7f3383f

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@
5151
//
5252
//===----------------------------------------------------------------------===
5353

54+
// Define TailCallKind enum values to match LLVM's
55+
enum LLVMRustTailCallKind {
56+
LLVMRustTailCallKindNone = 0,
57+
LLVMRustTailCallKindTail = 1,
58+
LLVMRustTailCallKindMustTail = 2,
59+
LLVMRustTailCallKindNoTail = 3
60+
};
61+
5462
using namespace llvm;
5563
using namespace llvm::sys;
5664
using namespace llvm::object;
@@ -1949,3 +1957,21 @@ extern "C" void LLVMRustSetNoSanitizeHWAddress(LLVMValueRef Global) {
19491957
MD.NoHWAddress = true;
19501958
GV.setSanitizerMetadata(MD);
19511959
}
1960+
1961+
extern "C" void LLVMRustSetTailCallKind(LLVMValueRef Call, LLVMRustTailCallKind Kind) {
1962+
CallInst *CI = unwrap<CallInst>(Call);
1963+
switch (Kind) {
1964+
case LLVMRustTailCallKindNone:
1965+
CI->setTailCallKind(CallInst::TCK_None);
1966+
break;
1967+
case LLVMRustTailCallKindTail:
1968+
CI->setTailCallKind(CallInst::TCK_Tail);
1969+
break;
1970+
case LLVMRustTailCallKindMustTail:
1971+
CI->setTailCallKind(CallInst::TCK_MustTail);
1972+
break;
1973+
case LLVMRustTailCallKindNoTail:
1974+
CI->setTailCallKind(CallInst::TCK_NoTail);
1975+
break;
1976+
}
1977+
}

0 commit comments

Comments
 (0)