diff --git a/lib/llvm-backend/src/code.rs b/lib/llvm-backend/src/code.rs index 822447076..576242c0e 100644 --- a/lib/llvm-backend/src/code.rs +++ b/lib/llvm-backend/src/code.rs @@ -954,7 +954,6 @@ pub unsafe extern "C" fn callback_trampoline( pub struct LLVMModuleCodeGenerator<'ctx> { context: Option<&'ctx Context>, - builder: Option>, intrinsics: Option>, functions: Vec>, signatures: Map>, @@ -8619,7 +8618,6 @@ impl From for CodegenError { impl Drop for LLVMModuleCodeGenerator<'_> { fn drop(&mut self) { // Ensure that all members of the context are dropped before we drop the context. - drop(self.builder.take()); drop(self.intrinsics.take()); self.functions.clear(); self.signatures.clear(); @@ -8698,8 +8696,6 @@ impl<'ctx> ModuleCodeGenerator, LLVMBackend, Cod module.set_target(&target); module.set_data_layout(&target_machine.get_target_data().get_data_layout()); - let builder = context.create_builder(); - let intrinsics = Intrinsics::declare(&module, &context); let personality_func = module.add_function( @@ -8710,7 +8706,6 @@ impl<'ctx> ModuleCodeGenerator, LLVMBackend, Cod LLVMModuleCodeGenerator { context: Some(context), - builder: Some(builder), intrinsics: Some(intrinsics), module: ManuallyDrop::new(Rc::new(RefCell::new(module))), functions: vec![], @@ -8740,15 +8735,10 @@ impl<'ctx> ModuleCodeGenerator, LLVMBackend, Cod _loc: WasmSpan, ) -> Result<&mut LLVMFunctionCodeGenerator<'ctx>, CodegenError> { // Creates a new function and returns the function-scope code generator for it. - let (context, builder, intrinsics) = match self.functions.last_mut() { - Some(x) => ( - x.context.take().unwrap(), - x.builder.take().unwrap(), - x.intrinsics.take().unwrap(), - ), + let (context, intrinsics) = match self.functions.last_mut() { + Some(x) => (x.context.take().unwrap(), x.intrinsics.take().unwrap()), None => ( self.context.take().unwrap(), - self.builder.take().unwrap(), self.intrinsics.take().unwrap(), ), }; @@ -8766,6 +8756,7 @@ impl<'ctx> ModuleCodeGenerator, LLVMBackend, Cod alloca_builder.position_at_end(entry_block); let return_block = context.append_basic_block(*function, "return"); + let builder = context.create_builder(); builder.position_at_end(return_block); let phis: SmallVec<[PhiValue; 1]> = func_sig @@ -8851,20 +8842,14 @@ impl<'ctx> ModuleCodeGenerator, LLVMBackend, Cod ), CodegenError, > { - let (context, builder, intrinsics) = match self.functions.last_mut() { - Some(x) => ( - x.context.take().unwrap(), - x.builder.take().unwrap(), - x.intrinsics.take().unwrap(), - ), + let (context, intrinsics) = match self.functions.last_mut() { + Some(x) => (x.context.take().unwrap(), x.intrinsics.take().unwrap()), None => ( self.context.take().unwrap(), - self.builder.take().unwrap(), self.intrinsics.take().unwrap(), ), }; self.context = Some(context); - self.builder = Some(builder); self.intrinsics = Some(intrinsics); generate_trampolines( @@ -8872,7 +8857,6 @@ impl<'ctx> ModuleCodeGenerator, LLVMBackend, Cod &self.signatures, &self.module.borrow_mut(), self.context.as_ref().unwrap(), - self.builder.as_ref().unwrap(), self.intrinsics.as_ref().unwrap(), ) .map_err(|e| CodegenError { diff --git a/lib/llvm-backend/src/trampolines.rs b/lib/llvm-backend/src/trampolines.rs index 51dd7f43e..01488eeb0 100644 --- a/lib/llvm-backend/src/trampolines.rs +++ b/lib/llvm-backend/src/trampolines.rs @@ -1,6 +1,5 @@ use crate::intrinsics::Intrinsics; use inkwell::{ - builder::Builder, context::Context, module::{Linkage, Module}, types::{BasicType, FunctionType}, @@ -18,7 +17,6 @@ pub fn generate_trampolines<'ctx>( signatures: &SliceMap>, module: &Module<'ctx>, context: &'ctx Context, - builder: &Builder<'ctx>, intrinsics: &Intrinsics<'ctx>, ) -> Result<(), String> { for (sig_index, sig) in info.signatures.iter() { @@ -42,7 +40,7 @@ pub fn generate_trampolines<'ctx>( Some(Linkage::External), ); - generate_trampoline(trampoline_func, sig, context, builder, intrinsics)?; + generate_trampoline(trampoline_func, sig, context, intrinsics)?; } Ok(()) } @@ -51,10 +49,10 @@ fn generate_trampoline<'ctx>( trampoline_func: FunctionValue, func_sig: &FuncSig, context: &'ctx Context, - builder: &Builder<'ctx>, intrinsics: &Intrinsics<'ctx>, ) -> Result<(), String> { let entry_block = context.append_basic_block(trampoline_func, "entry"); + let builder = context.create_builder(); builder.position_at_end(entry_block); let (vmctx_ptr, func_ptr, args_ptr, returns_ptr) = match trampoline_func.get_params().as_slice()