Use existing llvm methods, instead of rust wrappers for:

LLVMRustBuildCleanupPad -> LLVMBuildCleanupPad
LLVMRustBuildCleanupRet -> LLVMBuildCleanupRet
LLVMRustBuildCatchPad -> LLVMBuildCatchPad
LLVMRustBuildCatchRet -> LLVMBuildCatchRet
LLVMRustBuildCatchSwitch -> LLVMBuildCatchSwitch
This commit is contained in:
klensy 2023-04-03 15:12:21 +03:00
parent 076116bb4c
commit cc77ae07a9
3 changed files with 17 additions and 67 deletions

View File

@ -1001,11 +1001,11 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
fn cleanup_pad(&mut self, parent: Option<&'ll Value>, args: &[&'ll Value]) -> Funclet<'ll> { fn cleanup_pad(&mut self, parent: Option<&'ll Value>, args: &[&'ll Value]) -> Funclet<'ll> {
let name = cstr!("cleanuppad"); let name = cstr!("cleanuppad");
let ret = unsafe { let ret = unsafe {
llvm::LLVMRustBuildCleanupPad( llvm::LLVMBuildCleanupPad(
self.llbuilder, self.llbuilder,
parent, parent,
args.len() as c_uint,
args.as_ptr(), args.as_ptr(),
args.len() as c_uint,
name.as_ptr(), name.as_ptr(),
) )
}; };
@ -1014,7 +1014,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
fn cleanup_ret(&mut self, funclet: &Funclet<'ll>, unwind: Option<&'ll BasicBlock>) { fn cleanup_ret(&mut self, funclet: &Funclet<'ll>, unwind: Option<&'ll BasicBlock>) {
unsafe { unsafe {
llvm::LLVMRustBuildCleanupRet(self.llbuilder, funclet.cleanuppad(), unwind) llvm::LLVMBuildCleanupRet(self.llbuilder, funclet.cleanuppad(), unwind)
.expect("LLVM does not have support for cleanupret"); .expect("LLVM does not have support for cleanupret");
} }
} }
@ -1022,11 +1022,11 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
fn catch_pad(&mut self, parent: &'ll Value, args: &[&'ll Value]) -> Funclet<'ll> { fn catch_pad(&mut self, parent: &'ll Value, args: &[&'ll Value]) -> Funclet<'ll> {
let name = cstr!("catchpad"); let name = cstr!("catchpad");
let ret = unsafe { let ret = unsafe {
llvm::LLVMRustBuildCatchPad( llvm::LLVMBuildCatchPad(
self.llbuilder, self.llbuilder,
parent, parent,
args.len() as c_uint,
args.as_ptr(), args.as_ptr(),
args.len() as c_uint,
name.as_ptr(), name.as_ptr(),
) )
}; };
@ -1041,7 +1041,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
) -> &'ll Value { ) -> &'ll Value {
let name = cstr!("catchswitch"); let name = cstr!("catchswitch");
let ret = unsafe { let ret = unsafe {
llvm::LLVMRustBuildCatchSwitch( llvm::LLVMBuildCatchSwitch(
self.llbuilder, self.llbuilder,
parent, parent,
unwind, unwind,
@ -1376,8 +1376,7 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
} }
pub fn catch_ret(&mut self, funclet: &Funclet<'ll>, unwind: &'ll BasicBlock) -> &'ll Value { pub fn catch_ret(&mut self, funclet: &Funclet<'ll>, unwind: &'ll BasicBlock) -> &'ll Value {
let ret = let ret = unsafe { llvm::LLVMBuildCatchRet(self.llbuilder, funclet.cleanuppad(), unwind) };
unsafe { llvm::LLVMRustBuildCatchRet(self.llbuilder, funclet.cleanuppad(), unwind) };
ret.expect("LLVM does not have support for catchret") ret.expect("LLVM does not have support for catchret")
} }

View File

@ -1298,34 +1298,34 @@ extern "C" {
pub fn LLVMBuildResume<'a>(B: &Builder<'a>, Exn: &'a Value) -> &'a Value; pub fn LLVMBuildResume<'a>(B: &Builder<'a>, Exn: &'a Value) -> &'a Value;
pub fn LLVMBuildUnreachable<'a>(B: &Builder<'a>) -> &'a Value; pub fn LLVMBuildUnreachable<'a>(B: &Builder<'a>) -> &'a Value;
pub fn LLVMRustBuildCleanupPad<'a>( pub fn LLVMBuildCleanupPad<'a>(
B: &Builder<'a>, B: &Builder<'a>,
ParentPad: Option<&'a Value>, ParentPad: Option<&'a Value>,
ArgCnt: c_uint,
Args: *const &'a Value, Args: *const &'a Value,
NumArgs: c_uint,
Name: *const c_char, Name: *const c_char,
) -> Option<&'a Value>; ) -> Option<&'a Value>;
pub fn LLVMRustBuildCleanupRet<'a>( pub fn LLVMBuildCleanupRet<'a>(
B: &Builder<'a>, B: &Builder<'a>,
CleanupPad: &'a Value, CleanupPad: &'a Value,
UnwindBB: Option<&'a BasicBlock>, BB: Option<&'a BasicBlock>,
) -> Option<&'a Value>; ) -> Option<&'a Value>;
pub fn LLVMRustBuildCatchPad<'a>( pub fn LLVMBuildCatchPad<'a>(
B: &Builder<'a>, B: &Builder<'a>,
ParentPad: &'a Value, ParentPad: &'a Value,
ArgCnt: c_uint,
Args: *const &'a Value, Args: *const &'a Value,
NumArgs: c_uint,
Name: *const c_char, Name: *const c_char,
) -> Option<&'a Value>; ) -> Option<&'a Value>;
pub fn LLVMRustBuildCatchRet<'a>( pub fn LLVMBuildCatchRet<'a>(
B: &Builder<'a>, B: &Builder<'a>,
Pad: &'a Value, CatchPad: &'a Value,
BB: &'a BasicBlock, BB: &'a BasicBlock,
) -> Option<&'a Value>; ) -> Option<&'a Value>;
pub fn LLVMRustBuildCatchSwitch<'a>( pub fn LLVMBuildCatchSwitch<'a>(
Builder: &Builder<'a>, Builder: &Builder<'a>,
ParentPad: Option<&'a Value>, ParentPad: Option<&'a Value>,
BB: Option<&'a BasicBlock>, UnwindBB: Option<&'a BasicBlock>,
NumHandlers: c_uint, NumHandlers: c_uint,
Name: *const c_char, Name: *const c_char,
) -> Option<&'a Value>; ) -> Option<&'a Value>;

View File

@ -1394,55 +1394,6 @@ extern "C" bool LLVMRustUnpackSMDiagnostic(LLVMSMDiagnosticRef DRef,
return true; return true;
} }
extern "C" LLVMValueRef LLVMRustBuildCleanupPad(LLVMBuilderRef B,
LLVMValueRef ParentPad,
unsigned ArgCount,
LLVMValueRef *LLArgs,
const char *Name) {
Value **Args = unwrap(LLArgs);
if (ParentPad == nullptr) {
Type *Ty = Type::getTokenTy(unwrap(B)->getContext());
ParentPad = wrap(Constant::getNullValue(Ty));
}
return wrap(unwrap(B)->CreateCleanupPad(
unwrap(ParentPad), ArrayRef<Value *>(Args, ArgCount), Name));
}
extern "C" LLVMValueRef LLVMRustBuildCleanupRet(LLVMBuilderRef B,
LLVMValueRef CleanupPad,
LLVMBasicBlockRef UnwindBB) {
CleanupPadInst *Inst = cast<CleanupPadInst>(unwrap(CleanupPad));
return wrap(unwrap(B)->CreateCleanupRet(Inst, unwrap(UnwindBB)));
}
extern "C" LLVMValueRef
LLVMRustBuildCatchPad(LLVMBuilderRef B, LLVMValueRef ParentPad,
unsigned ArgCount, LLVMValueRef *LLArgs, const char *Name) {
Value **Args = unwrap(LLArgs);
return wrap(unwrap(B)->CreateCatchPad(
unwrap(ParentPad), ArrayRef<Value *>(Args, ArgCount), Name));
}
extern "C" LLVMValueRef LLVMRustBuildCatchRet(LLVMBuilderRef B,
LLVMValueRef Pad,
LLVMBasicBlockRef BB) {
return wrap(unwrap(B)->CreateCatchRet(cast<CatchPadInst>(unwrap(Pad)),
unwrap(BB)));
}
extern "C" LLVMValueRef LLVMRustBuildCatchSwitch(LLVMBuilderRef B,
LLVMValueRef ParentPad,
LLVMBasicBlockRef BB,
unsigned NumHandlers,
const char *Name) {
if (ParentPad == nullptr) {
Type *Ty = Type::getTokenTy(unwrap(B)->getContext());
ParentPad = wrap(Constant::getNullValue(Ty));
}
return wrap(unwrap(B)->CreateCatchSwitch(unwrap(ParentPad), unwrap(BB),
NumHandlers, Name));
}
extern "C" void LLVMRustAddHandler(LLVMValueRef CatchSwitchRef, extern "C" void LLVMRustAddHandler(LLVMValueRef CatchSwitchRef,
LLVMBasicBlockRef Handler) { LLVMBasicBlockRef Handler) {
Value *CatchSwitch = unwrap(CatchSwitchRef); Value *CatchSwitch = unwrap(CatchSwitchRef);