diff --git a/Cargo.lock b/Cargo.lock index d79fdbdf7..c386244f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -927,27 +927,26 @@ dependencies = [ [[package]] name = "inkwell" -version = "0.2.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f4fcb4a4fa0b8f7b4178e24e6317d6f8b95ab500d8e6e1bd4283b6860e369c1" +checksum = "30932a1258d02e3c7344618abcdbb5dca03e0f8d2ad34496067d1f371cfceda6" dependencies = [ - "either", + "bitflags 2.13.1", "inkwell_internals", "libc", "llvm-sys", - "once_cell", - "parking_lot", + "thiserror", ] [[package]] name = "inkwell_internals" -version = "0.8.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b185e7d068d6820411502efa14d8fbf010750485399402156b72dd2a548ef8e9" +checksum = "04a85f1cf8de4f1df2ebd93b6afe957fa2acd0081c97dabfa41651eeeb44756e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -1133,9 +1132,8 @@ checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "lld_rs" -version = "140.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baaf6b2e9692ad79c55f5c61beba6340eda0771bfe699a73f29216d88853bf8f" +version = "221.0.0" +source = "git+https://github.com/mun-lang/lld-rs?rev=b16fcb8fcc0b6d7215b25a85f0c9bd743d90481a#b16fcb8fcc0b6d7215b25a85f0c9bd743d90481a" dependencies = [ "cc", "lazy_static", @@ -1146,14 +1144,15 @@ dependencies = [ [[package]] name = "llvm-sys" -version = "140.1.3" +version = "221.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3dc78e9857c0231ec11e3bdccf63870493fdc7d0570b0ea7d50bf5df0cb1a0c" +checksum = "2e52e36cd9eef0d5c4ba35c751c252f207642293009bb774185f84f678c7683c" dependencies = [ + "anyhow", "cc", "lazy_static", "libc", - "regex", + "regex-lite", "semver", ] @@ -1933,6 +1932,12 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + [[package]] name = "regex-syntax" version = "0.8.11" diff --git a/Cargo.toml b/Cargo.toml index bd5d84c63..42e63df77 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,12 +34,12 @@ either = { version = "1.17.0", default-features = false } enable-ansi-support = { version = "0.3.1", default-features = false } ena = { version = "0.14.4", default-features = false } heck = "0.5.0" -inkwell = { version = "0.2.0", default-features = false } +inkwell = { version = "0.10.0", default-features = false } insta = { version = "1.48.0", default-features = false } itertools = { version = "0.15.0", default-features = false, features = ["use_alloc"] } la-arena = { version = "0.3.1", default-features = false } libloading = { version = "0.9.0", default-features = false, features = ["std"] } -lld_rs = { version = "140.0.0", default-features = false } +lld_rs = { git = "https://github.com/mun-lang/lld-rs", rev = "b16fcb8fcc0b6d7215b25a85f0c9bd743d90481a", default-features = false } log = { version = "0.4.33", default-features = false } lsp-server = { version = "0.10.0", default-features = false } lsp-types = { version = "0.97.0", default-features = false } diff --git a/crates/mun_codegen/Cargo.toml b/crates/mun_codegen/Cargo.toml index d396e2cc8..b2c6c8a81 100644 --- a/crates/mun_codegen/Cargo.toml +++ b/crates/mun_codegen/Cargo.toml @@ -19,7 +19,7 @@ arwen-codesign = { workspace = true } by_address = { workspace = true } mun_hir = { version = "0.6.0-dev", path = "../mun_hir" } mun_hir_input = { version = "0.6.0-dev", path = "../mun_hir_input" } -inkwell = { workspace = true, features = ["llvm14-0", "target-x86", "target-aarch64"] } +inkwell = { workspace = true, features = ["llvm22-1-no-llvm-linking", "target-x86", "target-aarch64"] } itertools = { workspace = true } mun_target = { version = "0.6.0-dev", path = "../mun_target" } lld_rs = { workspace = true } diff --git a/crates/mun_codegen/src/code_gen.rs b/crates/mun_codegen/src/code_gen.rs index 3b4a115b5..3d0aac061 100644 --- a/crates/mun_codegen/src/code_gen.rs +++ b/crates/mun_codegen/src/code_gen.rs @@ -2,9 +2,7 @@ pub use assembly_builder::AssemblyBuilder; pub use context::CodeGenContext; pub use error::CodeGenerationError; use inkwell::{ - module::Module, - passes::{PassManager, PassManagerBuilder}, - OptimizationLevel, + module::Module, passes::PassBuilderOptions, targets::TargetMachine, OptimizationLevel, }; pub(crate) use object_file::ObjectFile; @@ -14,13 +12,19 @@ mod error; mod object_file; pub mod symbols; -/// Optimizes the specified LLVM `Module` using the default passes for the given -/// `OptimizationLevel`. -fn optimize_module(module: &Module<'_>, optimization_lvl: OptimizationLevel) { - let pass_builder = PassManagerBuilder::create(); - pass_builder.set_optimization_level(optimization_lvl); - - let module_pass_manager = PassManager::create(()); - pass_builder.populate_module_pass_manager(&module_pass_manager); - module_pass_manager.run_on(module); +/// Optimizes the specified LLVM `Module` using LLVM's default pipeline. +fn optimize_module( + module: &Module<'_>, + target_machine: &TargetMachine, + optimization_lvl: OptimizationLevel, +) { + let pipeline = match optimization_lvl { + OptimizationLevel::None => "default", + OptimizationLevel::Less => "default", + OptimizationLevel::Default => "default", + OptimizationLevel::Aggressive => "default", + }; + module + .run_passes(pipeline, target_machine, PassBuilderOptions::create()) + .expect("LLVM module optimization failed"); } diff --git a/crates/mun_codegen/src/code_gen/assembly_builder.rs b/crates/mun_codegen/src/code_gen/assembly_builder.rs index 1c4adc6fe..91b6ef02e 100644 --- a/crates/mun_codegen/src/code_gen/assembly_builder.rs +++ b/crates/mun_codegen/src/code_gen/assembly_builder.rs @@ -97,12 +97,15 @@ impl<'db, 'ink, 'ctx, 't> AssemblyBuilder<'db, 'ink, 'ctx, 't> { &group_ir.dispatch_table, &group_ir.type_table, &self.code_gen.hir_types, - self.code_gen.optimization_level, dependencies, ); // Optimize the assembly module - optimize_module(&self.assembly_module, self.code_gen.optimization_level); + optimize_module( + &self.assembly_module, + &self.code_gen.target_machine, + self.code_gen.optimization_level, + ); // Debug print the IR //println!("{}", assembly_module.print_to_string().to_string()); diff --git a/crates/mun_codegen/src/code_gen/symbols/mod.rs b/crates/mun_codegen/src/code_gen/symbols/mod.rs index cd15bc005..b92f1b4ce 100644 --- a/crates/mun_codegen/src/code_gen/symbols/mod.rs +++ b/crates/mun_codegen/src/code_gen/symbols/mod.rs @@ -15,7 +15,6 @@ use mun_hir::{HirDatabase, TyKind}; use crate::{ ir::{ dispatch_table::{DispatchTable, DispatchableFunction}, - function, ty::{guid_from_struct, HirTypeCache}, type_table::TypeTable, types::{self as ir, AbiBuilder}, @@ -171,7 +170,7 @@ fn gen_struct_info<'ink>( let field_names = abi.types.private_pointer_array( abi.module, &format!("struct_info::<{name}>::field_names"), - abi.context.i8_type().ptr_type(AddressSpace::default()), + abi.context.ptr_type(AddressSpace::default()), &field_names, true, ); @@ -239,7 +238,7 @@ fn get_function_definition_array<'ink, 'a>( fn_ptr: value .as_global_value() .as_pointer_value() - .const_cast(abi.context.i8_type().ptr_type(AddressSpace::default())), + .const_cast(abi.context.ptr_type(AddressSpace::default())), } }) .collect(); @@ -274,7 +273,7 @@ fn gen_type_lut<'ink>( ) }) .collect(); - let byte_ptr = abi.context.i8_type().ptr_type(AddressSpace::default()); + let byte_ptr = abi.context.ptr_type(AddressSpace::default()); let type_names = abi.types.private_pointer_array( abi.module, "fn.get_info.typeLut.typeNames", @@ -283,7 +282,7 @@ fn gen_type_lut<'ink>( false, ); - let pointer_table_type = byte_ptr.ptr_type(AddressSpace::default()); + let pointer_table_type = abi.context.ptr_type(AddressSpace::default()); let type_ptrs = TypeTable::find_global(abi.module).map_or_else( || pointer_table_type.const_null(), |global| global.as_pointer_value().const_cast(pointer_table_type), @@ -313,8 +312,7 @@ fn gen_dispatch_table<'ink>( &prototypes, ); - let byte_ptr = abi.context.i8_type().ptr_type(AddressSpace::default()); - let pointer_table_type = byte_ptr.ptr_type(AddressSpace::default()); + let pointer_table_type = abi.context.ptr_type(AddressSpace::default()); let fn_ptrs = dispatch_table.global_value().map_or_else( || pointer_table_type.const_null(), |_| { @@ -347,7 +345,6 @@ pub(super) fn gen_reflection_ir<'db, 'ink>( dispatch_table: &DispatchTable<'ink>, type_table: &TypeTable<'ink>, hir_types: &HirTypeCache<'db, 'ink>, - optimization_level: inkwell::OptimizationLevel, dependencies: Vec, ) { let type_ids = TypeIdBuilder::new(abi); @@ -360,11 +357,9 @@ pub(super) fn gen_reflection_ir<'db, 'ink>( hir_types, &type_ids, ); - let functions = functions.as_pointer_value().const_cast( - abi.types - .function_definition_type() - .ptr_type(AddressSpace::default()), - ); + let functions = functions + .as_pointer_value() + .const_cast(abi.context.ptr_type(AddressSpace::default())); let module_info = ir::ModuleInfo { path: abi.types.intern_c_str( @@ -386,7 +381,6 @@ pub(super) fn gen_reflection_ir<'db, 'ink>( &module_info, &dispatch_table, &type_lut, - optimization_level, dependencies, ); gen_set_allocator_handle_fn(abi); @@ -399,7 +393,6 @@ fn gen_get_info_fn<'ink>( module_info: &ir::ModuleInfo<'ink>, dispatch_table: &ir::DispatchTable<'ink>, type_lut: &ir::TypeLut<'ink>, - optimization_level: inkwell::OptimizationLevel, dependencies: Vec, ) { let is_windows = db.target().options.is_like_windows; @@ -429,7 +422,7 @@ fn gen_get_info_fn<'ink>( ) }) .collect(); - let byte_ptr = abi.context.i8_type().ptr_type(AddressSpace::default()); + let byte_ptr = abi.context.ptr_type(AddressSpace::default()); let dependencies_ptr = abi.types.private_pointer_array( abi.module, "dependencies", @@ -452,23 +445,25 @@ fn gen_get_info_fn<'ink>( let body = abi.context.append_basic_block(function, "body"); builder.position_at_end(body); if is_windows { - builder.build_store( - function - .get_nth_param(0) - .expect("sret function must receive a result pointer") - .into_pointer_value(), - assembly_info, - ); - builder.build_return(None); + builder + .build_store( + function + .get_nth_param(0) + .expect("sret function must receive a result pointer") + .into_pointer_value(), + assembly_info, + ) + .expect("valid store"); + builder.build_return(None).expect("valid return"); } else { - builder.build_return(Some(&assembly_info)); + builder + .build_return(Some(&assembly_info)) + .expect("valid return"); } - - function::create_pass_manager(abi.module, optimization_level).run_on(&function); } fn gen_set_allocator_handle_fn(abi: &AbiBuilder<'_, '_>) { - let pointer_type = abi.context.i8_type().ptr_type(AddressSpace::default()); + let pointer_type = abi.context.ptr_type(AddressSpace::default()); let function_type = abi .context .void_type() @@ -483,14 +478,16 @@ fn gen_set_allocator_handle_fn(abi: &AbiBuilder<'_, '_>) { builder.position_at_end(body); if let Some(global) = abi.module.get_global("allocatorHandle") { - builder.build_store( - global.as_pointer_value(), - function - .get_nth_param(0) - .expect("allocator setter must receive the allocator handle"), - ); + builder + .build_store( + global.as_pointer_value(), + function + .get_nth_param(0) + .expect("allocator setter must receive the allocator handle"), + ) + .expect("valid store"); } - builder.build_return(None); + builder.build_return(None).expect("valid return"); } fn gen_get_version_fn(abi: &AbiBuilder<'_, '_>) { @@ -503,9 +500,11 @@ fn gen_get_version_fn(abi: &AbiBuilder<'_, '_>) { let builder = abi.context.create_builder(); let body = abi.context.append_basic_block(function, "body"); builder.position_at_end(body); - builder.build_return(Some( - &abi.context - .i32_type() - .const_int(u64::from(abi::ABI_VERSION), false), - )); + builder + .build_return(Some( + &abi.context + .i32_type() + .const_int(u64::from(abi::ABI_VERSION), false), + )) + .expect("valid return"); } diff --git a/crates/mun_codegen/src/ir.rs b/crates/mun_codegen/src/ir.rs index 0805c32d4..0f55d5803 100644 --- a/crates/mun_codegen/src/ir.rs +++ b/crates/mun_codegen/src/ir.rs @@ -107,26 +107,26 @@ pub trait IsPointerType<'ink> { } impl<'ink, S: BasicType<'ink>, T: IsIrType<'ink, Type = S>> IsPointerType<'ink> for *const T { - fn ir_type(context: &'ink Context, target: &TargetData) -> PointerType<'ink> { - T::ir_type(context, target).ptr_type(AddressSpace::default()) + fn ir_type(context: &'ink Context, _target: &TargetData) -> PointerType<'ink> { + context.ptr_type(AddressSpace::default()) } } impl<'ink> IsPointerType<'ink> for *const std::ffi::c_void { fn ir_type(context: &'ink Context, _target: &TargetData) -> PointerType<'ink> { - context.i8_type().ptr_type(AddressSpace::default()) + context.ptr_type(AddressSpace::default()) } } impl<'ink> IsPointerType<'ink> for *mut std::ffi::c_void { fn ir_type(context: &'ink Context, _target: &TargetData) -> PointerType<'ink> { - context.i8_type().ptr_type(AddressSpace::default()) + context.ptr_type(AddressSpace::default()) } } impl<'ink, S: BasicType<'ink>, T: IsIrType<'ink, Type = S>> IsPointerType<'ink> for *mut T { - fn ir_type(context: &'ink Context, target: &TargetData) -> PointerType<'ink> { - T::ir_type(context, target).ptr_type(AddressSpace::default()) + fn ir_type(context: &'ink Context, _target: &TargetData) -> PointerType<'ink> { + context.ptr_type(AddressSpace::default()) } } diff --git a/crates/mun_codegen/src/ir/array.rs b/crates/mun_codegen/src/ir/array.rs index 58650fc63..3aaf55e7e 100644 --- a/crates/mun_codegen/src/ir/array.rs +++ b/crates/mun_codegen/src/ir/array.rs @@ -38,7 +38,12 @@ impl<'ink> RuntimeArrayValue<'ink> { let pointer = array.pointer(); let value_name = pointer.get_name().to_string_lossy(); let pointer = builder - .build_struct_gep(pointer, 0, &format!("{value_name}->length")) + .build_struct_gep( + self.array_type, + pointer, + 0, + &format!("{value_name}->length"), + ) .expect("could not get `length` from array struct"); PlaceValue::new(pointer, self.length_ty().into()) } @@ -49,7 +54,12 @@ impl<'ink> RuntimeArrayValue<'ink> { let pointer = array.pointer(); let value_name = pointer.get_name().to_string_lossy(); let pointer = builder - .build_struct_gep(pointer, 2, &format!("{value_name}->elements")) + .build_struct_gep( + self.array_type, + pointer, + 2, + &format!("{value_name}->elements"), + ) .expect("could not get `elements` from array struct"); PlaceValue::new(pointer, self.element_ty()) } diff --git a/crates/mun_codegen/src/ir/body.rs b/crates/mun_codegen/src/ir/body.rs index 0ca54def2..81f5e7360 100644 --- a/crates/mun_codegen/src/ir/body.rs +++ b/crates/mun_codegen/src/ir/body.rs @@ -9,7 +9,7 @@ use inkwell::{ AggregateValueEnum, BasicMetadataValueEnum, BasicValueEnum, CallSiteValue, FloatValue, FunctionValue, GlobalValue, IntValue, PointerValue, StructValue, }, - AddressSpace, FloatPredicate, IntPredicate, + FloatPredicate, IntPredicate, }; use mun_abi as abi; use mun_hir::{ @@ -119,7 +119,9 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { let name = name.to_string(); let param = self.fn_value.get_nth_param(i as u32).unwrap(); let builder = self.new_alloca_builder(); - let param_ptr = builder.build_alloca(param.get_type(), &name); + let param_ptr = builder + .build_alloca(param.get_type(), &name) + .expect("valid alloca"); let ty = self.infer[*pat].clone(); let place = Place::new(PlaceValue::new(param_ptr, param.get_type()), ty.clone()); @@ -156,9 +158,11 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { .clone(); if !block_ret_type.is_never() { if fn_ret_type.is_empty() { - self.builder.build_return(None); + self.builder.build_return(None).expect("valid return"); } else if let Some(operand) = ret_value { - self.builder.build_return(Some(&operand.value())); + self.builder + .build_return(Some(&operand.value())) + .expect("valid return"); } } } @@ -191,7 +195,7 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { let ret_value = self .gen_call(self.hir_function, &args) .try_as_basic_value() - .left(); + .basic(); let call_return_type = &self.infer[self.body.body_expr()]; if !call_return_type.is_never() { @@ -204,7 +208,7 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { .clone(); if fn_ret_type.is_empty() { - self.builder.build_return(None); + self.builder.build_return(None).expect("valid return"); } else if let Some(value) = ret_value { let ret_value = if let Some(hir_struct) = fn_ret_type.as_struct() { if hir_struct.data(self.db).memory_kind == mun_hir::StructMemoryKind::Value { @@ -215,7 +219,9 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { } else { value }; - self.builder.build_return(Some(&ret_value)); + self.builder + .build_return(Some(&ret_value)) + .expect("valid return"); } } } @@ -263,7 +269,7 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { self.gen_call(def, &args) .try_as_basic_value() - .left() + .basic() // If the called function is a void function it doesn't return anything. // If this method (`gen_expr`) returns None we assume the return value // is `never`. We return a const unit struct here to ensure that at @@ -411,14 +417,6 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { self.external_globals.type_table, ); - // HACK: We should be able to use pointers for built-in struct types like - // `TypeInfo` in intrinsics - let type_info_ptr = self.builder.build_bitcast( - type_info_ptr, - self.context.i8_type().ptr_type(AddressSpace::default()), - "type_info_ptr_to_i8_ptr", - ); - let allocator_handle = self.get_allocator_handle_ptr(); // Safety: we can be sure that the new intrinsic returns a reference. @@ -429,21 +427,11 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { "ref", ) .try_as_basic_value() - .left() + .basic() .unwrap() .into_pointer_value(); - // Cast the object pointer to the struct type - let typed_reference = self - .builder - .build_bitcast( - untyped_reference, - struct_ir_ty - .ptr_type(AddressSpace::default()) - .ptr_type(AddressSpace::default()), - &format!("ref<{}>", hir_struct.name(self.db)), - ) - .into_pointer_value(); + let typed_reference = untyped_reference; // Construct a reference of the object let reference = RuntimeReferenceValue::new(typed_reference, struct_ir_ty.into()); @@ -560,7 +548,9 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { .hir_types .get_basic_type(&pat_ty) .expect("expected basic type"); - let pointer = builder.build_alloca(ty, &name.to_string()); + let pointer = builder + .build_alloca(ty, &name.to_string()) + .expect("valid alloca"); let place = Place::new(PlaceValue::new(pointer, ty), pat_ty.clone()); self.pat_to_local.insert(pat, place.clone()); self.pat_to_name.insert(pat, name.to_string()); @@ -692,7 +682,12 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { .expect("no value") .into_float_value(); match op { - UnaryOp::Neg => Some(self.builder.build_float_neg(value, "neg").into()), + UnaryOp::Neg => Some( + self.builder + .build_float_neg(value, "neg") + .expect("valid float negation") + .into(), + ), UnaryOp::Not => unimplemented!("Operator {:?} is not implemented for float", op), } } @@ -712,12 +707,22 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { match op { UnaryOp::Neg => { if signedness == mun_hir::Signedness::Signed { - Some(self.builder.build_int_neg(value, "neg").into()) + Some( + self.builder + .build_int_neg(value, "neg") + .expect("valid integer negation") + .into(), + ) } else { unimplemented!("Operator {:?} is not implemented for unsigned integer", op) } } - UnaryOp::Not => Some(self.builder.build_not(value, "not").into()), + UnaryOp::Not => Some( + self.builder + .build_not(value, "not") + .expect("valid bitwise negation") + .into(), + ), //_ => unimplemented!("Operator {:?} is not implemented for integer", op), } } @@ -730,7 +735,12 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { .expect("no value") .into_int_value(); match op { - UnaryOp::Not => Some(self.builder.build_not(value, "not").into()), + UnaryOp::Not => Some( + self.builder + .build_not(value, "not") + .expect("valid bitwise negation") + .into(), + ), UnaryOp::Neg => unimplemented!("Operator {:?} is not implemented for boolean", op), } } @@ -813,6 +823,7 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { Some( self.builder .build_float_compare(predicate, lhs, rhs, name) + .expect("valid float comparison") .into(), ) } @@ -934,9 +945,18 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { op: ArithOp, ) -> IntValue<'ink> { match op { - ArithOp::BitAnd => self.builder.build_and(lhs, rhs, "bit_and"), - ArithOp::BitOr => self.builder.build_or(lhs, rhs, "bit_or"), - ArithOp::BitXor => self.builder.build_xor(lhs, rhs, "bit_xor"), + ArithOp::BitAnd => self + .builder + .build_and(lhs, rhs, "bit_and") + .expect("valid bitwise and"), + ArithOp::BitOr => self + .builder + .build_or(lhs, rhs, "bit_or") + .expect("valid bitwise or"), + ArithOp::BitXor => self + .builder + .build_xor(lhs, rhs, "bit_xor") + .expect("valid bitwise xor"), _ => unimplemented!( "Assignment with {:?} operator is not implemented for boolean", op @@ -996,7 +1016,9 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { ), }; - self.builder.build_int_compare(predicate, lhs, rhs, name) + self.builder + .build_int_compare(predicate, lhs, rhs, name) + .expect("valid integer comparison") } fn gen_arith_bin_op_int( @@ -1007,29 +1029,58 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { signedness: mun_hir::Signedness, ) -> IntValue<'ink> { match op { - ArithOp::Add => self.builder.build_int_add(lhs, rhs, "add"), - ArithOp::Subtract => self.builder.build_int_sub(lhs, rhs, "sub"), + ArithOp::Add => self + .builder + .build_int_add(lhs, rhs, "add") + .expect("valid integer addition"), + ArithOp::Subtract => self + .builder + .build_int_sub(lhs, rhs, "sub") + .expect("valid integer subtraction"), ArithOp::Divide => match signedness { - mun_hir::Signedness::Signed => self.builder.build_int_signed_div(lhs, rhs, "div"), - mun_hir::Signedness::Unsigned => { - self.builder.build_int_unsigned_div(lhs, rhs, "div") - } + mun_hir::Signedness::Signed => self + .builder + .build_int_signed_div(lhs, rhs, "div") + .expect("valid signed division"), + mun_hir::Signedness::Unsigned => self + .builder + .build_int_unsigned_div(lhs, rhs, "div") + .expect("valid unsigned division"), }, - ArithOp::Multiply => self.builder.build_int_mul(lhs, rhs, "mul"), + ArithOp::Multiply => self + .builder + .build_int_mul(lhs, rhs, "mul") + .expect("valid integer multiplication"), ArithOp::Remainder => match signedness { - mun_hir::Signedness::Signed => self.builder.build_int_signed_rem(lhs, rhs, "rem"), - mun_hir::Signedness::Unsigned => { - self.builder.build_int_unsigned_rem(lhs, rhs, "rem") - } + mun_hir::Signedness::Signed => self + .builder + .build_int_signed_rem(lhs, rhs, "rem") + .expect("valid signed remainder"), + mun_hir::Signedness::Unsigned => self + .builder + .build_int_unsigned_rem(lhs, rhs, "rem") + .expect("valid unsigned remainder"), }, - ArithOp::LeftShift => self.builder.build_left_shift(lhs, rhs, "left_shift"), - ArithOp::RightShift => { - self.builder - .build_right_shift(lhs, rhs, signedness.is_signed(), "right_shift") - } - ArithOp::BitAnd => self.builder.build_and(lhs, rhs, "bit_and"), - ArithOp::BitOr => self.builder.build_or(lhs, rhs, "bit_or"), - ArithOp::BitXor => self.builder.build_xor(lhs, rhs, "bit_xor"), + ArithOp::LeftShift => self + .builder + .build_left_shift(lhs, rhs, "left_shift") + .expect("valid left shift"), + ArithOp::RightShift => self + .builder + .build_right_shift(lhs, rhs, signedness.is_signed(), "right_shift") + .expect("valid right shift"), + ArithOp::BitAnd => self + .builder + .build_and(lhs, rhs, "bit_and") + .expect("valid bitwise and"), + ArithOp::BitOr => self + .builder + .build_or(lhs, rhs, "bit_or") + .expect("valid bitwise or"), + ArithOp::BitXor => self + .builder + .build_xor(lhs, rhs, "bit_xor") + .expect("valid bitwise xor"), } } @@ -1040,11 +1091,26 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { op: ArithOp, ) -> FloatValue<'ink> { match op { - ArithOp::Add => self.builder.build_float_add(lhs, rhs, "add"), - ArithOp::Subtract => self.builder.build_float_sub(lhs, rhs, "sub"), - ArithOp::Divide => self.builder.build_float_div(lhs, rhs, "div"), - ArithOp::Multiply => self.builder.build_float_mul(lhs, rhs, "mul"), - ArithOp::Remainder => self.builder.build_float_rem(lhs, rhs, "rem"), + ArithOp::Add => self + .builder + .build_float_add(lhs, rhs, "add") + .expect("valid float addition"), + ArithOp::Subtract => self + .builder + .build_float_sub(lhs, rhs, "sub") + .expect("valid float subtraction"), + ArithOp::Divide => self + .builder + .build_float_div(lhs, rhs, "div") + .expect("valid float division"), + ArithOp::Multiply => self + .builder + .build_float_mul(lhs, rhs, "mul") + .expect("valid float multiplication"), + ArithOp::Remainder => self + .builder + .build_float_rem(lhs, rhs, "rem") + .expect("valid float remainder"), ArithOp::LeftShift | ArithOp::RightShift | ArithOp::BitAnd @@ -1062,8 +1128,14 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { op: LogicOp, ) -> IntValue<'ink> { match op { - LogicOp::And => self.builder.build_and(lhs, rhs, "and"), - LogicOp::Or => self.builder.build_or(lhs, rhs, "or"), + LogicOp::And => self + .builder + .build_and(lhs, rhs, "and") + .expect("valid bitwise and"), + LogicOp::Or => self + .builder + .build_or(lhs, rhs, "or") + .expect("valid bitwise or"), } } @@ -1161,13 +1233,16 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { // Build the actual branching IR for the if statement let else_block = else_block_and_expr.map_or(merge_block, |e| e.0); self.builder - .build_conditional_branch(condition_ir, then_block, else_block); + .build_conditional_branch(condition_ir, then_block, else_block) + .expect("valid conditional branch"); // Fill the then block self.builder.position_at_end(then_block); let then_block_ir = self.gen_expr(then_branch); if !self.infer[then_branch].is_never() { - self.builder.build_unconditional_branch(merge_block); + self.builder + .build_unconditional_branch(merge_block) + .expect("valid branch"); } then_block = self.builder.get_insert_block().unwrap(); @@ -1179,7 +1254,9 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { self.builder.position_at_end(else_block); let result_ir = self.gen_expr(*else_branch); if result_ir.is_some() { - self.builder.build_unconditional_branch(merge_block); + self.builder + .build_unconditional_branch(merge_block) + .expect("valid branch"); } Some((result_ir, self.builder.get_insert_block().unwrap())) } else { @@ -1194,7 +1271,10 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { // Construct phi block if a value was returned if let Some(then_block_ir) = then_block_ir { if let Some((Some(else_block_ir), else_block)) = else_ir_and_block { - let phi = self.builder.build_phi(then_block_ir.get_type(), "iftmp"); + let phi = self + .builder + .build_phi(then_block_ir.get_type(), "iftmp") + .expect("valid phi node"); phi.add_incoming(&[(&then_block_ir, then_block), (&else_block_ir, else_block)]); Some(phi.as_basic_value()) } else { @@ -1224,9 +1304,11 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { // Construct a return statement from the returned value of the body if let Some(value) = ret_value { - self.builder.build_return(Some(&value)); + self.builder + .build_return(Some(&value)) + .expect("valid return"); } else { - self.builder.build_return(None); + self.builder.build_return(None).expect("valid return"); } None @@ -1251,7 +1333,8 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { self.builder.get_insert_block().unwrap(), ))); self.builder - .build_unconditional_branch(loop_info.exit_block); + .build_unconditional_branch(loop_info.exit_block) + .expect("valid branch"); } } else { // If the break expression doesnt contain a break statement. Add a none to the @@ -1259,7 +1342,8 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { let loop_info = self.active_loop.as_mut().unwrap(); loop_info.break_values.push(None); self.builder - .build_unconditional_branch(loop_info.exit_block); + .build_unconditional_branch(loop_info.exit_block) + .expect("valid branch"); }; None @@ -1306,7 +1390,9 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { let exit_block = context.append_basic_block(self.fn_value, "afterwhile"); // Insert an explicit fall through from the current block to the condition check - self.builder.build_unconditional_branch(cond_block); + self.builder + .build_unconditional_branch(cond_block) + .expect("valid branch"); // Generate condition block self.builder.position_at_end(cond_block); @@ -1315,18 +1401,18 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { .map(|value| self.opt_deref_value(condition_expr, value)); { let condition_ir = condition_ir?; - self.builder.build_conditional_branch( - condition_ir.into_int_value(), - loop_block, - exit_block, - ); + self.builder + .build_conditional_branch(condition_ir.into_int_value(), loop_block, exit_block) + .expect("valid conditional branch"); } // Generate loop block self.builder.position_at_end(loop_block); let (exit_block, _, value) = self.gen_loop_block_expr(body_expr, exit_block); if value.is_some() { - self.builder.build_unconditional_branch(cond_block); + self.builder + .build_unconditional_branch(cond_block) + .expect("valid branch"); } // Generate exit block @@ -1341,13 +1427,17 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { let exit_block = context.append_basic_block(self.fn_value, "exit"); // Insert an explicit fall through from the current block to the loop - self.builder.build_unconditional_branch(loop_block); + self.builder + .build_unconditional_branch(loop_block) + .expect("valid branch"); // Generate the body of the loop self.builder.position_at_end(loop_block); let (exit_block, break_values, value) = self.gen_loop_block_expr(body_expr, exit_block); if value.is_some() { - self.builder.build_unconditional_branch(loop_block); + self.builder + .build_unconditional_branch(loop_block) + .expect("valid branch"); } if break_values.is_empty() { @@ -1366,7 +1456,10 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { // generate a phi value. This then assumes that all breaks had // values. if let Some(Some((value, _))) = break_values.first() { - let phi = self.builder.build_phi(value.get_type(), "exit"); + let phi = self + .builder + .build_phi(value.get_type(), "exit") + .expect("valid phi node"); for (value, block) in break_values.into_iter().map(Option::unwrap) { phi.add_incoming(&[(&value, block)]); } @@ -1408,7 +1501,7 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { Some( self.builder .build_extract_value(receiver_struct, field_idx, field_ir_name) - .unwrap_or_else(|| { + .unwrap_or_else(|_| { panic!( "could not extract field {name} (index: {field_idx}) from struct {hir_struct_name}" ) @@ -1451,6 +1544,7 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { let pointer = self .builder .build_struct_gep( + self.hir_types.get_struct_type(hir_struct), receiver_ptr, field_idx, &format!("{hir_struct_name}->{name}"), @@ -1490,14 +1584,6 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { self.external_globals.type_table, ); - // HACK: We should be able to use pointers for built-in struct types like - // `TypeInfo` in intrinsics - let type_info_ptr = self.builder.build_bitcast( - type_info_ptr, - self.context.i8_type().ptr_type(AddressSpace::default()), - "type_info_ptr_to_i8_ptr", - ); - let allocator_handle = self.get_allocator_handle_ptr(); let length_value = self @@ -1519,36 +1605,29 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { "ref", ) .try_as_basic_value() - .left() + .basic() .unwrap() .into_pointer_value(); - // Cast the object pointer to the array struct type - let array_ty = self.hir_types.get_array_type(&element_ty); - let array_ptr = self - .builder - .build_bitcast( - untyped_array_ptr, - array_ty - .ptr_type(AddressSpace::default()) - .ptr_type(AddressSpace::default()), - &format!("ref<[{}]>", element_ty.display(self.db)), - ) - .into_pointer_value(); + let array_ir_ty = self.hir_types.get_array_type(&element_ty); + let array_ptr = untyped_array_ptr; - let array = RuntimeArrayValue::new(array_ptr, array_ty); + let array = RuntimeArrayValue::new(array_ptr, array_ir_ty); let array_elements = array.get_elements(&self.builder); for (idx, expr) in exprs.iter().enumerate() { let pointer = unsafe { - self.builder.build_gep( - array_elements.pointer(), - &[self.context.i64_type().const_int(idx as u64, false)], - &format!( - "{}[{}]", - array_elements.pointer().get_name().to_string_lossy(), - idx - ), - ) + self.builder + .build_gep( + array_elements.pointee(), + array_elements.pointer(), + &[self.context.i64_type().const_int(idx as u64, false)], + &format!( + "{}[{}]", + array_elements.pointer().get_name().to_string_lossy(), + idx + ), + ) + .expect("valid array element pointer") }; let place = Place::new( PlaceValue::new(pointer, array_elements.pointee()), @@ -1594,11 +1673,14 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { let index = self.gen_expr(index)?.into_int_value(); let elements = base.get_elements(&self.builder); let pointer = unsafe { - self.builder.build_gep( - elements.pointer(), - &[index], - &format!("{}+index", elements.pointer().get_name().to_string_lossy()), - ) + self.builder + .build_gep( + elements.pointee(), + elements.pointer(), + &[index], + &format!("{}+index", elements.pointer().get_name().to_string_lossy()), + ) + .expect("valid array element pointer") }; Some(Place::new( PlaceValue::new(pointer, elements.pointee()), @@ -1610,12 +1692,14 @@ impl<'db, 'ink, 't> BodyIrGenerator<'db, 'ink, 't> { fn get_allocator_handle_ptr(&self) -> PointerValue<'ink> { self.builder .build_load( + self.context.ptr_type(inkwell::AddressSpace::default()), self.external_globals .alloc_handle .expect("no allocator handle was specified, this is required for structs") .as_pointer_value(), "allocator_handle", ) + .expect("valid allocator handle load") .into_pointer_value() } } diff --git a/crates/mun_codegen/src/ir/dispatch_table.rs b/crates/mun_codegen/src/ir/dispatch_table.rs index 9274dcf5e..9f8c24595 100644 --- a/crates/mun_codegen/src/ir/dispatch_table.rs +++ b/crates/mun_codegen/src/ir/dispatch_table.rs @@ -94,7 +94,7 @@ impl<'ink> DispatchTable<'ink> { .get(&function) .expect("unknown function"); - Self::gen_function_lookup_by_index( + self.gen_function_lookup_by_index( table_ref, builder, &function_name, @@ -120,7 +120,7 @@ impl<'ink> DispatchTable<'ink> { .get(&prototype) .expect("unknown function"); - Self::gen_function_lookup_by_index( + self.gen_function_lookup_by_index( table_ref, builder, &prototype.name, @@ -133,6 +133,7 @@ impl<'ink> DispatchTable<'ink> { /// something along the lines of: `dispatchTable[i]`, where i is the /// index and `dispatchTable` is a struct fn gen_function_lookup_by_index( + &self, table_ref: Option>, builder: &inkwell::builder::Builder<'ink>, function_name: &str, @@ -146,6 +147,7 @@ impl<'ink> DispatchTable<'ink> { // this as a pointer access let ptr_to_function_ptr = builder .build_struct_gep( + self.table_type.expect("no dispatch table type defined"), table_ref.as_pointer_value(), index as u32, &format!("{function_name}_ptr_ptr"), @@ -155,7 +157,12 @@ impl<'ink> DispatchTable<'ink> { }); let pointer = builder - .build_load(ptr_to_function_ptr, &format!("{function_name}_ptr")) + .build_load( + ptr_to_function_ptr.get_type(), + ptr_to_function_ptr, + &format!("{function_name}_ptr"), + ) + .expect("valid dispatch table entry load") .into_pointer_value(); Callable::new(pointer, signature) } @@ -189,6 +196,8 @@ pub(crate) struct DispatchTableBuilder<'db, 'ink, 't> { table_ref: Option>, // This is the actual DispatchTable type table_type: inkwell::types::StructType<'ink>, + // Opaque pointer type used for every dispatch-table entry. + pointer_type: inkwell::types::PointerType<'ink>, // The group of modules for which the dispatch table is being build module_group: &'t ModuleGroup, // The set of modules that is referenced @@ -218,6 +227,7 @@ impl<'db, 'ink, 't> DispatchTableBuilder<'db, 'ink, 't> { entries: Vec::default(), table_ref: None, table_type: context.opaque_struct_type("DispatchTable"), + pointer_type: context.ptr_type(inkwell::AddressSpace::default()), hir_types, module_group, referenced_modules: FxHashSet::default(), @@ -340,7 +350,7 @@ impl<'db, 'ink, 't> DispatchTableBuilder<'db, 'ink, 't> { let table_body: Vec> = self .entries .iter() - .map(|f| f.ir_type.ptr_type(inkwell::AddressSpace::default()).into()) + .map(|_| self.pointer_type.into()) .collect(); // We can fill in the DispatchTable body, i.e: struct DispatchTable { ( } }; - // Construct requirements for generating the bodies - let fn_pass_manager = function::create_pass_manager(&llvm_module, code_gen.optimization_level); - // Generate the function bodies for (hir_function, llvm_function) in functions.iter() { let mut code_gen = BodyIrGenerator::new( @@ -102,7 +99,6 @@ pub(crate) fn gen_file_ir<'ink>( ); code_gen.gen_fn_body(); - fn_pass_manager.run_on(llvm_function); } for (hir_function, llvm_function) in wrapper_functions.iter() { @@ -119,7 +115,6 @@ pub(crate) fn gen_file_ir<'ink>( ); code_gen.gen_fn_wrapper(); - fn_pass_manager.run_on(llvm_function); } // Filter private methods diff --git a/crates/mun_codegen/src/ir/file_group.rs b/crates/mun_codegen/src/ir/file_group.rs index 15df02c7a..43ba6d241 100644 --- a/crates/mun_codegen/src/ir/file_group.rs +++ b/crates/mun_codegen/src/ir/file_group.rs @@ -103,12 +103,10 @@ pub(crate) fn gen_file_group_ir<'ink>( let (dispatch_table, referenced_modules) = dispatch_table_builder.build(); - let target_data = code_gen.target_machine.get_target_data(); let mut type_table_builder = TypeTableBuilder::new( code_gen.db, code_gen.context, &llvm_module, - &target_data, &dispatch_table, &code_gen.hir_types, module_group, @@ -134,7 +132,7 @@ pub(crate) fn gen_file_group_ir<'ink>( // Create the allocator handle global value let allocator_handle_type = if needs_alloc { - let allocator_handle_type = code_gen.context.i8_type().ptr_type(AddressSpace::default()); + let allocator_handle_type = code_gen.context.ptr_type(AddressSpace::default()); let global = llvm_module.add_global(allocator_handle_type, None, "allocatorHandle"); global.set_initializer(&allocator_handle_type.const_null()); global.set_unnamed_address(UnnamedAddress::Global); diff --git a/crates/mun_codegen/src/ir/function.rs b/crates/mun_codegen/src/ir/function.rs index 2ca251529..8eecf16e0 100644 --- a/crates/mun_codegen/src/ir/function.rs +++ b/crates/mun_codegen/src/ir/function.rs @@ -1,26 +1,7 @@ -use inkwell::{ - passes::{PassManager, PassManagerBuilder}, - values::FunctionValue, -}; +use inkwell::values::FunctionValue; use mun_hir::HirDatabase; -use crate::{ir::ty::HirTypeCache, Module, OptimizationLevel}; - -/// Constructs a `PassManager` to optimize functions for the given optimization -/// level. -pub(crate) fn create_pass_manager<'ink>( - module: &Module<'ink>, - optimization_lvl: OptimizationLevel, -) -> PassManager> { - let pass_builder = PassManagerBuilder::create(); - pass_builder.set_optimization_level(optimization_lvl); - - let function_pass_manager = PassManager::create(module); - pass_builder.populate_function_pass_manager(&function_pass_manager); - function_pass_manager.initialize(); - - function_pass_manager -} +use crate::{ir::ty::HirTypeCache, Module}; /// Generates a `FunctionValue` for a `mun_hir::Function`. This function does /// not generate a body for the `mun_hir::Function`. That task is left to the diff --git a/crates/mun_codegen/src/ir/reference.rs b/crates/mun_codegen/src/ir/reference.rs index 4839f5e67..dd3f2f7fb 100644 --- a/crates/mun_codegen/src/ir/reference.rs +++ b/crates/mun_codegen/src/ir/reference.rs @@ -1,8 +1,7 @@ use inkwell::{ builder::Builder, - types::{BasicType, BasicTypeEnum}, + types::BasicTypeEnum, values::{BasicValueEnum, PointerValue}, - AddressSpace, }; use crate::ir::value::PlaceValue; @@ -21,12 +20,6 @@ pub(crate) struct RuntimeReferenceValue<'ink> { impl<'ink> RuntimeReferenceValue<'ink> { /// Associates a runtime handle with the object type it addresses. pub(crate) fn new(pointer: PointerValue<'ink>, object_type: BasicTypeEnum<'ink>) -> Self { - debug_assert_eq!( - pointer.get_type(), - object_type - .ptr_type(AddressSpace::default()) - .ptr_type(AddressSpace::default()) - ); Self { pointer, object_type, @@ -41,7 +34,10 @@ impl<'ink> RuntimeReferenceValue<'ink> { /// Emits the runtime indirection with an explicit result name. pub(crate) fn get_data_named(&self, builder: &Builder<'ink>, name: &str) -> PlaceValue<'ink> { - let pointer = builder.build_load(self.pointer, name).into_pointer_value(); + let pointer = builder + .build_load(self.pointer.get_type(), self.pointer, name) + .expect("valid runtime handle load") + .into_pointer_value(); PlaceValue::new(pointer, self.object_type) } } diff --git a/crates/mun_codegen/src/ir/ty.rs b/crates/mun_codegen/src/ir/ty.rs index b32d8663f..191872883 100644 --- a/crates/mun_codegen/src/ir/ty.rs +++ b/crates/mun_codegen/src/ir/ty.rs @@ -160,10 +160,8 @@ impl<'db, 'ink> HirTypeCache<'db, 'ink> { /// are always stored on the heap so this will always be a pointer to an /// Array. pub fn get_array_reference_type(&self, element_ty: &Ty) -> PointerType<'ink> { - let ir_ty = self.get_array_type(element_ty); - ir_ty - .ptr_type(AddressSpace::default()) - .ptr_type(AddressSpace::default()) + self.get_array_type(element_ty); + self.context.ptr_type(AddressSpace::default()) } /// Returns the type of the struct that should be used for variables. @@ -178,10 +176,7 @@ impl<'db, 'ink> HirTypeCache<'db, 'ink> { // GC values are pointers to pointers // struct Foo {} // Foo** - ir_ty - .ptr_type(AddressSpace::default()) - .ptr_type(AddressSpace::default()) - .into() + self.context.ptr_type(AddressSpace::default()).into() } mun_hir::StructMemoryKind::Value => { // Value structs are passed as values @@ -196,17 +191,14 @@ impl<'db, 'ink> HirTypeCache<'db, 'ink> { &self, struct_ty: mun_hir::Struct, ) -> BasicTypeEnum<'ink> { - let ir_ty = self.get_struct_type(struct_ty); + self.get_struct_type(struct_ty); // GC values are pointers to pointers // struct Foo {} // Foo** // // Value structs are converted to GC types in the public API. - ir_ty - .ptr_type(AddressSpace::default()) - .ptr_type(AddressSpace::default()) - .into() + self.context.ptr_type(AddressSpace::default()).into() } /// Returns the type of the specified function definition diff --git a/crates/mun_codegen/src/ir/type_table.rs b/crates/mun_codegen/src/ir/type_table.rs index a171bf76a..22e7d0585 100644 --- a/crates/mun_codegen/src/ir/type_table.rs +++ b/crates/mun_codegen/src/ir/type_table.rs @@ -7,7 +7,6 @@ use std::{ use inkwell::{ context::Context, module::{Linkage, Module}, - targets::TargetData, types::{ArrayType, PointerType}, values::{GlobalValue, PointerValue}, AddressSpace, @@ -54,14 +53,22 @@ impl<'ink> TypeTable<'ink> { let global_index = context.i64_type().const_zero(); let array_index = context.i64_type().const_int(index, false); let pointer = unsafe { - builder.build_gep( - table_ref.as_pointer_value(), - &[global_index, array_index], - &format!("{}_ptr_ptr", type_info.name), - ) + builder + .build_gep( + self.table_type, + table_ref.as_pointer_value(), + &[global_index, array_index], + &format!("{}_ptr_ptr", type_info.name), + ) + .expect("valid type table entry pointer") }; builder - .build_load(pointer, &format!("{}_ptr", type_info.name)) + .build_load( + self.table_type.get_element_type(), + pointer, + &format!("{}_ptr", type_info.name), + ) + .expect("valid type table entry load") .into_pointer_value() } @@ -95,16 +102,14 @@ impl<'db, 'ink, 't> TypeTableBuilder<'db, 'ink, 't> { db: &'db dyn HirDatabase, context: &'ink Context, module: &'t Module<'ink>, - target_data: &TargetData, + dispatch_table: &'t DispatchTable<'ink>, hir_types: &'t HirTypeCache<'db, 'ink>, module_group: &'t ModuleGroup, ) -> Self { Self { db, - pointer_type: context - .ptr_sized_int_type(target_data, None) - .ptr_type(AddressSpace::default()), + pointer_type: context.ptr_type(AddressSpace::default()), module, dispatch_table, hir_types, diff --git a/crates/mun_codegen/src/ir/types.rs b/crates/mun_codegen/src/ir/types.rs index 7702cd39e..94de35b0f 100644 --- a/crates/mun_codegen/src/ir/types.rs +++ b/crates/mun_codegen/src/ir/types.rs @@ -137,10 +137,10 @@ impl<'ink> AbiTypes<'ink> { let byte_type = context.i8_type(); let u16_type = context.i16_type(); let u32_type = context.i32_type(); - let byte_ptr = byte_type.ptr_type(address_space); + let byte_ptr = context.ptr_type(address_space); let type_id = context.opaque_struct_type("mun.abi.TypeId"); - let type_id_ptr = type_id.ptr_type(address_space); + let type_id_ptr = context.ptr_type(address_space); let pointer_type_id = context.opaque_struct_type("mun.abi.PointerTypeId"); pointer_type_id.set_body(&[type_id_ptr.into(), bool_type.into()], false); let array_type_id = context.opaque_struct_type("mun.abi.ArrayTypeId"); @@ -165,9 +165,9 @@ impl<'ink> AbiTypes<'ink> { struct_definition.set_body( &[ guid_type.into(), - byte_ptr.ptr_type(address_space).into(), + context.ptr_type(address_space).into(), type_id_ptr.into(), - u16_type.ptr_type(address_space).into(), + context.ptr_type(address_space).into(), u16_type.into(), byte_type.into(), ], @@ -216,8 +216,8 @@ impl<'ink> AbiTypes<'ink> { module_info.set_body( &[ byte_ptr.into(), - function_definition.ptr_type(address_space).into(), - type_definition.ptr_type(address_space).into(), + context.ptr_type(address_space).into(), + context.ptr_type(address_space).into(), u32_type.into(), u32_type.into(), ], @@ -227,8 +227,8 @@ impl<'ink> AbiTypes<'ink> { let dispatch_table = context.opaque_struct_type("mun.abi.DispatchTable"); dispatch_table.set_body( &[ - function_prototype.ptr_type(address_space).into(), - byte_ptr.ptr_type(address_space).into(), + context.ptr_type(address_space).into(), + context.ptr_type(address_space).into(), u32_type.into(), ], false, @@ -238,8 +238,8 @@ impl<'ink> AbiTypes<'ink> { type_lut.set_body( &[ type_id_ptr.into(), - byte_ptr.ptr_type(address_space).into(), - byte_ptr.ptr_type(address_space).into(), + context.ptr_type(address_space).into(), + context.ptr_type(address_space).into(), u32_type.into(), ], false, @@ -251,7 +251,7 @@ impl<'ink> AbiTypes<'ink> { module_info.into(), dispatch_table.into(), type_lut.into(), - byte_ptr.ptr_type(address_space).into(), + context.ptr_type(address_space).into(), u32_type.into(), ], false, @@ -437,7 +437,7 @@ impl<'ink> AbiTypes<'ink> { pub fn get_info_function_type(&self, windows: bool) -> FunctionType<'ink> { if windows { self.context.void_type().fn_type( - &[self.assembly_info.ptr_type(AddressSpace::default()).into()], + &[self.context.ptr_type(AddressSpace::default()).into()], false, ) } else { @@ -493,7 +493,7 @@ impl<'ink> AbiTypes<'ink> { self.private_pointer_array( module, name, - self.type_id.ptr_type(AddressSpace::default()), + self.context.ptr_type(AddressSpace::default()), &values, null_if_empty, ) @@ -566,7 +566,7 @@ impl<'ink> AbiTypes<'ink> { let ty = self.context.i16_type(); let values: Vec<_> = values.iter().map(|&value| self.u16(value)).collect(); if null_if_empty && values.is_empty() { - return ty.ptr_type(AddressSpace::default()).const_null(); + return self.context.ptr_type(AddressSpace::default()).const_null(); } self.private_int_array(module, name, ty, &values) } @@ -596,7 +596,7 @@ impl<'ink> AbiTypes<'ink> { let global = self.private_global(module, name, initializer.into()); global .as_pointer_value() - .const_cast(ty.ptr_type(AddressSpace::default())) + .const_cast(self.context.ptr_type(AddressSpace::default())) } fn private_struct_array( @@ -607,7 +607,7 @@ impl<'ink> AbiTypes<'ink> { values: &[StructValue<'ink>], null_if_empty: bool, ) -> PointerValue<'ink> { - let pointer_type = ty.ptr_type(AddressSpace::default()); + let pointer_type = self.context.ptr_type(AddressSpace::default()); if null_if_empty && values.is_empty() { return pointer_type.const_null(); } diff --git a/crates/mun_codegen/src/ir/value.rs b/crates/mun_codegen/src/ir/value.rs index 892a4ee36..ed6071ca7 100644 --- a/crates/mun_codegen/src/ir/value.rs +++ b/crates/mun_codegen/src/ir/value.rs @@ -2,10 +2,9 @@ use inkwell::{ builder::Builder, types::{BasicTypeEnum, FunctionType}, values::{ - BasicMetadataValueEnum, BasicValueEnum, CallSiteValue, CallableValue, FunctionValue, - InstructionValue, PointerValue, + BasicMetadataValueEnum, BasicValueEnum, CallSiteValue, FunctionValue, InstructionValue, + PointerValue, }, - AddressSpace, }; use mun_hir::Ty; @@ -18,10 +17,6 @@ pub(crate) struct Callable<'ink> { impl<'ink> Callable<'ink> { pub(crate) fn new(pointer: PointerValue<'ink>, signature: FunctionType<'ink>) -> Self { - debug_assert_eq!( - pointer.get_type(), - signature.ptr_type(AddressSpace::default()) - ); Self { pointer, signature } } @@ -38,13 +33,9 @@ impl<'ink> Callable<'ink> { args: &[BasicMetadataValueEnum<'ink>], name: &str, ) -> CallSiteValue<'ink> { - debug_assert_eq!( - self.pointer.get_type(), - self.signature.ptr_type(AddressSpace::default()) - ); - let callable = CallableValue::try_from(self.pointer) - .expect("callable pointer must have a function signature"); - builder.build_call(callable, args, name) + builder + .build_indirect_call(self.signature, self.pointer, args, name) + .expect("valid function call") } } @@ -93,7 +84,9 @@ impl<'ink> PlaceValue<'ink> { self.pointee } pub(crate) fn load(self, builder: &Builder<'ink>, name: &str) -> BasicValueEnum<'ink> { - builder.build_load(self.pointer, name) + builder + .build_load(self.pointee, self.pointer, name) + .expect("valid load") } pub(crate) fn store( @@ -102,7 +95,9 @@ impl<'ink> PlaceValue<'ink> { value: BasicValueEnum<'ink>, ) -> InstructionValue<'ink> { debug_assert_eq!(self.pointee, value.get_type()); - builder.build_store(self.pointer, value) + builder + .build_store(self.pointer, value) + .expect("valid store") } } diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_f32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_f32.snap index e47774bf9..ec4518e32 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_f32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_f32.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: f32, b: f32) -> f32 { a + b }\n pub fn subtr ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define float @add(float %0, float %1) { body: - %add = fadd float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %add = fadd float %a1, %b2 ret float %add } define float @subtract(float %0, float %1) { body: - %sub = fsub float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %sub = fsub float %a1, %b2 ret float %sub } define float @multiply(float %0, float %1) { body: - %mul = fmul float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %mul = fmul float %a1, %b2 ret float %mul } define float @divide(float %0, float %1) { body: - %div = fdiv float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %div = fdiv float %a1, %b2 ret float %div } define float @remainder(float %0, float %1) { body: - %rem = frem float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %rem = frem float %a1, %b2 ret float %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_f64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_f64.snap index 9082f427d..3325ab9e6 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_f64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_f64.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: f64, b: f64) -> f64 { a + b }\n pub fn subtr ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define double @add(double %0, double %1) { body: - %add = fadd double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %add = fadd double %a1, %b2 ret double %add } define double @subtract(double %0, double %1) { body: - %sub = fsub double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %sub = fsub double %a1, %b2 ret double %sub } define double @multiply(double %0, double %1) { body: - %mul = fmul double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %mul = fmul double %a1, %b2 ret double %mul } define double @divide(double %0, double %1) { body: - %div = fdiv double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %div = fdiv double %a1, %b2 ret double %div } define double @remainder(double %0, double %1) { body: - %rem = frem double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %rem = frem double %a1, %b2 ret double %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i128.snap index 6e53dc6d6..4d3aed01e 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i128.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: i128, b: i128) -> i128 { a + b }\n pub fn su ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @add(i128 %0, i128 %1) { body: - %add = add i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %add = add i128 %a1, %b2 ret i128 %add } define i128 @subtract(i128 %0, i128 %1) { body: - %sub = sub i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %sub = sub i128 %a1, %b2 ret i128 %sub } define i128 @multiply(i128 %0, i128 %1) { body: - %mul = mul i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %mul = mul i128 %a1, %b2 ret i128 %mul } define i128 @divide(i128 %0, i128 %1) { body: - %div = sdiv i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %div = sdiv i128 %a1, %b2 ret i128 %div } define i128 @remainder(i128 %0, i128 %1) { body: - %rem = srem i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %rem = srem i128 %a1, %b2 ret i128 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i16.snap index 30967361f..bf9a5382e 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i16.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: i16, b: i16) -> i16 { a + b }\n pub fn subtr ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @add(i16 %0, i16 %1) { body: - %add = add i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %add = add i16 %a1, %b2 ret i16 %add } define i16 @subtract(i16 %0, i16 %1) { body: - %sub = sub i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %sub = sub i16 %a1, %b2 ret i16 %sub } define i16 @multiply(i16 %0, i16 %1) { body: - %mul = mul i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %mul = mul i16 %a1, %b2 ret i16 %mul } define i16 @divide(i16 %0, i16 %1) { body: - %div = sdiv i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %div = sdiv i16 %a1, %b2 ret i16 %div } define i16 @remainder(i16 %0, i16 %1) { body: - %rem = srem i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %rem = srem i16 %a1, %b2 ret i16 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i32.snap index cf6bacf1a..275fd2ac2 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i32.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: i32, b: i32) -> i32 { a + b }\n pub fn subtr ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @add(i32 %0, i32 %1) { body: - %add = add i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %add = add i32 %a1, %b2 ret i32 %add } define i32 @subtract(i32 %0, i32 %1) { body: - %sub = sub i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %sub = sub i32 %a1, %b2 ret i32 %sub } define i32 @multiply(i32 %0, i32 %1) { body: - %mul = mul i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %mul = mul i32 %a1, %b2 ret i32 %mul } define i32 @divide(i32 %0, i32 %1) { body: - %div = sdiv i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %div = sdiv i32 %a1, %b2 ret i32 %div } define i32 @remainder(i32 %0, i32 %1) { body: - %rem = srem i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %rem = srem i32 %a1, %b2 ret i32 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i64.snap index a38cca67d..c79da419c 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i64.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: i64, b: i64) -> i64 { a + b }\n pub fn subtr ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @add(i64 %0, i64 %1) { body: - %add = add i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %add = add i64 %a1, %b2 ret i64 %add } define i64 @subtract(i64 %0, i64 %1) { body: - %sub = sub i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %sub = sub i64 %a1, %b2 ret i64 %sub } define i64 @multiply(i64 %0, i64 %1) { body: - %mul = mul i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %mul = mul i64 %a1, %b2 ret i64 %mul } define i64 @divide(i64 %0, i64 %1) { body: - %div = sdiv i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %div = sdiv i64 %a1, %b2 ret i64 %div } define i64 @remainder(i64 %0, i64 %1) { body: - %rem = srem i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %rem = srem i64 %a1, %b2 ret i64 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i8.snap index 5f5097264..2138d50dd 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_i8.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: i8, b: i8) -> i8 { a + b }\n pub fn subtract ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @add(i8 %0, i8 %1) { body: - %add = add i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %add = add i8 %a1, %b2 ret i8 %add } define i8 @subtract(i8 %0, i8 %1) { body: - %sub = sub i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %sub = sub i8 %a1, %b2 ret i8 %sub } define i8 @multiply(i8 %0, i8 %1) { body: - %mul = mul i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %mul = mul i8 %a1, %b2 ret i8 %mul } define i8 @divide(i8 %0, i8 %1) { body: - %div = sdiv i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %div = sdiv i8 %a1, %b2 ret i8 %div } define i8 @remainder(i8 %0, i8 %1) { body: - %rem = srem i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %rem = srem i8 %a1, %b2 ret i8 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u128.snap index f80e4c724..171b0fd80 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u128.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: u128, b: u128) -> u128 { a + b }\n pub fn su ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @add(i128 %0, i128 %1) { body: - %add = add i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %add = add i128 %a1, %b2 ret i128 %add } define i128 @subtract(i128 %0, i128 %1) { body: - %sub = sub i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %sub = sub i128 %a1, %b2 ret i128 %sub } define i128 @multiply(i128 %0, i128 %1) { body: - %mul = mul i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %mul = mul i128 %a1, %b2 ret i128 %mul } define i128 @divide(i128 %0, i128 %1) { body: - %div = udiv i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %div = udiv i128 %a1, %b2 ret i128 %div } define i128 @remainder(i128 %0, i128 %1) { body: - %rem = urem i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %rem = urem i128 %a1, %b2 ret i128 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u16.snap index 46ea3f5cd..d9f8c6f67 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u16.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: u16, b: u16) -> u16 { a + b }\n pub fn subtr ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @add(i16 %0, i16 %1) { body: - %add = add i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %add = add i16 %a1, %b2 ret i16 %add } define i16 @subtract(i16 %0, i16 %1) { body: - %sub = sub i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %sub = sub i16 %a1, %b2 ret i16 %sub } define i16 @multiply(i16 %0, i16 %1) { body: - %mul = mul i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %mul = mul i16 %a1, %b2 ret i16 %mul } define i16 @divide(i16 %0, i16 %1) { body: - %div = udiv i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %div = udiv i16 %a1, %b2 ret i16 %div } define i16 @remainder(i16 %0, i16 %1) { body: - %rem = urem i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %rem = urem i16 %a1, %b2 ret i16 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u32.snap index 552aaa427..cdfcfd59b 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u32.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: u32, b: u32) -> u32 { a + b }\n pub fn subtr ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @add(i32 %0, i32 %1) { body: - %add = add i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %add = add i32 %a1, %b2 ret i32 %add } define i32 @subtract(i32 %0, i32 %1) { body: - %sub = sub i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %sub = sub i32 %a1, %b2 ret i32 %sub } define i32 @multiply(i32 %0, i32 %1) { body: - %mul = mul i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %mul = mul i32 %a1, %b2 ret i32 %mul } define i32 @divide(i32 %0, i32 %1) { body: - %div = udiv i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %div = udiv i32 %a1, %b2 ret i32 %div } define i32 @remainder(i32 %0, i32 %1) { body: - %rem = urem i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %rem = urem i32 %a1, %b2 ret i32 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u64.snap index e793e039e..94dfb87ba 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u64.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: u64, b: u64) -> u64 { a + b }\n pub fn subtr ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @add(i64 %0, i64 %1) { body: - %add = add i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %add = add i64 %a1, %b2 ret i64 %add } define i64 @subtract(i64 %0, i64 %1) { body: - %sub = sub i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %sub = sub i64 %a1, %b2 ret i64 %sub } define i64 @multiply(i64 %0, i64 %1) { body: - %mul = mul i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %mul = mul i64 %a1, %b2 ret i64 %mul } define i64 @divide(i64 %0, i64 %1) { body: - %div = udiv i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %div = udiv i64 %a1, %b2 ret i64 %div } define i64 @remainder(i64 %0, i64 %1) { body: - %rem = urem i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %rem = urem i64 %a1, %b2 ret i64 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u8.snap index 9ba9c20ec..ec65dcee6 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__arithmetic_op_u8.snap @@ -6,35 +6,65 @@ expression: "\n pub fn add(a: u8, b: u8) -> u8 { a + b }\n pub fn subtract ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @add(i8 %0, i8 %1) { body: - %add = add i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %add = add i8 %a1, %b2 ret i8 %add } define i8 @subtract(i8 %0, i8 %1) { body: - %sub = sub i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %sub = sub i8 %a1, %b2 ret i8 %sub } define i8 @multiply(i8 %0, i8 %1) { body: - %mul = mul i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %mul = mul i8 %a1, %b2 ret i8 %mul } define i8 @divide(i8 %0, i8 %1) { body: - %div = udiv i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %div = udiv i8 %a1, %b2 ret i8 %div } define i8 @remainder(i8 %0, i8 %1) { body: - %rem = urem i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %rem = urem i8 %a1, %b2 ret i8 %rem } @@ -42,5 +72,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__array_index.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__array_index.snap index 8dc39bb38..d19ccab3b 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__array_index.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__array_index.snap @@ -1,43 +1,44 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1080 expression: "\n pub fn main() -> i8 {\n let a = [1,2,3,4,]\n a[3]\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i64, i8*)* } +%DispatchTable = type { ptr } %"[i8]" = type { i64, i64, i8 } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i8 @main() { body: - %new_array_ptr = load i8** (i8*, i64, i8*)*, i8** (i8*, i64, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %"[core::i8]_ptr" = load i64*, i64** getelementptr inbounds ([2 x i64*], [2 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %"[core::i8]_ptr" to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_array_ptr(i8* %type_info_ptr_to_i8_ptr, i64 4, i8* %allocator_handle) - %"ref<[i8]>" = bitcast i8** %ref to %"[i8]"** - %"ref<[i8]>->data" = load %"[i8]"*, %"[i8]"** %"ref<[i8]>", align 8 - %"ref<[i8]>->data->elements" = getelementptr inbounds %"[i8]", %"[i8]"* %"ref<[i8]>->data", i32 0, i32 2 - store i8 1, i8* %"ref<[i8]>->data->elements", align 1 - %"ref<[i8]>->data->elements[1]" = getelementptr i8, i8* %"ref<[i8]>->data->elements", i64 1 - store i8 2, i8* %"ref<[i8]>->data->elements[1]", align 1 - %"ref<[i8]>->data->elements[2]" = getelementptr i8, i8* %"ref<[i8]>->data->elements", i64 2 - store i8 3, i8* %"ref<[i8]>->data->elements[2]", align 1 - %"ref<[i8]>->data->elements[3]" = getelementptr i8, i8* %"ref<[i8]>->data->elements", i64 3 - store i8 4, i8* %"ref<[i8]>->data->elements[3]", align 1 - %"ref<[i8]>->data1" = load %"[i8]"*, %"[i8]"** %"ref<[i8]>", align 8 - %"ref<[i8]>->data1->length" = getelementptr inbounds %"[i8]", %"[i8]"* %"ref<[i8]>->data1", i32 0, i32 0 - store i64 4, i64* %"ref<[i8]>->data1->length", align 4 - %"a2->data" = load %"[i8]"*, %"[i8]"** %"ref<[i8]>", align 8 - %"a2->data->elements" = getelementptr inbounds %"[i8]", %"[i8]"* %"a2->data", i32 0, i32 2 - %"a2->data->elements+index" = getelementptr i8, i8* %"a2->data->elements", i32 3 - %0 = load i8, i8* %"a2->data->elements+index", align 1 + %a = alloca ptr, align 8 + %new_array_ptr = load ptr, ptr @dispatchTable, align 8 + %"[core::i8]_ptr" = load ptr, ptr @global_type_lookup_table, align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_array_ptr(ptr %"[core::i8]_ptr", i64 4, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + %"ref->data->elements" = getelementptr inbounds nuw %"[i8]", ptr %"ref->data", i32 0, i32 2 + %"ref->data->elements[0]" = getelementptr i8, ptr %"ref->data->elements", i64 0 + store i8 1, ptr %"ref->data->elements[0]", align 1 + %"ref->data->elements[1]" = getelementptr i8, ptr %"ref->data->elements", i64 1 + store i8 2, ptr %"ref->data->elements[1]", align 1 + %"ref->data->elements[2]" = getelementptr i8, ptr %"ref->data->elements", i64 2 + store i8 3, ptr %"ref->data->elements[2]", align 1 + %"ref->data->elements[3]" = getelementptr i8, ptr %"ref->data->elements", i64 3 + store i8 4, ptr %"ref->data->elements[3]", align 1 + %"ref->data1" = load ptr, ptr %ref, align 8 + %"ref->data1->length" = getelementptr inbounds nuw %"[i8]", ptr %"ref->data1", i32 0, i32 0 + store i64 4, ptr %"ref->data1->length", align 4 + store ptr %ref, ptr %a, align 8 + %a2 = load ptr, ptr %a, align 8 + %"a2->data" = load ptr, ptr %a2, align 8 + %"a2->data->elements" = getelementptr inbounds nuw %"[i8]", ptr %"a2->data", i32 0, i32 2 + %"a2->data->elements+index" = getelementptr i8, ptr %"a2->data->elements", i32 3 + %0 = load i8, ptr %"a2->data->elements+index", align 1 ret i8 %0 } @@ -45,9 +46,8 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i64, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [2 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [2 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__array_index_assign.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__array_index_assign.snap index 7a8d123aa..aa39ebea5 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__array_index_assign.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__array_index_assign.snap @@ -1,52 +1,49 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1080 expression: "\n pub fn main() {\n let a = [1,2,3,4,]\n a[1] = 100\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i64, i8*)* } +%DispatchTable = type { ptr } %"[i32]" = type { i64, i64, i32 } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define void @main() { body: - %a = alloca %"[i32]"**, align 8 - %new_array_ptr = load i8** (i8*, i64, i8*)*, i8** (i8*, i64, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %"[core::i32]_ptr" = load i64*, i64** getelementptr inbounds ([1 x i64*], [1 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %"[core::i32]_ptr" to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_array_ptr(i8* %type_info_ptr_to_i8_ptr, i64 4, i8* %allocator_handle) - %"ref<[i32]>" = bitcast i8** %ref to %"[i32]"** - %"ref<[i32]>->data" = load %"[i32]"*, %"[i32]"** %"ref<[i32]>", align 8 - %"ref<[i32]>->data->elements" = getelementptr inbounds %"[i32]", %"[i32]"* %"ref<[i32]>->data", i32 0, i32 2 - %"ref<[i32]>->data->elements[0]" = getelementptr i32, i32* %"ref<[i32]>->data->elements", i64 0 - store i32 1, i32* %"ref<[i32]>->data->elements[0]", align 4 - %"ref<[i32]>->data->elements[1]" = getelementptr i32, i32* %"ref<[i32]>->data->elements", i64 1 - store i32 2, i32* %"ref<[i32]>->data->elements[1]", align 4 - %"ref<[i32]>->data->elements[2]" = getelementptr i32, i32* %"ref<[i32]>->data->elements", i64 2 - store i32 3, i32* %"ref<[i32]>->data->elements[2]", align 4 - %"ref<[i32]>->data->elements[3]" = getelementptr i32, i32* %"ref<[i32]>->data->elements", i64 3 - store i32 4, i32* %"ref<[i32]>->data->elements[3]", align 4 - %"ref<[i32]>->data1" = load %"[i32]"*, %"[i32]"** %"ref<[i32]>", align 8 - %"ref<[i32]>->data1->length" = getelementptr inbounds %"[i32]", %"[i32]"* %"ref<[i32]>->data1", i32 0, i32 0 - store i64 4, i64* %"ref<[i32]>->data1->length", align 4 - store %"[i32]"** %"ref<[i32]>", %"[i32]"*** %a, align 8 - %a2 = load %"[i32]"**, %"[i32]"*** %a, align 8 - %"a2->data" = load %"[i32]"*, %"[i32]"** %a2, align 8 - %"a2->data->elements" = getelementptr inbounds %"[i32]", %"[i32]"* %"a2->data", i32 0, i32 2 - %"a2->data->elements+index" = getelementptr i32, i32* %"a2->data->elements", i32 1 - %0 = load i32, i32* %"a2->data->elements+index", align 4 - %a3 = load %"[i32]"**, %"[i32]"*** %a, align 8 - %"a3->data" = load %"[i32]"*, %"[i32]"** %a3, align 8 - %"a3->data->elements" = getelementptr inbounds %"[i32]", %"[i32]"* %"a3->data", i32 0, i32 2 - %"a3->data->elements+index" = getelementptr i32, i32* %"a3->data->elements", i32 1 - store i32 100, i32* %"a3->data->elements+index", align 4 + %a = alloca ptr, align 8 + %new_array_ptr = load ptr, ptr @dispatchTable, align 8 + %"[core::i32]_ptr" = load ptr, ptr @global_type_lookup_table, align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_array_ptr(ptr %"[core::i32]_ptr", i64 4, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + %"ref->data->elements" = getelementptr inbounds nuw %"[i32]", ptr %"ref->data", i32 0, i32 2 + %"ref->data->elements[0]" = getelementptr i32, ptr %"ref->data->elements", i64 0 + store i32 1, ptr %"ref->data->elements[0]", align 4 + %"ref->data->elements[1]" = getelementptr i32, ptr %"ref->data->elements", i64 1 + store i32 2, ptr %"ref->data->elements[1]", align 4 + %"ref->data->elements[2]" = getelementptr i32, ptr %"ref->data->elements", i64 2 + store i32 3, ptr %"ref->data->elements[2]", align 4 + %"ref->data->elements[3]" = getelementptr i32, ptr %"ref->data->elements", i64 3 + store i32 4, ptr %"ref->data->elements[3]", align 4 + %"ref->data1" = load ptr, ptr %ref, align 8 + %"ref->data1->length" = getelementptr inbounds nuw %"[i32]", ptr %"ref->data1", i32 0, i32 0 + store i64 4, ptr %"ref->data1->length", align 4 + store ptr %ref, ptr %a, align 8 + %a2 = load ptr, ptr %a, align 8 + %"a2->data" = load ptr, ptr %a2, align 8 + %"a2->data->elements" = getelementptr inbounds nuw %"[i32]", ptr %"a2->data", i32 0, i32 2 + %"a2->data->elements+index" = getelementptr i32, ptr %"a2->data->elements", i32 1 + %0 = load i32, ptr %"a2->data->elements+index", align 4 + %a3 = load ptr, ptr %a, align 8 + %"a3->data" = load ptr, ptr %a3, align 8 + %"a3->data->elements" = getelementptr inbounds nuw %"[i32]", ptr %"a3->data", i32 0, i32 2 + %"a3->data->elements+index" = getelementptr i32, ptr %"a3->data->elements", i32 1 + store i32 100, ptr %"a3->data->elements+index", align 4 ret void } @@ -54,9 +51,8 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i64, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [1 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [1 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__array_literal.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__array_literal.snap index 42b53da46..957cb0425 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__array_literal.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__array_literal.snap @@ -1,42 +1,39 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1080 expression: "\n pub fn main() {\n let a = [1,2,3,4,]\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i64, i8*)* } +%DispatchTable = type { ptr } %"[i32]" = type { i64, i64, i32 } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define void @main() { body: - %a = alloca %"[i32]"**, align 8 - %new_array_ptr = load i8** (i8*, i64, i8*)*, i8** (i8*, i64, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %"[core::i32]_ptr" = load i64*, i64** getelementptr inbounds ([1 x i64*], [1 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %"[core::i32]_ptr" to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_array_ptr(i8* %type_info_ptr_to_i8_ptr, i64 4, i8* %allocator_handle) - %"ref<[i32]>" = bitcast i8** %ref to %"[i32]"** - %"ref<[i32]>->data" = load %"[i32]"*, %"[i32]"** %"ref<[i32]>", align 8 - %"ref<[i32]>->data->elements" = getelementptr inbounds %"[i32]", %"[i32]"* %"ref<[i32]>->data", i32 0, i32 2 - %"ref<[i32]>->data->elements[0]" = getelementptr i32, i32* %"ref<[i32]>->data->elements", i64 0 - store i32 1, i32* %"ref<[i32]>->data->elements[0]", align 4 - %"ref<[i32]>->data->elements[1]" = getelementptr i32, i32* %"ref<[i32]>->data->elements", i64 1 - store i32 2, i32* %"ref<[i32]>->data->elements[1]", align 4 - %"ref<[i32]>->data->elements[2]" = getelementptr i32, i32* %"ref<[i32]>->data->elements", i64 2 - store i32 3, i32* %"ref<[i32]>->data->elements[2]", align 4 - %"ref<[i32]>->data->elements[3]" = getelementptr i32, i32* %"ref<[i32]>->data->elements", i64 3 - store i32 4, i32* %"ref<[i32]>->data->elements[3]", align 4 - %"ref<[i32]>->data1" = load %"[i32]"*, %"[i32]"** %"ref<[i32]>", align 8 - %"ref<[i32]>->data1->length" = getelementptr inbounds %"[i32]", %"[i32]"* %"ref<[i32]>->data1", i32 0, i32 0 - store i64 4, i64* %"ref<[i32]>->data1->length", align 4 - store %"[i32]"** %"ref<[i32]>", %"[i32]"*** %a, align 8 + %a = alloca ptr, align 8 + %new_array_ptr = load ptr, ptr @dispatchTable, align 8 + %"[core::i32]_ptr" = load ptr, ptr @global_type_lookup_table, align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_array_ptr(ptr %"[core::i32]_ptr", i64 4, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + %"ref->data->elements" = getelementptr inbounds nuw %"[i32]", ptr %"ref->data", i32 0, i32 2 + %"ref->data->elements[0]" = getelementptr i32, ptr %"ref->data->elements", i64 0 + store i32 1, ptr %"ref->data->elements[0]", align 4 + %"ref->data->elements[1]" = getelementptr i32, ptr %"ref->data->elements", i64 1 + store i32 2, ptr %"ref->data->elements[1]", align 4 + %"ref->data->elements[2]" = getelementptr i32, ptr %"ref->data->elements", i64 2 + store i32 3, ptr %"ref->data->elements[2]", align 4 + %"ref->data->elements[3]" = getelementptr i32, ptr %"ref->data->elements", i64 3 + store i32 4, ptr %"ref->data->elements[3]", align 4 + %"ref->data1" = load ptr, ptr %ref, align 8 + %"ref->data1->length" = getelementptr inbounds nuw %"[i32]", ptr %"ref->data1", i32 0, i32 0 + store i64 4, ptr %"ref->data1->length", align 4 + store ptr %ref, ptr %a, align 8 ret void } @@ -44,9 +41,8 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i64, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [1 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [1 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_bool.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_bool.snap index 0b536590e..f9838599e 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_bool.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_bool.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: bool, b: bool) -> bool {\n a & ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i1 @assign_bitand(i1 %0, i1 %1) { body: - %bit_and = and i1 %0, %1 - ret i1 %bit_and + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %bit_and = and i1 %a1, %b2 + store i1 %bit_and, ptr %a, align 1 + %a3 = load i1, ptr %a, align 1 + ret i1 %a3 } define i1 @assign_bitor(i1 %0, i1 %1) { body: - %bit_or = or i1 %0, %1 - ret i1 %bit_or + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %bit_or = or i1 %a1, %b2 + store i1 %bit_or, ptr %a, align 1 + %a3 = load i1, ptr %a, align 1 + ret i1 %a3 } define i1 @assign_bitxor(i1 %0, i1 %1) { body: - %bit_xor = xor i1 %0, %1 - ret i1 %bit_xor + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %bit_xor = xor i1 %a1, %b2 + store i1 %bit_xor, ptr %a, align 1 + %a3 = load i1, ptr %a, align 1 + ret i1 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i128.snap index 8bf835388..5902e4a13 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i128.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: i128, b: i128) -> i128 {\n a & ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @assign_bitand(i128 %0, i128 %1) { body: - %bit_and = and i128 %0, %1 - ret i128 %bit_and + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_and = and i128 %a1, %b2 + store i128 %bit_and, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_bitor(i128 %0, i128 %1) { body: - %bit_or = or i128 %0, %1 - ret i128 %bit_or + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_or = or i128 %a1, %b2 + store i128 %bit_or, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_bitxor(i128 %0, i128 %1) { body: - %bit_xor = xor i128 %0, %1 - ret i128 %bit_xor + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_xor = xor i128 %a1, %b2 + store i128 %bit_xor, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i16.snap index 4170d0916..dca5984eb 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i16.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: i16, b: i16) -> i16 {\n a &= b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @assign_bitand(i16 %0, i16 %1) { body: - %bit_and = and i16 %0, %1 - ret i16 %bit_and + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_and = and i16 %a1, %b2 + store i16 %bit_and, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_bitor(i16 %0, i16 %1) { body: - %bit_or = or i16 %0, %1 - ret i16 %bit_or + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_or = or i16 %a1, %b2 + store i16 %bit_or, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_bitxor(i16 %0, i16 %1) { body: - %bit_xor = xor i16 %0, %1 - ret i16 %bit_xor + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_xor = xor i16 %a1, %b2 + store i16 %bit_xor, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i32.snap index 5cacc6cd1..6113db71a 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i32.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: i32, b: i32) -> i32 {\n a &= b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @assign_bitand(i32 %0, i32 %1) { body: - %bit_and = and i32 %0, %1 - ret i32 %bit_and + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_and = and i32 %a1, %b2 + store i32 %bit_and, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_bitor(i32 %0, i32 %1) { body: - %bit_or = or i32 %0, %1 - ret i32 %bit_or + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_or = or i32 %a1, %b2 + store i32 %bit_or, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_bitxor(i32 %0, i32 %1) { body: - %bit_xor = xor i32 %0, %1 - ret i32 %bit_xor + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_xor = xor i32 %a1, %b2 + store i32 %bit_xor, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i64.snap index 386a7bc13..a0f8286ff 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i64.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: i64, b: i64) -> i64 {\n a &= b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @assign_bitand(i64 %0, i64 %1) { body: - %bit_and = and i64 %0, %1 - ret i64 %bit_and + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_and = and i64 %a1, %b2 + store i64 %bit_and, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_bitor(i64 %0, i64 %1) { body: - %bit_or = or i64 %0, %1 - ret i64 %bit_or + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_or = or i64 %a1, %b2 + store i64 %bit_or, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_bitxor(i64 %0, i64 %1) { body: - %bit_xor = xor i64 %0, %1 - ret i64 %bit_xor + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_xor = xor i64 %a1, %b2 + store i64 %bit_xor, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i8.snap index ccb24526e..9f3ec8d61 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_i8.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: i8, b: i8) -> i8 {\n a &= b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @assign_bitand(i8 %0, i8 %1) { body: - %bit_and = and i8 %0, %1 - ret i8 %bit_and + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_and = and i8 %a1, %b2 + store i8 %bit_and, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_bitor(i8 %0, i8 %1) { body: - %bit_or = or i8 %0, %1 - ret i8 %bit_or + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_or = or i8 %a1, %b2 + store i8 %bit_or, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_bitxor(i8 %0, i8 %1) { body: - %bit_xor = xor i8 %0, %1 - ret i8 %bit_xor + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_xor = xor i8 %a1, %b2 + store i8 %bit_xor, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u128.snap index 6863a4b4e..1bc2999af 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u128.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: u128, b: u128) -> u128 {\n a & ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @assign_bitand(i128 %0, i128 %1) { body: - %bit_and = and i128 %0, %1 - ret i128 %bit_and + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_and = and i128 %a1, %b2 + store i128 %bit_and, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_bitor(i128 %0, i128 %1) { body: - %bit_or = or i128 %0, %1 - ret i128 %bit_or + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_or = or i128 %a1, %b2 + store i128 %bit_or, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_bitxor(i128 %0, i128 %1) { body: - %bit_xor = xor i128 %0, %1 - ret i128 %bit_xor + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_xor = xor i128 %a1, %b2 + store i128 %bit_xor, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u16.snap index 5b800ea57..9594ebc5e 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u16.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: u16, b: u16) -> u16 {\n a &= b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @assign_bitand(i16 %0, i16 %1) { body: - %bit_and = and i16 %0, %1 - ret i16 %bit_and + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_and = and i16 %a1, %b2 + store i16 %bit_and, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_bitor(i16 %0, i16 %1) { body: - %bit_or = or i16 %0, %1 - ret i16 %bit_or + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_or = or i16 %a1, %b2 + store i16 %bit_or, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_bitxor(i16 %0, i16 %1) { body: - %bit_xor = xor i16 %0, %1 - ret i16 %bit_xor + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_xor = xor i16 %a1, %b2 + store i16 %bit_xor, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u32.snap index 215f0f614..d3701ff2f 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u32.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: u32, b: u32) -> u32 {\n a &= b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @assign_bitand(i32 %0, i32 %1) { body: - %bit_and = and i32 %0, %1 - ret i32 %bit_and + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_and = and i32 %a1, %b2 + store i32 %bit_and, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_bitor(i32 %0, i32 %1) { body: - %bit_or = or i32 %0, %1 - ret i32 %bit_or + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_or = or i32 %a1, %b2 + store i32 %bit_or, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_bitxor(i32 %0, i32 %1) { body: - %bit_xor = xor i32 %0, %1 - ret i32 %bit_xor + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_xor = xor i32 %a1, %b2 + store i32 %bit_xor, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u64.snap index 5ac585fad..873924f8b 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u64.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: u64, b: u64) -> u64 {\n a &= b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @assign_bitand(i64 %0, i64 %1) { body: - %bit_and = and i64 %0, %1 - ret i64 %bit_and + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_and = and i64 %a1, %b2 + store i64 %bit_and, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_bitor(i64 %0, i64 %1) { body: - %bit_or = or i64 %0, %1 - ret i64 %bit_or + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_or = or i64 %a1, %b2 + store i64 %bit_or, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_bitxor(i64 %0, i64 %1) { body: - %bit_xor = xor i64 %0, %1 - ret i64 %bit_xor + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_xor = xor i64 %a1, %b2 + store i64 %bit_xor, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u8.snap index b59e2d151..3ca6a8e33 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_bit_op_u8.snap @@ -6,29 +6,52 @@ expression: "\n pub fn assign_bitand(a: u8, b: u8) -> u8 {\n a &= b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @assign_bitand(i8 %0, i8 %1) { body: - %bit_and = and i8 %0, %1 - ret i8 %bit_and + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_and = and i8 %a1, %b2 + store i8 %bit_and, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_bitor(i8 %0, i8 %1) { body: - %bit_or = or i8 %0, %1 - ret i8 %bit_or + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_or = or i8 %a1, %b2 + store i8 %bit_or, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_bitxor(i8 %0, i8 %1) { body: - %bit_xor = xor i8 %0, %1 - ret i8 %bit_xor + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_xor = xor i8 %a1, %b2 + store i8 %bit_xor, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i128.snap index ec6a4b0df..5649e3c11 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i128.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: i128, b: i128) -> i128 {\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @assign_leftshift(i128 %0, i128 %1) { body: - %left_shift = shl i128 %0, %1 - ret i128 %left_shift + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %left_shift = shl i128 %a1, %b2 + store i128 %left_shift, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_rightshift(i128 %0, i128 %1) { body: - %right_shift = ashr i128 %0, %1 - ret i128 %right_shift + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %right_shift = ashr i128 %a1, %b2 + store i128 %right_shift, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i16.snap index 6ef13f3d1..57348f680 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i16.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: i16, b: i16) -> i16 {\n a < ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @assign_leftshift(i16 %0, i16 %1) { body: - %left_shift = shl i16 %0, %1 - ret i16 %left_shift + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %left_shift = shl i16 %a1, %b2 + store i16 %left_shift, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_rightshift(i16 %0, i16 %1) { body: - %right_shift = ashr i16 %0, %1 - ret i16 %right_shift + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %right_shift = ashr i16 %a1, %b2 + store i16 %right_shift, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i32.snap index ffda164ac..b195f12d7 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i32.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: i32, b: i32) -> i32 {\n a < ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @assign_leftshift(i32 %0, i32 %1) { body: - %left_shift = shl i32 %0, %1 - ret i32 %left_shift + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %left_shift = shl i32 %a1, %b2 + store i32 %left_shift, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_rightshift(i32 %0, i32 %1) { body: - %right_shift = ashr i32 %0, %1 - ret i32 %right_shift + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %right_shift = ashr i32 %a1, %b2 + store i32 %right_shift, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i64.snap index ae28b74da..c53c5433f 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i64.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: i64, b: i64) -> i64 {\n a < ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @assign_leftshift(i64 %0, i64 %1) { body: - %left_shift = shl i64 %0, %1 - ret i64 %left_shift + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %left_shift = shl i64 %a1, %b2 + store i64 %left_shift, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_rightshift(i64 %0, i64 %1) { body: - %right_shift = ashr i64 %0, %1 - ret i64 %right_shift + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %right_shift = ashr i64 %a1, %b2 + store i64 %right_shift, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i8.snap index 0fee25e43..72307e417 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_i8.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: i8, b: i8) -> i8 {\n a <<= ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @assign_leftshift(i8 %0, i8 %1) { body: - %left_shift = shl i8 %0, %1 - ret i8 %left_shift + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %left_shift = shl i8 %a1, %b2 + store i8 %left_shift, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_rightshift(i8 %0, i8 %1) { body: - %right_shift = ashr i8 %0, %1 - ret i8 %right_shift + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %right_shift = ashr i8 %a1, %b2 + store i8 %right_shift, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u128.snap index e86443b3d..954a2e36a 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u128.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: u128, b: u128) -> u128 {\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @assign_leftshift(i128 %0, i128 %1) { body: - %left_shift = shl i128 %0, %1 - ret i128 %left_shift + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %left_shift = shl i128 %a1, %b2 + store i128 %left_shift, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_rightshift(i128 %0, i128 %1) { body: - %right_shift = lshr i128 %0, %1 - ret i128 %right_shift + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %right_shift = lshr i128 %a1, %b2 + store i128 %right_shift, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u16.snap index 66db87e5e..cedcc5cf9 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u16.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: u16, b: u16) -> u16 {\n a < ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @assign_leftshift(i16 %0, i16 %1) { body: - %left_shift = shl i16 %0, %1 - ret i16 %left_shift + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %left_shift = shl i16 %a1, %b2 + store i16 %left_shift, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_rightshift(i16 %0, i16 %1) { body: - %right_shift = lshr i16 %0, %1 - ret i16 %right_shift + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %right_shift = lshr i16 %a1, %b2 + store i16 %right_shift, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u32.snap index 60e29f755..dbacb881e 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u32.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: u32, b: u32) -> u32 {\n a < ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @assign_leftshift(i32 %0, i32 %1) { body: - %left_shift = shl i32 %0, %1 - ret i32 %left_shift + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %left_shift = shl i32 %a1, %b2 + store i32 %left_shift, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_rightshift(i32 %0, i32 %1) { body: - %right_shift = lshr i32 %0, %1 - ret i32 %right_shift + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %right_shift = lshr i32 %a1, %b2 + store i32 %right_shift, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u64.snap index cdccac9d0..899b53364 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u64.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: u64, b: u64) -> u64 {\n a < ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @assign_leftshift(i64 %0, i64 %1) { body: - %left_shift = shl i64 %0, %1 - ret i64 %left_shift + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %left_shift = shl i64 %a1, %b2 + store i64 %left_shift, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_rightshift(i64 %0, i64 %1) { body: - %right_shift = lshr i64 %0, %1 - ret i64 %right_shift + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %right_shift = lshr i64 %a1, %b2 + store i64 %right_shift, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u8.snap index c69886caa..44e169814 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assign_shift_op_u8.snap @@ -6,23 +6,38 @@ expression: "\n pub fn assign_leftshift(a: u8, b: u8) -> u8 {\n a <<= ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @assign_leftshift(i8 %0, i8 %1) { body: - %left_shift = shl i8 %0, %1 - ret i8 %left_shift + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %left_shift = shl i8 %a1, %b2 + store i8 %left_shift, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_rightshift(i8 %0, i8 %1) { body: - %right_shift = lshr i8 %0, %1 - ret i8 %right_shift + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %right_shift = lshr i8 %a1, %b2 + store i8 %right_shift, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_bool.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_bool.snap index 24bfd30e4..626985d9c 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_bool.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_bool.snap @@ -6,16 +6,23 @@ expression: "\n pub fn assign(a: bool, b: bool) -> bool {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i1 @assign(i1 %0, i1 %1) { body: - ret i1 %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + store i1 %b2, ptr %a, align 1 + %a3 = load i1, ptr %a, align 1 + ret i1 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_f32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_f32.snap index e85fdfc67..d4ca9d2ff 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_f32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_f32.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: f32, b: f32) -> f32 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define float @assign(float %0, float %1) { body: - ret float %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + store float %b2, ptr %a, align 4 + %a3 = load float, ptr %a, align 4 + ret float %a3 } define float @assign_add(float %0, float %1) { body: - %add = fadd float %0, %1 - ret float %add + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %add = fadd float %a1, %b2 + store float %add, ptr %a, align 4 + %a3 = load float, ptr %a, align 4 + ret float %a3 } define float @assign_subtract(float %0, float %1) { body: - %sub = fsub float %0, %1 - ret float %sub + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %sub = fsub float %a1, %b2 + store float %sub, ptr %a, align 4 + %a3 = load float, ptr %a, align 4 + ret float %a3 } define float @assign_multiply(float %0, float %1) { body: - %mul = fmul float %0, %1 - ret float %mul + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %mul = fmul float %a1, %b2 + store float %mul, ptr %a, align 4 + %a3 = load float, ptr %a, align 4 + ret float %a3 } define float @assign_divide(float %0, float %1) { body: - %div = fdiv float %0, %1 - ret float %div + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %div = fdiv float %a1, %b2 + store float %div, ptr %a, align 4 + %a3 = load float, ptr %a, align 4 + ret float %a3 } define float @assign_remainder(float %0, float %1) { body: - %rem = frem float %0, %1 - ret float %rem + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %rem = frem float %a1, %b2 + store float %rem, ptr %a, align 4 + %a3 = load float, ptr %a, align 4 + ret float %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_f64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_f64.snap index 6fb3b7ba6..d0868599f 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_f64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_f64.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: f64, b: f64) -> f64 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define double @assign(double %0, double %1) { body: - ret double %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + store double %b2, ptr %a, align 8 + %a3 = load double, ptr %a, align 8 + ret double %a3 } define double @assign_add(double %0, double %1) { body: - %add = fadd double %0, %1 - ret double %add + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %add = fadd double %a1, %b2 + store double %add, ptr %a, align 8 + %a3 = load double, ptr %a, align 8 + ret double %a3 } define double @assign_subtract(double %0, double %1) { body: - %sub = fsub double %0, %1 - ret double %sub + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %sub = fsub double %a1, %b2 + store double %sub, ptr %a, align 8 + %a3 = load double, ptr %a, align 8 + ret double %a3 } define double @assign_multiply(double %0, double %1) { body: - %mul = fmul double %0, %1 - ret double %mul + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %mul = fmul double %a1, %b2 + store double %mul, ptr %a, align 8 + %a3 = load double, ptr %a, align 8 + ret double %a3 } define double @assign_divide(double %0, double %1) { body: - %div = fdiv double %0, %1 - ret double %div + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %div = fdiv double %a1, %b2 + store double %div, ptr %a, align 8 + %a3 = load double, ptr %a, align 8 + ret double %a3 } define double @assign_remainder(double %0, double %1) { body: - %rem = frem double %0, %1 - ret double %rem + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %rem = frem double %a1, %b2 + store double %rem, ptr %a, align 8 + %a3 = load double, ptr %a, align 8 + ret double %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i128.snap index 3b6af18aa..ae1bff1b6 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i128.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: i128, b: i128) -> i128 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @assign(i128 %0, i128 %1) { body: - ret i128 %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + store i128 %b2, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_add(i128 %0, i128 %1) { body: - %add = add i128 %0, %1 - ret i128 %add + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %add = add i128 %a1, %b2 + store i128 %add, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_subtract(i128 %0, i128 %1) { body: - %sub = sub i128 %0, %1 - ret i128 %sub + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %sub = sub i128 %a1, %b2 + store i128 %sub, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_multiply(i128 %0, i128 %1) { body: - %mul = mul i128 %0, %1 - ret i128 %mul + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %mul = mul i128 %a1, %b2 + store i128 %mul, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_divide(i128 %0, i128 %1) { body: - %div = sdiv i128 %0, %1 - ret i128 %div + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %div = sdiv i128 %a1, %b2 + store i128 %div, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_remainder(i128 %0, i128 %1) { body: - %rem = srem i128 %0, %1 - ret i128 %rem + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %rem = srem i128 %a1, %b2 + store i128 %rem, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i16.snap index a1549331e..13272dfb9 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i16.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: i16, b: i16) -> i16 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @assign(i16 %0, i16 %1) { body: - ret i16 %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + store i16 %b2, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_add(i16 %0, i16 %1) { body: - %add = add i16 %0, %1 - ret i16 %add + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %add = add i16 %a1, %b2 + store i16 %add, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_subtract(i16 %0, i16 %1) { body: - %sub = sub i16 %0, %1 - ret i16 %sub + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %sub = sub i16 %a1, %b2 + store i16 %sub, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_multiply(i16 %0, i16 %1) { body: - %mul = mul i16 %0, %1 - ret i16 %mul + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %mul = mul i16 %a1, %b2 + store i16 %mul, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_divide(i16 %0, i16 %1) { body: - %div = sdiv i16 %0, %1 - ret i16 %div + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %div = sdiv i16 %a1, %b2 + store i16 %div, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_remainder(i16 %0, i16 %1) { body: - %rem = srem i16 %0, %1 - ret i16 %rem + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %rem = srem i16 %a1, %b2 + store i16 %rem, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i32.snap index 4b81b47ae..2484fd8ee 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i32.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: i32, b: i32) -> i32 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @assign(i32 %0, i32 %1) { body: - ret i32 %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + store i32 %b2, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_add(i32 %0, i32 %1) { body: - %add = add i32 %0, %1 - ret i32 %add + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %add = add i32 %a1, %b2 + store i32 %add, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_subtract(i32 %0, i32 %1) { body: - %sub = sub i32 %0, %1 - ret i32 %sub + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %sub = sub i32 %a1, %b2 + store i32 %sub, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_multiply(i32 %0, i32 %1) { body: - %mul = mul i32 %0, %1 - ret i32 %mul + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %mul = mul i32 %a1, %b2 + store i32 %mul, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_divide(i32 %0, i32 %1) { body: - %div = sdiv i32 %0, %1 - ret i32 %div + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %div = sdiv i32 %a1, %b2 + store i32 %div, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_remainder(i32 %0, i32 %1) { body: - %rem = srem i32 %0, %1 - ret i32 %rem + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %rem = srem i32 %a1, %b2 + store i32 %rem, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i64.snap index 55b4ef658..b3ecc4a57 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i64.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: i64, b: i64) -> i64 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @assign(i64 %0, i64 %1) { body: - ret i64 %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + store i64 %b2, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_add(i64 %0, i64 %1) { body: - %add = add i64 %0, %1 - ret i64 %add + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %add = add i64 %a1, %b2 + store i64 %add, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_subtract(i64 %0, i64 %1) { body: - %sub = sub i64 %0, %1 - ret i64 %sub + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %sub = sub i64 %a1, %b2 + store i64 %sub, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_multiply(i64 %0, i64 %1) { body: - %mul = mul i64 %0, %1 - ret i64 %mul + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %mul = mul i64 %a1, %b2 + store i64 %mul, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_divide(i64 %0, i64 %1) { body: - %div = sdiv i64 %0, %1 - ret i64 %div + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %div = sdiv i64 %a1, %b2 + store i64 %div, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_remainder(i64 %0, i64 %1) { body: - %rem = srem i64 %0, %1 - ret i64 %rem + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %rem = srem i64 %a1, %b2 + store i64 %rem, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i8.snap index b8134d68f..94751d724 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_i8.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: i8, b: i8) -> i8 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @assign(i8 %0, i8 %1) { body: - ret i8 %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + store i8 %b2, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_add(i8 %0, i8 %1) { body: - %add = add i8 %0, %1 - ret i8 %add + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %add = add i8 %a1, %b2 + store i8 %add, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_subtract(i8 %0, i8 %1) { body: - %sub = sub i8 %0, %1 - ret i8 %sub + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %sub = sub i8 %a1, %b2 + store i8 %sub, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_multiply(i8 %0, i8 %1) { body: - %mul = mul i8 %0, %1 - ret i8 %mul + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %mul = mul i8 %a1, %b2 + store i8 %mul, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_divide(i8 %0, i8 %1) { body: - %div = sdiv i8 %0, %1 - ret i8 %div + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %div = sdiv i8 %a1, %b2 + store i8 %div, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_remainder(i8 %0, i8 %1) { body: - %rem = srem i8 %0, %1 - ret i8 %rem + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %rem = srem i8 %a1, %b2 + store i8 %rem, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_struct.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_struct.snap index 5ad541ff2..ab9d1c8e0 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_struct.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_struct.snap @@ -1,57 +1,64 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1080 expression: "\n pub struct(value) Value(i32, i32);\n pub struct(gc) Heap(f64, f64);\n\n pub fn assign_value(a: Value, b: Value) -> Value {\n a = b;\n a\n }\n\n pub fn assign_heap(a: Heap, b: Heap) -> Heap {\n a = b;\n a\n }\n // TODO: Add errors\n // a += b;\n // a *= b;\n // a -= b;\n // a /= b;\n // a %= b;\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } %Value = type { i32, i32 } -%Heap = type { double, double } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [4 x i64*] +@global_type_lookup_table = external global [4 x ptr] define %Value @assign_value(%Value %0, %Value %1) { body: - %.fca.0.extract3 = extractvalue %Value %1, 0 - %.fca.1.extract4 = extractvalue %Value %1, 1 - ret %Value %1 + %b = alloca %Value, align 8 + store %Value %1, ptr %b, align 4 + %a = alloca %Value, align 8 + store %Value %0, ptr %a, align 4 + %b1 = load %Value, ptr %b, align 4 + store %Value %b1, ptr %a, align 4 + %a2 = load %Value, ptr %a, align 4 + ret %Value %a2 } -define %Value** @assign_value_wrapper(%Value** %0, %Value** %1) { +define ptr @assign_value_wrapper(ptr %0, ptr %1) { body: - %"->data" = load %Value*, %Value** %0, align 8 - %deref = load %Value, %Value* %"->data", align 4 - %"->data1" = load %Value*, %Value** %1, align 8 - %deref2 = load %Value, %Value* %"->data1", align 4 + %"->data" = load ptr, ptr %0, align 8 + %deref = load %Value, ptr %"->data", align 4 + %"->data1" = load ptr, ptr %1, align 8 + %deref2 = load %Value, ptr %"->data1", align 4 %assign_value = call %Value @assign_value(%Value %deref, %Value %deref2) - %new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %Value_ptr = load i64*, i64** getelementptr inbounds ([4 x i64*], [4 x i64*]* @global_type_lookup_table, i64 0, i64 1), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %Value_ptr to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle) - %"ref" = bitcast i8** %ref to %Value** - %"ref->data" = load %Value*, %Value** %"ref", align 8 - store %Value %assign_value, %Value* %"ref->data", align 4 - ret %Value** %"ref" + %new_ptr = load ptr, ptr @dispatchTable, align 8 + %Value_ptr = load ptr, ptr getelementptr ([4 x ptr], ptr @global_type_lookup_table, i64 0, i64 1), align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_ptr(ptr %Value_ptr, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + store %Value %assign_value, ptr %"ref->data", align 4 + ret ptr %ref } -define %Heap** @assign_heap(%Heap** %0, %Heap** %1) { +define ptr @assign_heap(ptr %0, ptr %1) { body: - ret %Heap** %1 + %b = alloca ptr, align 8 + store ptr %1, ptr %b, align 8 + %a = alloca ptr, align 8 + store ptr %0, ptr %a, align 8 + %b1 = load ptr, ptr %b, align 8 + store ptr %b1, ptr %a, align 8 + %a2 = load ptr, ptr %a, align 8 + ret ptr %a2 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [4 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [4 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u128.snap index b8491c6d8..a0ff80ad3 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u128.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: u128, b: u128) -> u128 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @assign(i128 %0, i128 %1) { body: - ret i128 %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + store i128 %b2, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_add(i128 %0, i128 %1) { body: - %add = add i128 %0, %1 - ret i128 %add + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %add = add i128 %a1, %b2 + store i128 %add, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_subtract(i128 %0, i128 %1) { body: - %sub = sub i128 %0, %1 - ret i128 %sub + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %sub = sub i128 %a1, %b2 + store i128 %sub, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_multiply(i128 %0, i128 %1) { body: - %mul = mul i128 %0, %1 - ret i128 %mul + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %mul = mul i128 %a1, %b2 + store i128 %mul, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_divide(i128 %0, i128 %1) { body: - %div = udiv i128 %0, %1 - ret i128 %div + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %div = udiv i128 %a1, %b2 + store i128 %div, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } define i128 @assign_remainder(i128 %0, i128 %1) { body: - %rem = urem i128 %0, %1 - ret i128 %rem + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %rem = urem i128 %a1, %b2 + store i128 %rem, ptr %a, align 4 + %a3 = load i128, ptr %a, align 4 + ret i128 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u16.snap index 560b94f56..0992252c0 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u16.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: u16, b: u16) -> u16 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @assign(i16 %0, i16 %1) { body: - ret i16 %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + store i16 %b2, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_add(i16 %0, i16 %1) { body: - %add = add i16 %0, %1 - ret i16 %add + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %add = add i16 %a1, %b2 + store i16 %add, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_subtract(i16 %0, i16 %1) { body: - %sub = sub i16 %0, %1 - ret i16 %sub + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %sub = sub i16 %a1, %b2 + store i16 %sub, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_multiply(i16 %0, i16 %1) { body: - %mul = mul i16 %0, %1 - ret i16 %mul + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %mul = mul i16 %a1, %b2 + store i16 %mul, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_divide(i16 %0, i16 %1) { body: - %div = udiv i16 %0, %1 - ret i16 %div + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %div = udiv i16 %a1, %b2 + store i16 %div, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } define i16 @assign_remainder(i16 %0, i16 %1) { body: - %rem = urem i16 %0, %1 - ret i16 %rem + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %rem = urem i16 %a1, %b2 + store i16 %rem, ptr %a, align 2 + %a3 = load i16, ptr %a, align 2 + ret i16 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u32.snap index cdf6dc7c3..0cfe2c3fd 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u32.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: u32, b: u32) -> u32 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @assign(i32 %0, i32 %1) { body: - ret i32 %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + store i32 %b2, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_add(i32 %0, i32 %1) { body: - %add = add i32 %0, %1 - ret i32 %add + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %add = add i32 %a1, %b2 + store i32 %add, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_subtract(i32 %0, i32 %1) { body: - %sub = sub i32 %0, %1 - ret i32 %sub + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %sub = sub i32 %a1, %b2 + store i32 %sub, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_multiply(i32 %0, i32 %1) { body: - %mul = mul i32 %0, %1 - ret i32 %mul + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %mul = mul i32 %a1, %b2 + store i32 %mul, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_divide(i32 %0, i32 %1) { body: - %div = udiv i32 %0, %1 - ret i32 %div + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %div = udiv i32 %a1, %b2 + store i32 %div, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } define i32 @assign_remainder(i32 %0, i32 %1) { body: - %rem = urem i32 %0, %1 - ret i32 %rem + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %rem = urem i32 %a1, %b2 + store i32 %rem, ptr %a, align 4 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u64.snap index 5186f24a8..9b61920c9 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u64.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: u64, b: u64) -> u64 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @assign(i64 %0, i64 %1) { body: - ret i64 %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + store i64 %b2, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_add(i64 %0, i64 %1) { body: - %add = add i64 %0, %1 - ret i64 %add + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %add = add i64 %a1, %b2 + store i64 %add, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_subtract(i64 %0, i64 %1) { body: - %sub = sub i64 %0, %1 - ret i64 %sub + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %sub = sub i64 %a1, %b2 + store i64 %sub, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_multiply(i64 %0, i64 %1) { body: - %mul = mul i64 %0, %1 - ret i64 %mul + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %mul = mul i64 %a1, %b2 + store i64 %mul, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_divide(i64 %0, i64 %1) { body: - %div = udiv i64 %0, %1 - ret i64 %div + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %div = udiv i64 %a1, %b2 + store i64 %div, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } define i64 @assign_remainder(i64 %0, i64 %1) { body: - %rem = urem i64 %0, %1 - ret i64 %rem + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %rem = urem i64 %a1, %b2 + store i64 %rem, ptr %a, align 4 + %a3 = load i64, ptr %a, align 4 + ret i64 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u8.snap index 50cce7f77..ad28ac89d 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__assignment_op_u8.snap @@ -6,46 +6,93 @@ expression: "\n pub fn assign(a: u8, b: u8) -> u8 {\n a = b;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @assign(i8 %0, i8 %1) { body: - ret i8 %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + store i8 %b2, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_add(i8 %0, i8 %1) { body: - %add = add i8 %0, %1 - ret i8 %add + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %add = add i8 %a1, %b2 + store i8 %add, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_subtract(i8 %0, i8 %1) { body: - %sub = sub i8 %0, %1 - ret i8 %sub + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %sub = sub i8 %a1, %b2 + store i8 %sub, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_multiply(i8 %0, i8 %1) { body: - %mul = mul i8 %0, %1 - ret i8 %mul + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %mul = mul i8 %a1, %b2 + store i8 %mul, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_divide(i8 %0, i8 %1) { body: - %div = udiv i8 %0, %1 - ret i8 %div + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %div = udiv i8 %a1, %b2 + store i8 %div, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } define i8 @assign_remainder(i8 %0, i8 %1) { body: - %rem = urem i8 %0, %1 - ret i8 %rem + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %rem = urem i8 %a1, %b2 + store i8 %rem, ptr %a, align 1 + %a3 = load i8, ptr %a, align 1 + ret i8 %a3 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_bool.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_bool.snap index df5131b6e..2849934a8 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_bool.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_bool.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: bool) -> bool { !a }\n pub fn bitand(a: bool ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i1 @not(i1 %0) { body: - %not = xor i1 %0, true + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %not = xor i1 %a1, true ret i1 %not } define i1 @bitand(i1 %0, i1 %1) { body: - %bit_and = and i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %bit_and = and i1 %a1, %b2 ret i1 %bit_and } define i1 @bitor(i1 %0, i1 %1) { body: - %bit_or = or i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %bit_or = or i1 %a1, %b2 ret i1 %bit_or } define i1 @bitxor(i1 %0, i1 %1) { body: - %bit_xor = xor i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %bit_xor = xor i1 %a1, %b2 ret i1 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i128.snap index 8e787e747..c8162c282 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i128.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: i128) -> i128 { !a }\n pub fn bitand(a: i128 ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @not(i128 %0) { body: - %not = xor i128 %0, -1 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %not = xor i128 %a1, -1 ret i128 %not } define i128 @bitand(i128 %0, i128 %1) { body: - %bit_and = and i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_and = and i128 %a1, %b2 ret i128 %bit_and } define i128 @bitor(i128 %0, i128 %1) { body: - %bit_or = or i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_or = or i128 %a1, %b2 ret i128 %bit_or } define i128 @bitxor(i128 %0, i128 %1) { body: - %bit_xor = xor i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_xor = xor i128 %a1, %b2 ret i128 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i16.snap index 38a90b5fe..9dfbc589d 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i16.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: i16) -> i16 { !a }\n pub fn bitand(a: i16, b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @not(i16 %0) { body: - %not = xor i16 %0, -1 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %not = xor i16 %a1, -1 ret i16 %not } define i16 @bitand(i16 %0, i16 %1) { body: - %bit_and = and i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_and = and i16 %a1, %b2 ret i16 %bit_and } define i16 @bitor(i16 %0, i16 %1) { body: - %bit_or = or i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_or = or i16 %a1, %b2 ret i16 %bit_or } define i16 @bitxor(i16 %0, i16 %1) { body: - %bit_xor = xor i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_xor = xor i16 %a1, %b2 ret i16 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i32.snap index be5e9e5b6..b645d7382 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i32.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: i32) -> i32 { !a }\n pub fn bitand(a: i32, b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @not(i32 %0) { body: - %not = xor i32 %0, -1 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %not = xor i32 %a1, -1 ret i32 %not } define i32 @bitand(i32 %0, i32 %1) { body: - %bit_and = and i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_and = and i32 %a1, %b2 ret i32 %bit_and } define i32 @bitor(i32 %0, i32 %1) { body: - %bit_or = or i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_or = or i32 %a1, %b2 ret i32 %bit_or } define i32 @bitxor(i32 %0, i32 %1) { body: - %bit_xor = xor i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_xor = xor i32 %a1, %b2 ret i32 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i64.snap index 6d6241c6f..59d0d6e00 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i64.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: i64) -> i64 { !a }\n pub fn bitand(a: i64, b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @not(i64 %0) { body: - %not = xor i64 %0, -1 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %not = xor i64 %a1, -1 ret i64 %not } define i64 @bitand(i64 %0, i64 %1) { body: - %bit_and = and i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_and = and i64 %a1, %b2 ret i64 %bit_and } define i64 @bitor(i64 %0, i64 %1) { body: - %bit_or = or i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_or = or i64 %a1, %b2 ret i64 %bit_or } define i64 @bitxor(i64 %0, i64 %1) { body: - %bit_xor = xor i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_xor = xor i64 %a1, %b2 ret i64 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i8.snap index 815a89b6d..678b43dba 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_i8.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: i8) -> i8 { !a }\n pub fn bitand(a: i8, b: i ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @not(i8 %0) { body: - %not = xor i8 %0, -1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %not = xor i8 %a1, -1 ret i8 %not } define i8 @bitand(i8 %0, i8 %1) { body: - %bit_and = and i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_and = and i8 %a1, %b2 ret i8 %bit_and } define i8 @bitor(i8 %0, i8 %1) { body: - %bit_or = or i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_or = or i8 %a1, %b2 ret i8 %bit_or } define i8 @bitxor(i8 %0, i8 %1) { body: - %bit_xor = xor i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_xor = xor i8 %a1, %b2 ret i8 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u128.snap index e15662c08..fd2097d94 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u128.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: u128) -> u128 { !a }\n pub fn bitand(a: u128 ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @not(i128 %0) { body: - %not = xor i128 %0, -1 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %not = xor i128 %a1, -1 ret i128 %not } define i128 @bitand(i128 %0, i128 %1) { body: - %bit_and = and i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_and = and i128 %a1, %b2 ret i128 %bit_and } define i128 @bitor(i128 %0, i128 %1) { body: - %bit_or = or i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_or = or i128 %a1, %b2 ret i128 %bit_or } define i128 @bitxor(i128 %0, i128 %1) { body: - %bit_xor = xor i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %bit_xor = xor i128 %a1, %b2 ret i128 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u16.snap index 8dfe43717..37840c61f 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u16.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: u16) -> u16 { !a }\n pub fn bitand(a: u16, b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @not(i16 %0) { body: - %not = xor i16 %0, -1 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %not = xor i16 %a1, -1 ret i16 %not } define i16 @bitand(i16 %0, i16 %1) { body: - %bit_and = and i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_and = and i16 %a1, %b2 ret i16 %bit_and } define i16 @bitor(i16 %0, i16 %1) { body: - %bit_or = or i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_or = or i16 %a1, %b2 ret i16 %bit_or } define i16 @bitxor(i16 %0, i16 %1) { body: - %bit_xor = xor i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %bit_xor = xor i16 %a1, %b2 ret i16 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u32.snap index 192e0c87c..b81f17330 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u32.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: u32) -> u32 { !a }\n pub fn bitand(a: u32, b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @not(i32 %0) { body: - %not = xor i32 %0, -1 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %not = xor i32 %a1, -1 ret i32 %not } define i32 @bitand(i32 %0, i32 %1) { body: - %bit_and = and i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_and = and i32 %a1, %b2 ret i32 %bit_and } define i32 @bitor(i32 %0, i32 %1) { body: - %bit_or = or i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_or = or i32 %a1, %b2 ret i32 %bit_or } define i32 @bitxor(i32 %0, i32 %1) { body: - %bit_xor = xor i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %bit_xor = xor i32 %a1, %b2 ret i32 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u64.snap index fddd2b586..98b21fb53 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u64.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: u64) -> u64 { !a }\n pub fn bitand(a: u64, b ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @not(i64 %0) { body: - %not = xor i64 %0, -1 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %not = xor i64 %a1, -1 ret i64 %not } define i64 @bitand(i64 %0, i64 %1) { body: - %bit_and = and i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_and = and i64 %a1, %b2 ret i64 %bit_and } define i64 @bitor(i64 %0, i64 %1) { body: - %bit_or = or i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_or = or i64 %a1, %b2 ret i64 %bit_or } define i64 @bitxor(i64 %0, i64 %1) { body: - %bit_xor = xor i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %bit_xor = xor i64 %a1, %b2 ret i64 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u8.snap index d5628ee83..6c8d52202 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__bit_op_u8.snap @@ -6,29 +6,50 @@ expression: "\n pub fn not(a: u8) -> u8 { !a }\n pub fn bitand(a: u8, b: u ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @not(i8 %0) { body: - %not = xor i8 %0, -1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %not = xor i8 %a1, -1 ret i8 %not } define i8 @bitand(i8 %0, i8 %1) { body: - %bit_and = and i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_and = and i8 %a1, %b2 ret i8 %bit_and } define i8 @bitor(i8 %0, i8 %1) { body: - %bit_or = or i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_or = or i8 %a1, %b2 ret i8 %bit_or } define i8 @bitxor(i8 %0, i8 %1) { body: - %bit_xor = xor i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %bit_xor = xor i8 %a1, %b2 ret i8 %bit_xor } @@ -36,5 +57,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_bool.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_bool.snap index 81f99ffd9..52318e9f3 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_bool.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_bool.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: bool, b: bool) -> bool { a == b }\n pub f ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i1 @equals(i1 %0, i1 %1) { body: - %eq = icmp eq i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %eq = icmp eq i1 %a1, %b2 ret i1 %eq } define i1 @not_equal(i1 %0, i1 %1) { body: - %neq = icmp ne i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %neq = icmp ne i1 %a1, %b2 ret i1 %neq } define i1 @less(i1 %0, i1 %1) { body: - %less = icmp ult i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %less = icmp ult i1 %a1, %b2 ret i1 %less } define i1 @less_equal(i1 %0, i1 %1) { body: - %lesseq = icmp ule i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %lesseq = icmp ule i1 %a1, %b2 ret i1 %lesseq } define i1 @greater(i1 %0, i1 %1) { body: - %greater = icmp ugt i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %greater = icmp ugt i1 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i1 %0, i1 %1) { body: - %greatereq = icmp uge i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %greatereq = icmp uge i1 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_f32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_f32.snap index 01421eb67..84064969a 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_f32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_f32.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: f32, b: f32) -> bool { a == b }\n pub fn ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(float %0, float %1) { body: - %eq = fcmp oeq float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %eq = fcmp oeq float %a1, %b2 ret i1 %eq } define i1 @not_equal(float %0, float %1) { body: - %neq = fcmp one float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %neq = fcmp one float %a1, %b2 ret i1 %neq } define i1 @less(float %0, float %1) { body: - %less = fcmp olt float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %less = fcmp olt float %a1, %b2 ret i1 %less } define i1 @less_equal(float %0, float %1) { body: - %lesseq = fcmp ole float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %lesseq = fcmp ole float %a1, %b2 ret i1 %lesseq } define i1 @greater(float %0, float %1) { body: - %greater = fcmp ogt float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %greater = fcmp ogt float %a1, %b2 ret i1 %greater } define i1 @greater_equal(float %0, float %1) { body: - %greatereq = fcmp oge float %0, %1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %greatereq = fcmp oge float %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_f64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_f64.snap index e9904b681..a9e76c238 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_f64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_f64.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: f64, b: f64) -> bool { a == b }\n pub fn ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(double %0, double %1) { body: - %eq = fcmp oeq double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %eq = fcmp oeq double %a1, %b2 ret i1 %eq } define i1 @not_equal(double %0, double %1) { body: - %neq = fcmp one double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %neq = fcmp one double %a1, %b2 ret i1 %neq } define i1 @less(double %0, double %1) { body: - %less = fcmp olt double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %less = fcmp olt double %a1, %b2 ret i1 %less } define i1 @less_equal(double %0, double %1) { body: - %lesseq = fcmp ole double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %lesseq = fcmp ole double %a1, %b2 ret i1 %lesseq } define i1 @greater(double %0, double %1) { body: - %greater = fcmp ogt double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %greater = fcmp ogt double %a1, %b2 ret i1 %greater } define i1 @greater_equal(double %0, double %1) { body: - %greatereq = fcmp oge double %0, %1 + %b = alloca double, align 8 + store double %1, ptr %b, align 8 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %b2 = load double, ptr %b, align 8 + %greatereq = fcmp oge double %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i128.snap index 54338502e..7e9d82eb8 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i128.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: i128, b: i128) -> bool { a == b }\n pub f ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i128 %0, i128 %1) { body: - %eq = icmp eq i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %eq = icmp eq i128 %a1, %b2 ret i1 %eq } define i1 @not_equal(i128 %0, i128 %1) { body: - %neq = icmp ne i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %neq = icmp ne i128 %a1, %b2 ret i1 %neq } define i1 @less(i128 %0, i128 %1) { body: - %less = icmp slt i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %less = icmp slt i128 %a1, %b2 ret i1 %less } define i1 @less_equal(i128 %0, i128 %1) { body: - %lesseq = icmp sle i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %lesseq = icmp sle i128 %a1, %b2 ret i1 %lesseq } define i1 @greater(i128 %0, i128 %1) { body: - %greater = icmp sgt i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %greater = icmp sgt i128 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i128 %0, i128 %1) { body: - %greatereq = icmp sge i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %greatereq = icmp sge i128 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i16.snap index ea41034de..4b4b7d934 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i16.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: i16, b: i16) -> bool { a == b }\n pub fn ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i16 %0, i16 %1) { body: - %eq = icmp eq i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %eq = icmp eq i16 %a1, %b2 ret i1 %eq } define i1 @not_equal(i16 %0, i16 %1) { body: - %neq = icmp ne i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %neq = icmp ne i16 %a1, %b2 ret i1 %neq } define i1 @less(i16 %0, i16 %1) { body: - %less = icmp slt i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %less = icmp slt i16 %a1, %b2 ret i1 %less } define i1 @less_equal(i16 %0, i16 %1) { body: - %lesseq = icmp sle i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %lesseq = icmp sle i16 %a1, %b2 ret i1 %lesseq } define i1 @greater(i16 %0, i16 %1) { body: - %greater = icmp sgt i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %greater = icmp sgt i16 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i16 %0, i16 %1) { body: - %greatereq = icmp sge i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %greatereq = icmp sge i16 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i32.snap index 53c916db8..7dd469771 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i32.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: i32, b: i32) -> bool { a == b }\n pub fn ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i32 %0, i32 %1) { body: - %eq = icmp eq i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %eq = icmp eq i32 %a1, %b2 ret i1 %eq } define i1 @not_equal(i32 %0, i32 %1) { body: - %neq = icmp ne i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %neq = icmp ne i32 %a1, %b2 ret i1 %neq } define i1 @less(i32 %0, i32 %1) { body: - %less = icmp slt i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %less = icmp slt i32 %a1, %b2 ret i1 %less } define i1 @less_equal(i32 %0, i32 %1) { body: - %lesseq = icmp sle i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %lesseq = icmp sle i32 %a1, %b2 ret i1 %lesseq } define i1 @greater(i32 %0, i32 %1) { body: - %greater = icmp sgt i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %greater = icmp sgt i32 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i32 %0, i32 %1) { body: - %greatereq = icmp sge i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %greatereq = icmp sge i32 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i64.snap index 97fecb594..45960fc35 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i64.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: i64, b: i64) -> bool { a == b }\n pub fn ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i64 %0, i64 %1) { body: - %eq = icmp eq i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %eq = icmp eq i64 %a1, %b2 ret i1 %eq } define i1 @not_equal(i64 %0, i64 %1) { body: - %neq = icmp ne i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %neq = icmp ne i64 %a1, %b2 ret i1 %neq } define i1 @less(i64 %0, i64 %1) { body: - %less = icmp slt i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %less = icmp slt i64 %a1, %b2 ret i1 %less } define i1 @less_equal(i64 %0, i64 %1) { body: - %lesseq = icmp sle i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %lesseq = icmp sle i64 %a1, %b2 ret i1 %lesseq } define i1 @greater(i64 %0, i64 %1) { body: - %greater = icmp sgt i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %greater = icmp sgt i64 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i64 %0, i64 %1) { body: - %greatereq = icmp sge i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %greatereq = icmp sge i64 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i8.snap index 87291f915..f2d9cc0b5 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_i8.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: i8, b: i8) -> bool { a == b }\n pub fn no ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i8 %0, i8 %1) { body: - %eq = icmp eq i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %eq = icmp eq i8 %a1, %b2 ret i1 %eq } define i1 @not_equal(i8 %0, i8 %1) { body: - %neq = icmp ne i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %neq = icmp ne i8 %a1, %b2 ret i1 %neq } define i1 @less(i8 %0, i8 %1) { body: - %less = icmp slt i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %less = icmp slt i8 %a1, %b2 ret i1 %less } define i1 @less_equal(i8 %0, i8 %1) { body: - %lesseq = icmp sle i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %lesseq = icmp sle i8 %a1, %b2 ret i1 %lesseq } define i1 @greater(i8 %0, i8 %1) { body: - %greater = icmp sgt i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %greater = icmp sgt i8 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i8 %0, i8 %1) { body: - %greatereq = icmp sge i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %greatereq = icmp sge i8 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u128.snap index f58307eff..d876395b8 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u128.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: u128, b: u128) -> bool { a == b }\n pub f ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i128 %0, i128 %1) { body: - %eq = icmp eq i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %eq = icmp eq i128 %a1, %b2 ret i1 %eq } define i1 @not_equal(i128 %0, i128 %1) { body: - %neq = icmp ne i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %neq = icmp ne i128 %a1, %b2 ret i1 %neq } define i1 @less(i128 %0, i128 %1) { body: - %less = icmp ult i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %less = icmp ult i128 %a1, %b2 ret i1 %less } define i1 @less_equal(i128 %0, i128 %1) { body: - %lesseq = icmp ule i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %lesseq = icmp ule i128 %a1, %b2 ret i1 %lesseq } define i1 @greater(i128 %0, i128 %1) { body: - %greater = icmp ugt i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %greater = icmp ugt i128 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i128 %0, i128 %1) { body: - %greatereq = icmp uge i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %greatereq = icmp uge i128 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u16.snap index baea1b0ae..62878600c 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u16.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: u16, b: u16) -> bool { a == b }\n pub fn ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i16 %0, i16 %1) { body: - %eq = icmp eq i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %eq = icmp eq i16 %a1, %b2 ret i1 %eq } define i1 @not_equal(i16 %0, i16 %1) { body: - %neq = icmp ne i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %neq = icmp ne i16 %a1, %b2 ret i1 %neq } define i1 @less(i16 %0, i16 %1) { body: - %less = icmp ult i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %less = icmp ult i16 %a1, %b2 ret i1 %less } define i1 @less_equal(i16 %0, i16 %1) { body: - %lesseq = icmp ule i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %lesseq = icmp ule i16 %a1, %b2 ret i1 %lesseq } define i1 @greater(i16 %0, i16 %1) { body: - %greater = icmp ugt i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %greater = icmp ugt i16 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i16 %0, i16 %1) { body: - %greatereq = icmp uge i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %greatereq = icmp uge i16 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u32.snap index 36a7b2579..18e19a698 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u32.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: u32, b: u32) -> bool { a == b }\n pub fn ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i32 %0, i32 %1) { body: - %eq = icmp eq i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %eq = icmp eq i32 %a1, %b2 ret i1 %eq } define i1 @not_equal(i32 %0, i32 %1) { body: - %neq = icmp ne i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %neq = icmp ne i32 %a1, %b2 ret i1 %neq } define i1 @less(i32 %0, i32 %1) { body: - %less = icmp ult i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %less = icmp ult i32 %a1, %b2 ret i1 %less } define i1 @less_equal(i32 %0, i32 %1) { body: - %lesseq = icmp ule i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %lesseq = icmp ule i32 %a1, %b2 ret i1 %lesseq } define i1 @greater(i32 %0, i32 %1) { body: - %greater = icmp ugt i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %greater = icmp ugt i32 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i32 %0, i32 %1) { body: - %greatereq = icmp uge i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %greatereq = icmp uge i32 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u64.snap index bb832ad37..ed80bf0e9 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u64.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: u64, b: u64) -> bool { a == b }\n pub fn ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i64 %0, i64 %1) { body: - %eq = icmp eq i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %eq = icmp eq i64 %a1, %b2 ret i1 %eq } define i1 @not_equal(i64 %0, i64 %1) { body: - %neq = icmp ne i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %neq = icmp ne i64 %a1, %b2 ret i1 %neq } define i1 @less(i64 %0, i64 %1) { body: - %less = icmp ult i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %less = icmp ult i64 %a1, %b2 ret i1 %less } define i1 @less_equal(i64 %0, i64 %1) { body: - %lesseq = icmp ule i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %lesseq = icmp ule i64 %a1, %b2 ret i1 %lesseq } define i1 @greater(i64 %0, i64 %1) { body: - %greater = icmp ugt i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %greater = icmp ugt i64 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i64 %0, i64 %1) { body: - %greatereq = icmp uge i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %greatereq = icmp uge i64 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u8.snap index 17afef1c3..54f957ea0 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__compare_op_u8.snap @@ -6,41 +6,77 @@ expression: "\n pub fn equals(a: u8, b: u8) -> bool { a == b }\n pub fn no ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i1 @equals(i8 %0, i8 %1) { body: - %eq = icmp eq i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %eq = icmp eq i8 %a1, %b2 ret i1 %eq } define i1 @not_equal(i8 %0, i8 %1) { body: - %neq = icmp ne i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %neq = icmp ne i8 %a1, %b2 ret i1 %neq } define i1 @less(i8 %0, i8 %1) { body: - %less = icmp ult i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %less = icmp ult i8 %a1, %b2 ret i1 %less } define i1 @less_equal(i8 %0, i8 %1) { body: - %lesseq = icmp ule i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %lesseq = icmp ule i8 %a1, %b2 ret i1 %lesseq } define i1 @greater(i8 %0, i8 %1) { body: - %greater = icmp ugt i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %greater = icmp ugt i8 %a1, %b2 ret i1 %greater } define i1 @greater_equal(i8 %0, i8 %1) { body: - %greatereq = icmp uge i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %greatereq = icmp uge i8 %a1, %b2 ret i1 %greatereq } @@ -48,5 +84,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__conditional_return_expr.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__conditional_return_expr.snap index 504ba730a..ccdf5cfbc 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__conditional_return_expr.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__conditional_return_expr.snap @@ -1,25 +1,33 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1062 expression: "\n pub fn main(a:i32) -> i32 {\n if a > 4 {\n return a;\n }\n a - 1\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @main(i32 %0) { body: - %greater = icmp sgt i32 %0, 4 - %sub = sub i32 %0, 1 - %common.ret.op = select i1 %greater, i32 %0, i32 %sub - ret i32 %common.ret.op + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %greater = icmp sgt i32 %a1, 4 + br i1 %greater, label %then, label %if_merge + +then: ; preds = %body + %a2 = load i32, ptr %a, align 4 + ret i32 %a2 + +if_merge: ; preds = %body + %a3 = load i32, ptr %a, align 4 + %sub = sub i32 %a3, 1 + ret i32 %sub } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__extern_fn.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__extern_fn.snap index bd45fa06c..78e696ec1 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__extern_fn.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__extern_fn.snap @@ -6,14 +6,14 @@ expression: "\n extern fn add(a:i32, b:i32) -> i32;\n pub fn main() {\n ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i32 (i32, i32)* } +%DispatchTable = type { ptr } @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define void @main() { body: - %add_ptr = load i32 (i32, i32)*, i32 (i32, i32)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 + %add_ptr = load ptr, ptr @dispatchTable, align 8 %add = call i32 %add_ptr(i32 3, i32 4) ret void } @@ -22,8 +22,7 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i32 (i32, i32)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__fibonacci.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__fibonacci.snap index 5d8407d10..14f6be31c 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__fibonacci.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__fibonacci.snap @@ -6,26 +6,32 @@ expression: "\n pub fn fibonacci(n:i32) -> i32 {\n if n <= 1 {\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @fibonacci(i32 %0) { body: - %lesseq = icmp sle i32 %0, 1 + %n = alloca i32, align 4 + store i32 %0, ptr %n, align 4 + %n1 = load i32, ptr %n, align 4 + %lesseq = icmp sle i32 %n1, 1 br i1 %lesseq, label %then, label %else then: ; preds = %body + %n2 = load i32, ptr %n, align 4 br label %if_merge else: ; preds = %body - %sub = sub i32 %0, 1 + %n3 = load i32, ptr %n, align 4 + %sub = sub i32 %n3, 1 %fibonacci = call i32 @fibonacci(i32 %sub) - %sub5 = sub i32 %0, 2 + %n4 = load i32, ptr %n, align 4 + %sub5 = sub i32 %n4, 2 %fibonacci6 = call i32 @fibonacci(i32 %sub5) %add = add i32 %fibonacci, %fibonacci6 br label %if_merge if_merge: ; preds = %else, %then - %iftmp = phi i32 [ %0, %then ], [ %add, %else ] + %iftmp = phi i32 [ %n2, %then ], [ %add, %else ] ret i32 %iftmp } @@ -33,5 +39,4 @@ if_merge: ; preds = %else, %then ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__fibonacci_loop.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__fibonacci_loop.snap index 9f8826d3f..967f70254 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__fibonacci_loop.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__fibonacci_loop.snap @@ -6,25 +6,45 @@ expression: "\n pub fn fibonacci(n:i32) -> i32 {\n let a = 0;\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @fibonacci(i32 %0) { body: + %sum = alloca i32, align 4 + %i = alloca i32, align 4 + %b = alloca i32, align 4 + %a = alloca i32, align 4 + %n = alloca i32, align 4 + store i32 %0, ptr %n, align 4 + store i32 0, ptr %a, align 4 + store i32 1, ptr %b, align 4 + store i32 1, ptr %i, align 4 br label %loop loop: ; preds = %if_merge, %body - %b.0 = phi i32 [ 1, %body ], [ %add, %if_merge ] - %a.0 = phi i32 [ 0, %body ], [ %b.0, %if_merge ] - %i.0 = phi i32 [ 1, %body ], [ %add11, %if_merge ] - %greater = icmp sgt i32 %i.0, %0 + %i1 = load i32, ptr %i, align 4 + %n2 = load i32, ptr %n, align 4 + %greater = icmp sgt i32 %i1, %n2 br i1 %greater, label %then, label %if_merge then: ; preds = %loop - ret i32 %a.0 + %a3 = load i32, ptr %a, align 4 + ret i32 %a3 if_merge: ; preds = %loop - %add = add i32 %a.0, %b.0 - %add11 = add i32 %i.0, 1 + %a4 = load i32, ptr %a, align 4 + %b5 = load i32, ptr %b, align 4 + %add = add i32 %a4, %b5 + store i32 %add, ptr %sum, align 4 + %a6 = load i32, ptr %a, align 4 + %b7 = load i32, ptr %b, align 4 + store i32 %b7, ptr %a, align 4 + %b8 = load i32, ptr %b, align 4 + %sum9 = load i32, ptr %sum, align 4 + store i32 %sum9, ptr %b, align 4 + %i10 = load i32, ptr %i, align 4 + %add11 = add i32 %i10, 1 + store i32 %add11, ptr %i, align 4 br label %loop } @@ -32,5 +52,4 @@ if_merge: ; preds = %loop ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__field_crash.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__field_crash.snap index e2776c5ac..3928f8f6b 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__field_crash.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__field_crash.snap @@ -1,40 +1,37 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1080 expression: "\n struct(gc) Foo { a: i32 };\n\n pub fn main(c:i32) -> i32 {\n let b = Foo { a: c + 5 }\n b.a\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } %Foo = type { i32 } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define i32 @main(i32 %0) { body: - %b = alloca %Foo**, align 8 + %b = alloca ptr, align 8 %c = alloca i32, align 4 - store i32 %0, i32* %c, align 4 - %c1 = load i32, i32* %c, align 4 + store i32 %0, ptr %c, align 4 + %c1 = load i32, ptr %c, align 4 %add = add i32 %c1, 5 %init = insertvalue %Foo undef, i32 %add, 0 - %new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %Foo_ptr = load i64*, i64** getelementptr inbounds ([2 x i64*], [2 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %Foo_ptr to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle) - %"ref" = bitcast i8** %ref to %Foo** - %"ref->data" = load %Foo*, %Foo** %"ref", align 8 - store %Foo %init, %Foo* %"ref->data", align 4 - store %Foo** %"ref", %Foo*** %b, align 8 - %"b->data" = load %Foo**, %Foo*** %b, align 8 - %deref = load %Foo*, %Foo** %"b->data", align 8 - %"Foo->a" = getelementptr inbounds %Foo, %Foo* %deref, i32 0, i32 0 - %Foo.a = load i32, i32* %"Foo->a", align 4 + %new_ptr = load ptr, ptr @dispatchTable, align 8 + %Foo_ptr = load ptr, ptr @global_type_lookup_table, align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_ptr(ptr %Foo_ptr, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + store %Foo %init, ptr %"ref->data", align 4 + store ptr %ref, ptr %b, align 8 + %"b->data" = load ptr, ptr %b, align 8 + %deref = load ptr, ptr %"b->data", align 8 + %"Foo->a" = getelementptr inbounds nuw %Foo, ptr %deref, i32 0, i32 0 + %Foo.a = load i32, ptr %"Foo->a", align 4 ret i32 %Foo.a } @@ -42,9 +39,8 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [2 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [2 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__field_expr.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__field_expr.snap index 593d6632a..a028b2f43 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__field_expr.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__field_expr.snap @@ -1,62 +1,85 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1153 expression: "\n pub struct(value) Bar(f64, Foo);\n pub struct(value) Foo { a: i32 };\n\n fn bar_1(bar: Bar) -> Foo {\n bar.1\n }\n\n fn foo_a(foo: Foo) -> i32 {\n foo.a\n }\n\n pub fn bar_1_foo_a(bar: Bar) -> i32 {\n foo_a(bar_1(bar))\n }\n\n pub fn main() -> i32 {\n let a: Foo = Foo { a: 5 };\n let b: Bar = Bar(1.23, a);\n let aa_lhs = a.a + 2;\n let aa_rhs = 2 + a.a;\n aa_lhs + aa_rhs\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } %Foo = type { i32 } %Bar = type { double, %Foo } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [4 x i64*] +@global_type_lookup_table = external global [4 x ptr] define %Foo @bar_1(%Bar %0) { body: - %.fca.1.0.extract = extractvalue %Bar %0, 1, 0 - %Bar.1.fca.0.insert = insertvalue %Foo poison, i32 %.fca.1.0.extract, 0 - ret %Foo %Bar.1.fca.0.insert + %bar = alloca %Bar, align 8 + store %Bar %0, ptr %bar, align 8 + %"Bar->1" = getelementptr inbounds nuw %Bar, ptr %bar, i32 0, i32 1 + %Bar.1 = load %Foo, ptr %"Bar->1", align 4 + ret %Foo %Bar.1 } define i32 @foo_a(%Foo %0) { body: - %.fca.0.extract = extractvalue %Foo %0, 0 - ret i32 %.fca.0.extract + %foo = alloca %Foo, align 8 + store %Foo %0, ptr %foo, align 4 + %"Foo->a" = getelementptr inbounds nuw %Foo, ptr %foo, i32 0, i32 0 + %Foo.a = load i32, ptr %"Foo->a", align 4 + ret i32 %Foo.a } define i32 @bar_1_foo_a(%Bar %0) { body: - %.fca.0.extract = extractvalue %Bar %0, 0 - %.fca.1.0.extract = extractvalue %Bar %0, 1, 0 - %bar_1 = call %Foo @bar_1(%Bar %0) + %bar = alloca %Bar, align 8 + store %Bar %0, ptr %bar, align 8 + %bar1 = load %Bar, ptr %bar, align 8 + %bar_1 = call %Foo @bar_1(%Bar %bar1) %foo_a = call i32 @foo_a(%Foo %bar_1) ret i32 %foo_a } -define i32 @bar_1_foo_a_wrapper(%Bar** %0) { +define i32 @bar_1_foo_a_wrapper(ptr %0) { body: - %"->data" = load %Bar*, %Bar** %0, align 8 - %deref = load %Bar, %Bar* %"->data", align 8 + %"->data" = load ptr, ptr %0, align 8 + %deref = load %Bar, ptr %"->data", align 8 %bar_1_foo_a = call i32 @bar_1_foo_a(%Bar %deref) ret i32 %bar_1_foo_a } define i32 @main() { body: - ret i32 14 + %aa_rhs = alloca i32, align 4 + %aa_lhs = alloca i32, align 4 + %b = alloca %Bar, align 8 + %a = alloca %Foo, align 8 + store %Foo { i32 5 }, ptr %a, align 4 + %a1 = load %Foo, ptr %a, align 4 + %init = insertvalue %Bar { double 1.230000e+00, %Foo undef }, %Foo %a1, 1 + store %Bar %init, ptr %b, align 8 + %"Foo->a" = getelementptr inbounds nuw %Foo, ptr %a, i32 0, i32 0 + %Foo.a = load i32, ptr %"Foo->a", align 4 + %add = add i32 %Foo.a, 2 + store i32 %add, ptr %aa_lhs, align 4 + %"Foo->a2" = getelementptr inbounds nuw %Foo, ptr %a, i32 0, i32 0 + %Foo.a3 = load i32, ptr %"Foo->a2", align 4 + %add4 = add i32 2, %Foo.a3 + store i32 %add4, ptr %aa_rhs, align 4 + %aa_lhs5 = load i32, ptr %aa_lhs, align 4 + %aa_rhs6 = load i32, ptr %aa_rhs, align 4 + %add7 = add i32 %aa_lhs5, %aa_rhs6 + ret i32 %add7 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [4 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [4 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__function_arguments.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__function_arguments.snap index 0fb161aa7..0735466cd 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__function_arguments.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__function_arguments.snap @@ -6,16 +6,18 @@ expression: "\n pub fn main(a:i32) -> i32 {\n a\n }\n " ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @main(i32 %0) { body: - ret i32 %0 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + ret i32 %a1 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__function_calls.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__function_calls.snap index d85f85f3a..7d96e6b2d 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__function_calls.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__function_calls.snap @@ -1,23 +1,34 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n fn add_impl(a:i32, b:i32) -> i32 {\n a+b\n }\n\n fn add(a:i32, b:i32) -> i32 {\n add_impl(a,b)\n }\n\n pub fn test() -> i32 {\n add(4,5)\n add_impl(4,5)\n add(4,5)\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @add_impl(i32 %0, i32 %1) { body: - %add = add i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %add = add i32 %a1, %b2 ret i32 %add } define i32 @add(i32 %0, i32 %1) { body: - %add_impl = call i32 @add_impl(i32 %0, i32 %1) + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %add_impl = call i32 @add_impl(i32 %a1, i32 %b2) ret i32 %add_impl } @@ -33,5 +44,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__gc_struct.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__gc_struct.snap index 7dc89a797..c67ed8667 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__gc_struct.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__gc_struct.snap @@ -1,43 +1,40 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1080 expression: "\n struct(gc) Foo { a: i32, b: i32 };\n\n pub fn foo() {\n let a = Foo { a: 3, b: 4 };\n a.b += 3;\n let b = a;\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } %Foo = type { i32, i32 } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define void @foo() { body: - %b = alloca %Foo**, align 8 - %a = alloca %Foo**, align 8 - %new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %Foo_ptr = load i64*, i64** getelementptr inbounds ([2 x i64*], [2 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %Foo_ptr to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle) - %"ref" = bitcast i8** %ref to %Foo** - %"ref->data" = load %Foo*, %Foo** %"ref", align 8 - store %Foo { i32 3, i32 4 }, %Foo* %"ref->data", align 4 - store %Foo** %"ref", %Foo*** %a, align 8 - %"a->data" = load %Foo**, %Foo*** %a, align 8 - %deref = load %Foo*, %Foo** %"a->data", align 8 - %"Foo->b" = getelementptr inbounds %Foo, %Foo* %deref, i32 0, i32 1 - %Foo.b = load i32, i32* %"Foo->b", align 4 + %b = alloca ptr, align 8 + %a = alloca ptr, align 8 + %new_ptr = load ptr, ptr @dispatchTable, align 8 + %Foo_ptr = load ptr, ptr @global_type_lookup_table, align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_ptr(ptr %Foo_ptr, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + store %Foo { i32 3, i32 4 }, ptr %"ref->data", align 4 + store ptr %ref, ptr %a, align 8 + %"a->data" = load ptr, ptr %a, align 8 + %deref = load ptr, ptr %"a->data", align 8 + %"Foo->b" = getelementptr inbounds nuw %Foo, ptr %deref, i32 0, i32 1 + %Foo.b = load i32, ptr %"Foo->b", align 4 %add = add i32 %Foo.b, 3 - %"a->data1" = load %Foo**, %Foo*** %a, align 8 - %deref2 = load %Foo*, %Foo** %"a->data1", align 8 - %"Foo->b3" = getelementptr inbounds %Foo, %Foo* %deref2, i32 0, i32 1 - store i32 %add, i32* %"Foo->b3", align 4 - %a4 = load %Foo**, %Foo*** %a, align 8 - store %Foo** %a4, %Foo*** %b, align 8 + %"a->data1" = load ptr, ptr %a, align 8 + %deref2 = load ptr, ptr %"a->data1", align 8 + %"Foo->b3" = getelementptr inbounds nuw %Foo, ptr %deref2, i32 0, i32 1 + store i32 %add, ptr %"Foo->b3", align 4 + %a4 = load ptr, ptr %a, align 8 + store ptr %a4, ptr %b, align 8 ret void } @@ -45,9 +42,8 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [2 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [2 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__if_statement.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__if_statement.snap index f3bba311c..26e248544 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__if_statement.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__if_statement.snap @@ -6,32 +6,53 @@ expression: "\n pub fn foo(a:i32) -> i32 {\n let b = if a > 3 {\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @foo(i32 %0) { body: - %greater = icmp sgt i32 %0, 3 + %b = alloca i32, align 4 + %c = alloca i32, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %greater = icmp sgt i32 %a1, 3 br i1 %greater, label %then, label %else then: ; preds = %body - %greater3 = icmp sgt i32 %0, 4 - %add = add i32 %0, 1 - %add9 = add i32 %0, 3 - %iftmp = select i1 %greater3, i32 %add, i32 %add9 + %a2 = load i32, ptr %a, align 4 + %greater3 = icmp sgt i32 %a2, 4 + br i1 %greater3, label %then4, label %else5 + +then4: ; preds = %then + %a7 = load i32, ptr %a, align 4 + %add = add i32 %a7, 1 + br label %if_merge6 + +else5: ; preds = %then + %a8 = load i32, ptr %a, align 4 + %add9 = add i32 %a8, 3 + br label %if_merge6 + +if_merge6: ; preds = %else5, %then4 + %iftmp = phi i32 [ %add, %then4 ], [ %add9, %else5 ] + store i32 %iftmp, ptr %c, align 4 + %c10 = load i32, ptr %c, align 4 br label %if_merge else: ; preds = %body - %sub = sub i32 %0, 1 + %a11 = load i32, ptr %a, align 4 + %sub = sub i32 %a11, 1 br label %if_merge -if_merge: ; preds = %else, %then - %iftmp12 = phi i32 [ %iftmp, %then ], [ %sub, %else ] - ret i32 %iftmp12 +if_merge: ; preds = %else, %if_merge6 + %iftmp12 = phi i32 [ %c10, %if_merge6 ], [ %sub, %else ] + store i32 %iftmp12, ptr %b, align 4 + %b13 = load i32, ptr %b, align 4 + ret i32 %b13 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_128.snap index 263282da6..4ee145656 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_128.snap @@ -6,20 +6,20 @@ expression: "\n // resources/script.mun\n extern fn thing(n: i32);\n ex ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i32 (i32)*, void (i32)* } +%DispatchTable = type { ptr, ptr } @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define void @main() { body: - %print_ptr = load i32 (i32)*, i32 (i32)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 + %print_ptr = load ptr, ptr @dispatchTable, align 8 %print = call i32 %print_ptr(i32 1) - %thing_ptr = load void (i32)*, void (i32)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 1), align 8 + %thing_ptr = load ptr, ptr getelementptr inbounds nuw (%DispatchTable, ptr @dispatchTable, i32 0, i32 1), align 8 call void %thing_ptr(i32 5) - %print_ptr1 = load i32 (i32)*, i32 (i32)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 + %print_ptr1 = load ptr, ptr @dispatchTable, align 8 %print2 = call i32 %print_ptr1(i32 2) - %thing_ptr3 = load void (i32)*, void (i32)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 1), align 8 + %thing_ptr3 = load ptr, ptr getelementptr inbounds nuw (%DispatchTable, ptr @dispatchTable, i32 0, i32 1), align 8 call void %thing_ptr3(i32 78) ret void } @@ -28,8 +28,7 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i32 (i32)*, void (i32)* } +%DispatchTable = type { ptr, ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_133.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_133.snap index 996d233c0..55bb32a6e 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_133.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_133.snap @@ -1,8 +1,6 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n fn do_the_things(n: i32) -> i32 {\n n + 7\n }\n \n pub fn main() {\n do_the_things(3);\n }\n " - --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' @@ -10,7 +8,10 @@ source_filename = "mod" define i32 @do_the_things(i32 %0) { body: - %add = add i32 %0, 7 + %n = alloca i32, align 4 + store i32 %0, ptr %n, align 4 + %n1 = load i32, ptr %n, align 4 + %add = add i32 %n1, 7 ret i32 %add } @@ -23,4 +24,3 @@ body: ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" - diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_225.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_225.snap index 12a1bff88..d4c308ab0 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_225.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_225.snap @@ -1,48 +1,54 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1080 expression: "\n struct Num {\n value: i64,\n }\n\n pub fn foo(b: i64) {\n Num { value: b }.value;\n }\n\n pub fn bar(b: i64) {\n { let a = Num { value: b }; a}.value;\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } %Num = type { i64 } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define void @foo(i64 %0) { body: - %init = insertvalue %Num undef, i64 %0, 0 - %new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %Num_ptr = load i64*, i64** getelementptr inbounds ([2 x i64*], [2 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %Num_ptr to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle) - %"ref" = bitcast i8** %ref to %Num** - %"ref->data" = load %Num*, %Num** %"ref", align 8 - store %Num %init, %Num* %"ref->data", align 4 - %"ref->data2" = load %Num*, %Num** %"ref", align 8 - %deref = load %Num, %Num* %"ref->data2", align 4 + %b = alloca i64, align 8 + store i64 %0, ptr %b, align 4 + %b1 = load i64, ptr %b, align 4 + %init = insertvalue %Num undef, i64 %b1, 0 + %new_ptr = load ptr, ptr @dispatchTable, align 8 + %Num_ptr = load ptr, ptr @global_type_lookup_table, align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_ptr(ptr %Num_ptr, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + store %Num %init, ptr %"ref->data", align 4 + %"ref->data2" = load ptr, ptr %ref, align 8 + %deref = load %Num, ptr %"ref->data2", align 4 + %Num.value = extractvalue %Num %deref, 0 ret void } define void @bar(i64 %0) { body: - %init = insertvalue %Num undef, i64 %0, 0 - %new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %Num_ptr = load i64*, i64** getelementptr inbounds ([2 x i64*], [2 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %Num_ptr to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle) - %"ref" = bitcast i8** %ref to %Num** - %"ref->data" = load %Num*, %Num** %"ref", align 8 - store %Num %init, %Num* %"ref->data", align 4 - %"a2->data" = load %Num*, %Num** %"ref", align 8 - %deref = load %Num, %Num* %"a2->data", align 4 + %a = alloca ptr, align 8 + %b = alloca i64, align 8 + store i64 %0, ptr %b, align 4 + %b1 = load i64, ptr %b, align 4 + %init = insertvalue %Num undef, i64 %b1, 0 + %new_ptr = load ptr, ptr @dispatchTable, align 8 + %Num_ptr = load ptr, ptr @global_type_lookup_table, align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_ptr(ptr %Num_ptr, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + store %Num %init, ptr %"ref->data", align 4 + store ptr %ref, ptr %a, align 8 + %a2 = load ptr, ptr %a, align 8 + %"a2->data" = load ptr, ptr %a2, align 8 + %deref = load %Num, ptr %"a2->data", align 4 + %Num.value = extractvalue %Num %deref, 0 ret void } @@ -50,9 +56,8 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [2 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [2 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_228.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_228.snap index 885dbb0b7..b99268741 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_228.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_228.snap @@ -1,26 +1,37 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1062 expression: "\n pub fn fact(n: usize) -> usize {\n \t if n == 0 {return 1} else {n * (n-1)}\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @fact(i64 %0) { body: - %eq = icmp eq i64 %0, 0 - %sub = sub i64 %0, 1 - %mul = mul i64 %0, %sub - %common.ret.op = select i1 %eq, i64 1, i64 %mul - ret i64 %common.ret.op + %n = alloca i64, align 8 + store i64 %0, ptr %n, align 4 + %n1 = load i64, ptr %n, align 4 + %eq = icmp eq i64 %n1, 0 + br i1 %eq, label %then, label %else + +then: ; preds = %body + ret i64 1 + +else: ; preds = %body + %n2 = load i64, ptr %n, align 4 + %n3 = load i64, ptr %n, align 4 + %sub = sub i64 %n3, 1 + %mul = mul i64 %n2, %sub + br label %if_merge + +if_merge: ; preds = %else + ret i64 %mul } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_228_never_if.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_228_never_if.snap index 092e1182d..dd11e5cd2 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_228_never_if.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_228_never_if.snap @@ -1,26 +1,34 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1062 expression: "\n pub fn fact(n: usize) -> usize {\n \t if n == 0 {return 1} else {return n * (n-1)}\n \t return 2;\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @fact(i64 %0) { body: - %eq = icmp eq i64 %0, 0 - %sub = sub i64 %0, 1 - %mul = mul i64 %0, %sub - %common.ret.op = select i1 %eq, i64 1, i64 %mul - ret i64 %common.ret.op + %n = alloca i64, align 8 + store i64 %0, ptr %n, align 4 + %n1 = load i64, ptr %n, align 4 + %eq = icmp eq i64 %n1, 0 + br i1 %eq, label %then, label %else + +then: ; preds = %body + ret i64 1 + +else: ; preds = %body + %n2 = load i64, ptr %n, align 4 + %n3 = load i64, ptr %n, align 4 + %sub = sub i64 %n3, 1 + %mul = mul i64 %n2, %sub + ret i64 %mul } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_262.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_262.snap index 2b9a94fba..82c96277c 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_262.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__issue_262.snap @@ -1,8 +1,6 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n fn foo() -> i32 {\n let bar = {\n let b = 3;\n return b + 3;\n };\n\n // This code will never be executed\n let a = 3 + 4;\n a\n }" - --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' @@ -10,10 +8,13 @@ source_filename = "mod" define i32 @foo() { body: - ret i32 6 + %b = alloca i32, align 4 + store i32 3, ptr %b, align 4 + %b1 = load i32, ptr %b, align 4 + %add = add i32 %b1, 3 + ret i32 %add } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" - diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__let_statement.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__let_statement.snap index bf604680a..5d02cb862 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__let_statement.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__let_statement.snap @@ -6,17 +6,22 @@ expression: "\n pub fn main(a:i32) -> i32 {\n let b = a+1\n b\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @main(i32 %0) { body: - %add = add i32 %0, 1 - ret i32 %add + %b = alloca i32, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %add = add i32 %a1, 1 + store i32 %add, ptr %b, align 4 + %b2 = load i32, ptr %b, align 4 + ret i32 %b2 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__literal_types.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__literal_types.snap index 2c8d8dc56..f7531fc86 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__literal_types.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__literal_types.snap @@ -6,7 +6,7 @@ expression: "\n pub fn main(){\n let a = 123;\n let a = 123u8;\ ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define void @main() { body: @@ -26,30 +26,30 @@ body: %a2 = alloca i16, align 2 %a1 = alloca i8, align 1 %a = alloca i32, align 4 - store i32 123, i32* %a, align 4 - store i8 123, i8* %a1, align 1 - store i16 123, i16* %a2, align 2 - store i32 123, i32* %a3, align 4 - store i64 123, i64* %a4, align 4 - store i128 123, i128* %a5, align 4 - store i32 1000000, i32* %a6, align 4 - store i8 123, i8* %a7, align 1 - store i16 123, i16* %a8, align 2 - store i32 123, i32* %a9, align 4 - store i64 123, i64* %a10, align 4 - store i128 123123123123123123123123123123123, i128* %a11, align 4 - store i32 1000000, i32* %a12, align 4 - store double 0x40C3889D70A3D70A, double* %a13, align 8 - store float 0x40C3889D80000000, float* %a14, align 4 - store double 0x40C3889D70A3D70A, double* %a15, align 8 + store i32 123, ptr %a, align 4 + store i8 123, ptr %a1, align 1 + store i16 123, ptr %a2, align 2 + store i32 123, ptr %a3, align 4 + store i64 123, ptr %a4, align 4 + store i128 123, ptr %a5, align 4 + store i32 1000000, ptr %a6, align 4 + store i8 123, ptr %a7, align 1 + store i16 123, ptr %a8, align 2 + store i32 123, ptr %a9, align 4 + store i64 123, ptr %a10, align 4 + store i128 123123123123123123123123123123123, ptr %a11, align 4 + store i32 1000000, ptr %a12, align 4 + store double 0x40C3889D70A3D70A, ptr %a13, align 8 + store float 0x40C3889D80000000, ptr %a14, align 4 + store double 0x40C3889D70A3D70A, ptr %a15, align 8 ret void } define i32 @add(i32 %0) { body: %a = alloca i32, align 4 - store i32 %0, i32* %a, align 4 - %a1 = load i32, i32* %a, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 %add = add i32 %a1, 12 ret i32 %add } @@ -58,5 +58,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__logic_op_bool.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__logic_op_bool.snap index 5b447cd79..f4421f1b2 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__logic_op_bool.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__logic_op_bool.snap @@ -6,17 +6,29 @@ expression: "\n pub fn and(a: bool, b: bool) -> bool {\n a && b\n } ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i1 @and(i1 %0, i1 %1) { body: - %and = and i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %and = and i1 %a1, %b2 ret i1 %and } define i1 @or(i1 %0, i1 %1) { body: - %or = or i1 %0, %1 + %b = alloca i1, align 1 + store i1 %1, ptr %b, align 1 + %a = alloca i1, align 1 + store i1 %0, ptr %a, align 1 + %a1 = load i1, ptr %a, align 1 + %b2 = load i1, ptr %b, align 1 + %or = or i1 %a1, %b2 ret i1 %or } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__loop_break_expr.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__loop_break_expr.snap index 7b67cc250..c724d976f 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__loop_break_expr.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__loop_break_expr.snap @@ -6,30 +6,39 @@ expression: "\n pub fn foo(n:i32) -> i32 {\n loop {\n if n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @foo(i32 %0) { body: + %n = alloca i32, align 4 + store i32 %0, ptr %n, align 4 br label %loop loop: ; preds = %if_merge6, %body - %n.0 = phi i32 [ %0, %body ], [ %add, %if_merge6 ] - %greater = icmp sgt i32 %n.0, 5 + %n1 = load i32, ptr %n, align 4 + %greater = icmp sgt i32 %n1, 5 br i1 %greater, label %then, label %if_merge -exit: ; preds = %if_merge, %then - %exit8 = phi i32 [ %n.0, %then ], [ 10, %if_merge ] +exit: ; preds = %then5, %then + %exit8 = phi i32 [ %n2, %then ], [ 10, %then5 ] ret i32 %exit8 then: ; preds = %loop + %n2 = load i32, ptr %n, align 4 br label %exit if_merge: ; preds = %loop - %greater4 = icmp sgt i32 %n.0, 10 - br i1 %greater4, label %exit, label %if_merge6 + %n3 = load i32, ptr %n, align 4 + %greater4 = icmp sgt i32 %n3, 10 + br i1 %greater4, label %then5, label %if_merge6 + +then5: ; preds = %if_merge + br label %exit if_merge6: ; preds = %if_merge - %add = add i32 %n.0, 1 + %n7 = load i32, ptr %n, align 4 + %add = add i32 %n7, 1 + store i32 %add, ptr %n, align 4 br label %loop } @@ -37,5 +46,4 @@ if_merge6: ; preds = %if_merge ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__loop_issue_llvm13.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__loop_issue_llvm13.snap index 0803ceda2..e597d01a2 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__loop_issue_llvm13.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__loop_issue_llvm13.snap @@ -1,13 +1,12 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1062 expression: "\n pub fn issue() -> i32 {\n loop {\n }\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @issue() { body: @@ -21,5 +20,4 @@ loop: ; preds = %loop, %body ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__multi_file.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__multi_file.snap index 5f6aa4513..c685cf963 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__multi_file.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__multi_file.snap @@ -6,14 +6,14 @@ expression: "\n //- /mod.mun\n pub fn main() -> i32 {\n foo::get_va ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i32 ()* } +%DispatchTable = type { ptr } @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @main() { body: - %get_value_ptr = load i32 ()*, i32 ()** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 + %get_value_ptr = load ptr, ptr @dispatchTable, align 8 %get_value = call i32 %get_value_ptr() ret i32 %get_value } @@ -22,16 +22,16 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i32 ()* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [1 x i64*] zeroinitializer +@global_type_lookup_table = global [1 x ptr] zeroinitializer ; == FILE IR (foo) ===================================== ; ModuleID = 'foo' source_filename = "foo" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @get_value() { body: @@ -42,5 +42,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_f32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_f32.snap index 33e75ca0f..477aa81b5 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_f32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_f32.snap @@ -6,11 +6,14 @@ expression: "\n pub fn negate(a: f32) -> f32 { -a }\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define float @negate(float %0) { body: - %neg = fneg float %0 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %neg = fneg float %a1 ret float %neg } @@ -18,5 +21,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_f64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_f64.snap index 7f4ecbde2..d0051e9ae 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_f64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_f64.snap @@ -6,11 +6,14 @@ expression: "\n pub fn negate(a: f64) -> f64 { -a }\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define double @negate(double %0) { body: - %neg = fneg double %0 + %a = alloca double, align 8 + store double %0, ptr %a, align 8 + %a1 = load double, ptr %a, align 8 + %neg = fneg double %a1 ret double %neg } @@ -18,5 +21,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i128.snap index 5cdf71d43..aae1931b8 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i128.snap @@ -6,11 +6,14 @@ expression: "\n pub fn negate(a: i128) -> i128 { -a }\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @negate(i128 %0) { body: - %neg = sub i128 0, %0 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %neg = sub i128 0, %a1 ret i128 %neg } @@ -18,5 +21,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i16.snap index 491141ef6..4cd33c698 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i16.snap @@ -6,11 +6,14 @@ expression: "\n pub fn negate(a: i16) -> i16 { -a }\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @negate(i16 %0) { body: - %neg = sub i16 0, %0 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %neg = sub i16 0, %a1 ret i16 %neg } @@ -18,5 +21,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i32.snap index 87e613c79..d7c621868 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i32.snap @@ -6,11 +6,14 @@ expression: "\n pub fn negate(a: i32) -> i32 { -a }\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @negate(i32 %0) { body: - %neg = sub i32 0, %0 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %neg = sub i32 0, %a1 ret i32 %neg } @@ -18,5 +21,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i64.snap index 80a64bccb..b00bb39cf 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i64.snap @@ -6,11 +6,14 @@ expression: "\n pub fn negate(a: i64) -> i64 { -a }\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @negate(i64 %0) { body: - %neg = sub i64 0, %0 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %neg = sub i64 0, %a1 ret i64 %neg } @@ -18,5 +21,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i8.snap index 27587be76..aa7f982d5 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__negate_op_i8.snap @@ -6,11 +6,14 @@ expression: "\n pub fn negate(a: i8) -> i8 { -a }\n " ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @negate(i8 %0) { body: - %neg = sub i8 0, %0 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %neg = sub i8 0, %a1 ret i8 %neg } @@ -18,5 +21,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_extern_fn.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_extern_fn.snap index 4773133b3..21792b9f4 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_extern_fn.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_extern_fn.snap @@ -6,14 +6,14 @@ expression: "\n extern fn extern_fn() -> f32;\n\n fn private_fn() -> f32 { ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { float ()* } +%DispatchTable = type { ptr } @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define float @private_fn() { body: - %extern_fn_ptr = load float ()*, float ()** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 + %extern_fn_ptr = load ptr, ptr @dispatchTable, align 8 %extern_fn = call float %extern_fn_ptr() ret float %extern_fn } @@ -28,8 +28,7 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { float ()* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_fn.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_fn.snap index 78b46cbdd..131bbec7d 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_fn.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_fn.snap @@ -1,13 +1,12 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n fn nested_private_fn() -> i32 {\n 1\n }\n\n fn private_fn() -> i32 {\n nested_private_fn()\n }\n\n pub fn main() -> i32 {\n private_fn()\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @nested_private_fn() { body: @@ -30,5 +29,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_recursive_fn.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_recursive_fn.snap index 5baa1613e..d3d283967 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_recursive_fn.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_recursive_fn.snap @@ -1,13 +1,12 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n fn private_fn() -> f32 {\n private_fn()\n }\n\n pub fn main() -> f32 {\n private_fn()\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define float @private_fn() { body: @@ -25,5 +24,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_recursive_fn_with_args.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_recursive_fn_with_args.snap index 1a5932aff..50ed4004c 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_recursive_fn_with_args.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_private_recursive_fn_with_args.snap @@ -6,20 +6,23 @@ expression: "\n extern fn other() -> i32;\n\n fn private_fn(a: i32) -> f32 ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i32 ()* } +%DispatchTable = type { ptr } @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [2 x i64*] +@global_type_lookup_table = external global [2 x ptr] define float @private_fn(i32 %0) { body: - %private_fn = call float @private_fn(i32 %0) + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %private_fn = call float @private_fn(i32 %a1) ret float %private_fn } define float @main() { body: - %other_ptr = load i32 ()*, i32 ()** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 + %other_ptr = load ptr, ptr @dispatchTable, align 8 %other = call i32 %other_ptr() %private_fn = call float @private_fn(i32 %other) ret float %private_fn @@ -29,8 +32,7 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i32 ()* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [2 x i64*] zeroinitializer - +@global_type_lookup_table = global [2 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_structs.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_structs.snap index 5615e108f..0ccf405e0 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_structs.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__nested_structs.snap @@ -1,115 +1,125 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1080 expression: "\n pub struct(gc) GcStruct(f32, f32);\n pub struct(value) ValueStruct(f32, f32);\n\n pub struct(gc) GcWrapper(GcStruct, ValueStruct)\n pub struct(value) ValueWrapper(GcStruct, ValueStruct);\n\n pub fn new_gc_struct(a: f32, b: f32) -> GcStruct {\n GcStruct(a, b)\n }\n\n pub fn new_value_struct(a: f32, b: f32) -> ValueStruct {\n ValueStruct(a, b)\n }\n\n pub fn new_gc_wrapper(a: GcStruct, b: ValueStruct) -> GcWrapper {\n GcWrapper(a, b)\n }\n\n pub fn new_value_wrapper(a: GcStruct, b: ValueStruct) -> ValueWrapper {\n ValueWrapper(a, b)\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } %GcStruct = type { float, float } %ValueStruct = type { float, float } -%GcWrapper = type { %GcStruct**, %ValueStruct } -%ValueWrapper = type { %GcStruct**, %ValueStruct } +%GcWrapper = type { ptr, %ValueStruct } +%ValueWrapper = type { ptr, %ValueStruct } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [5 x i64*] +@global_type_lookup_table = external global [5 x ptr] -define %GcStruct** @new_gc_struct(float %0, float %1) { +define ptr @new_gc_struct(float %0, float %1) { body: - %init = insertvalue %GcStruct undef, float %0, 0 - %init3 = insertvalue %GcStruct %init, float %1, 1 - %new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %GcStruct_ptr = load i64*, i64** getelementptr inbounds ([5 x i64*], [5 x i64*]* @global_type_lookup_table, i64 0, i64 0), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %GcStruct_ptr to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle) - %"ref" = bitcast i8** %ref to %GcStruct** - %"ref->data" = load %GcStruct*, %GcStruct** %"ref", align 8 - store %GcStruct %init3, %GcStruct* %"ref->data", align 4 - ret %GcStruct** %"ref" + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %init = insertvalue %GcStruct undef, float %a1, 0 + %init3 = insertvalue %GcStruct %init, float %b2, 1 + %new_ptr = load ptr, ptr @dispatchTable, align 8 + %GcStruct_ptr = load ptr, ptr @global_type_lookup_table, align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_ptr(ptr %GcStruct_ptr, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + store %GcStruct %init3, ptr %"ref->data", align 4 + ret ptr %ref } define %ValueStruct @new_value_struct(float %0, float %1) { body: - %init = insertvalue %ValueStruct undef, float %0, 0 - %init3 = insertvalue %ValueStruct %init, float %1, 1 + %b = alloca float, align 4 + store float %1, ptr %b, align 4 + %a = alloca float, align 4 + store float %0, ptr %a, align 4 + %a1 = load float, ptr %a, align 4 + %b2 = load float, ptr %b, align 4 + %init = insertvalue %ValueStruct undef, float %a1, 0 + %init3 = insertvalue %ValueStruct %init, float %b2, 1 ret %ValueStruct %init3 } -define %ValueStruct** @new_value_struct_wrapper(float %0, float %1) { +define ptr @new_value_struct_wrapper(float %0, float %1) { body: %new_value_struct = call %ValueStruct @new_value_struct(float %0, float %1) - %new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %ValueStruct_ptr = load i64*, i64** getelementptr inbounds ([5 x i64*], [5 x i64*]* @global_type_lookup_table, i64 0, i64 2), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %ValueStruct_ptr to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle) - %"ref" = bitcast i8** %ref to %ValueStruct** - %"ref->data" = load %ValueStruct*, %ValueStruct** %"ref", align 8 - store %ValueStruct %new_value_struct, %ValueStruct* %"ref->data", align 4 - ret %ValueStruct** %"ref" + %new_ptr = load ptr, ptr @dispatchTable, align 8 + %ValueStruct_ptr = load ptr, ptr getelementptr ([5 x ptr], ptr @global_type_lookup_table, i64 0, i64 2), align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_ptr(ptr %ValueStruct_ptr, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + store %ValueStruct %new_value_struct, ptr %"ref->data", align 4 + ret ptr %ref } -define %GcWrapper** @new_gc_wrapper(%GcStruct** %0, %ValueStruct %1) { +define ptr @new_gc_wrapper(ptr %0, %ValueStruct %1) { body: - %.fca.0.extract = extractvalue %ValueStruct %1, 0 - %.fca.1.extract = extractvalue %ValueStruct %1, 1 - %init = insertvalue %GcWrapper undef, %GcStruct** %0, 0 - %init3 = insertvalue %GcWrapper %init, %ValueStruct %1, 1 - %new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %GcWrapper_ptr = load i64*, i64** getelementptr inbounds ([5 x i64*], [5 x i64*]* @global_type_lookup_table, i64 0, i64 1), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %GcWrapper_ptr to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle) - %"ref" = bitcast i8** %ref to %GcWrapper** - %"ref->data" = load %GcWrapper*, %GcWrapper** %"ref", align 8 - store %GcWrapper %init3, %GcWrapper* %"ref->data", align 8 - ret %GcWrapper** %"ref" + %b = alloca %ValueStruct, align 8 + store %ValueStruct %1, ptr %b, align 4 + %a = alloca ptr, align 8 + store ptr %0, ptr %a, align 8 + %a1 = load ptr, ptr %a, align 8 + %b2 = load %ValueStruct, ptr %b, align 4 + %init = insertvalue %GcWrapper undef, ptr %a1, 0 + %init3 = insertvalue %GcWrapper %init, %ValueStruct %b2, 1 + %new_ptr = load ptr, ptr @dispatchTable, align 8 + %GcWrapper_ptr = load ptr, ptr getelementptr ([5 x ptr], ptr @global_type_lookup_table, i64 0, i64 1), align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_ptr(ptr %GcWrapper_ptr, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + store %GcWrapper %init3, ptr %"ref->data", align 8 + ret ptr %ref } -define %GcWrapper** @new_gc_wrapper_wrapper(%GcStruct** %0, %ValueStruct** %1) { +define ptr @new_gc_wrapper_wrapper(ptr %0, ptr %1) { body: - %"->data" = load %ValueStruct*, %ValueStruct** %1, align 8 - %deref = load %ValueStruct, %ValueStruct* %"->data", align 4 - %new_gc_wrapper = call %GcWrapper** @new_gc_wrapper(%GcStruct** %0, %ValueStruct %deref) - ret %GcWrapper** %new_gc_wrapper + %"->data" = load ptr, ptr %1, align 8 + %deref = load %ValueStruct, ptr %"->data", align 4 + %new_gc_wrapper = call ptr @new_gc_wrapper(ptr %0, %ValueStruct %deref) + ret ptr %new_gc_wrapper } -define %ValueWrapper @new_value_wrapper(%GcStruct** %0, %ValueStruct %1) { +define %ValueWrapper @new_value_wrapper(ptr %0, %ValueStruct %1) { body: - %.fca.0.extract = extractvalue %ValueStruct %1, 0 - %.fca.1.extract = extractvalue %ValueStruct %1, 1 - %init = insertvalue %ValueWrapper undef, %GcStruct** %0, 0 - %init3 = insertvalue %ValueWrapper %init, %ValueStruct %1, 1 + %b = alloca %ValueStruct, align 8 + store %ValueStruct %1, ptr %b, align 4 + %a = alloca ptr, align 8 + store ptr %0, ptr %a, align 8 + %a1 = load ptr, ptr %a, align 8 + %b2 = load %ValueStruct, ptr %b, align 4 + %init = insertvalue %ValueWrapper undef, ptr %a1, 0 + %init3 = insertvalue %ValueWrapper %init, %ValueStruct %b2, 1 ret %ValueWrapper %init3 } -define %ValueWrapper** @new_value_wrapper_wrapper(%GcStruct** %0, %ValueStruct** %1) { +define ptr @new_value_wrapper_wrapper(ptr %0, ptr %1) { body: - %"->data" = load %ValueStruct*, %ValueStruct** %1, align 8 - %deref = load %ValueStruct, %ValueStruct* %"->data", align 4 - %new_value_wrapper = call %ValueWrapper @new_value_wrapper(%GcStruct** %0, %ValueStruct %deref) - %new_ptr = load i8** (i8*, i8*)*, i8** (i8*, i8*)** getelementptr inbounds (%DispatchTable, %DispatchTable* @dispatchTable, i32 0, i32 0), align 8 - %ValueWrapper_ptr = load i64*, i64** getelementptr inbounds ([5 x i64*], [5 x i64*]* @global_type_lookup_table, i64 0, i64 3), align 8 - %type_info_ptr_to_i8_ptr = bitcast i64* %ValueWrapper_ptr to i8* - %allocator_handle = load i8*, i8** @allocatorHandle, align 8 - %ref = call i8** %new_ptr(i8* %type_info_ptr_to_i8_ptr, i8* %allocator_handle) - %"ref" = bitcast i8** %ref to %ValueWrapper** - %"ref->data" = load %ValueWrapper*, %ValueWrapper** %"ref", align 8 - store %ValueWrapper %new_value_wrapper, %ValueWrapper* %"ref->data", align 8 - ret %ValueWrapper** %"ref" + %"->data" = load ptr, ptr %1, align 8 + %deref = load %ValueStruct, ptr %"->data", align 4 + %new_value_wrapper = call %ValueWrapper @new_value_wrapper(ptr %0, %ValueStruct %deref) + %new_ptr = load ptr, ptr @dispatchTable, align 8 + %ValueWrapper_ptr = load ptr, ptr getelementptr ([5 x ptr], ptr @global_type_lookup_table, i64 0, i64 3), align 8 + %allocator_handle = load ptr, ptr @allocatorHandle, align 8 + %ref = call ptr %new_ptr(ptr %ValueWrapper_ptr, ptr %allocator_handle) + %"ref->data" = load ptr, ptr %ref, align 8 + store %ValueWrapper %new_value_wrapper, ptr %"ref->data", align 8 + ret ptr %ref } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [5 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [5 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__never_conditional_return_expr.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__never_conditional_return_expr.snap index cd895fdb2..d391f117c 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__never_conditional_return_expr.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__never_conditional_return_expr.snap @@ -1,25 +1,33 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1062 expression: "\n pub fn main(a:i32) -> i32 {\n if a > 4 {\n return a;\n } else {\n return a - 1;\n }\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @main(i32 %0) { body: - %greater = icmp sgt i32 %0, 4 - %sub = sub i32 %0, 1 - %common.ret.op = select i1 %greater, i32 %0, i32 %sub - ret i32 %common.ret.op + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %greater = icmp sgt i32 %a1, 4 + br i1 %greater, label %then, label %else + +then: ; preds = %body + %a2 = load i32, ptr %a, align 4 + ret i32 %a2 + +else: ; preds = %body + %a3 = load i32, ptr %a, align 4 + %sub = sub i32 %a3, 1 + ret i32 %sub } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__private_fn_only.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__private_fn_only.snap index 9f991dd05..5892a1c0e 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__private_fn_only.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__private_fn_only.snap @@ -1,8 +1,6 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n fn private_main() {\n let a = 1;\n }\n " - --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' @@ -10,10 +8,11 @@ source_filename = "mod" define void @private_main() { body: + %a = alloca i32, align 4 + store i32 1, ptr %a, align 4 ret void } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" - diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__return_expr.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__return_expr.snap index dc80464f2..2f6838a8d 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__return_expr.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__return_expr.snap @@ -1,13 +1,12 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n pub fn main() -> i32 {\n return 5;\n let a = 3; // Nothing regarding this statement should be in the IR\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @main() { body: @@ -18,5 +17,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__return_type.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__return_type.snap index 2802d14d3..6beaf2beb 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__return_type.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__return_type.snap @@ -1,13 +1,12 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n pub fn main() -> i32 {\n 0\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @main() { body: @@ -18,5 +17,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shadowing.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shadowing.snap index 999eba5fc..5a04d9c9e 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shadowing.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shadowing.snap @@ -6,20 +6,42 @@ expression: "\n pub fn foo(a:i32) -> i32 {\n let a = a+1;\n {\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @foo(i32 %0) { body: - %add = add i32 %0, 1 - %add7 = add i32 %add, 3 + %a5 = alloca i32, align 4 + %a2 = alloca i32, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %add = add i32 %a1, 1 + store i32 %add, ptr %a2, align 4 + %a3 = load i32, ptr %a2, align 4 + %add4 = add i32 %a3, 2 + store i32 %add4, ptr %a5, align 4 + %a6 = load i32, ptr %a2, align 4 + %add7 = add i32 %a6, 3 ret i32 %add7 } define i32 @bar(i32 %0) { body: - %add = add i32 %0, 1 - %add4 = add i32 %add, 2 - %add9 = add i32 %add4, 3 + %a7 = alloca i32, align 4 + %a5 = alloca i32, align 4 + %a2 = alloca i32, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %add = add i32 %a1, 1 + store i32 %add, ptr %a2, align 4 + %a3 = load i32, ptr %a2, align 4 + %add4 = add i32 %a3, 2 + store i32 %add4, ptr %a5, align 4 + %a6 = load i32, ptr %a5, align 4 + store i32 %a6, ptr %a7, align 4 + %a8 = load i32, ptr %a7, align 4 + %add9 = add i32 %a8, 3 ret i32 %add9 } @@ -27,5 +49,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i128.snap index cfc74d382..21ff8dd1e 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i128.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: i128, b: i128) -> i128 { a << b }\n pu ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @leftshift(i128 %0, i128 %1) { body: - %left_shift = shl i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %left_shift = shl i128 %a1, %b2 ret i128 %left_shift } define i128 @rightshift(i128 %0, i128 %1) { body: - %right_shift = ashr i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %right_shift = ashr i128 %a1, %b2 ret i128 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i16.snap index d009639d2..6b04e26ae 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i16.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: i16, b: i16) -> i16 { a << b }\n pub f ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @leftshift(i16 %0, i16 %1) { body: - %left_shift = shl i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %left_shift = shl i16 %a1, %b2 ret i16 %left_shift } define i16 @rightshift(i16 %0, i16 %1) { body: - %right_shift = ashr i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %right_shift = ashr i16 %a1, %b2 ret i16 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i32.snap index c9dff9494..b4042fb10 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i32.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: i32, b: i32) -> i32 { a << b }\n pub f ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @leftshift(i32 %0, i32 %1) { body: - %left_shift = shl i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %left_shift = shl i32 %a1, %b2 ret i32 %left_shift } define i32 @rightshift(i32 %0, i32 %1) { body: - %right_shift = ashr i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %right_shift = ashr i32 %a1, %b2 ret i32 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i64.snap index 047f35c19..2defa8c73 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i64.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: i64, b: i64) -> i64 { a << b }\n pub f ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @leftshift(i64 %0, i64 %1) { body: - %left_shift = shl i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %left_shift = shl i64 %a1, %b2 ret i64 %left_shift } define i64 @rightshift(i64 %0, i64 %1) { body: - %right_shift = ashr i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %right_shift = ashr i64 %a1, %b2 ret i64 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i8.snap index 5e7ef92be..30c7003a6 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_i8.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: i8, b: i8) -> i8 { a << b }\n pub fn r ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @leftshift(i8 %0, i8 %1) { body: - %left_shift = shl i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %left_shift = shl i8 %a1, %b2 ret i8 %left_shift } define i8 @rightshift(i8 %0, i8 %1) { body: - %right_shift = ashr i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %right_shift = ashr i8 %a1, %b2 ret i8 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u128.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u128.snap index 33bf60147..86f9ecbc3 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u128.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u128.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: u128, b: u128) -> u128 { a << b }\n pu ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i128 @leftshift(i128 %0, i128 %1) { body: - %left_shift = shl i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %left_shift = shl i128 %a1, %b2 ret i128 %left_shift } define i128 @rightshift(i128 %0, i128 %1) { body: - %right_shift = lshr i128 %0, %1 + %b = alloca i128, align 8 + store i128 %1, ptr %b, align 4 + %a = alloca i128, align 8 + store i128 %0, ptr %a, align 4 + %a1 = load i128, ptr %a, align 4 + %b2 = load i128, ptr %b, align 4 + %right_shift = lshr i128 %a1, %b2 ret i128 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u16.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u16.snap index c5c890668..effb842a6 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u16.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u16.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: u16, b: u16) -> u16 { a << b }\n pub f ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i16 @leftshift(i16 %0, i16 %1) { body: - %left_shift = shl i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %left_shift = shl i16 %a1, %b2 ret i16 %left_shift } define i16 @rightshift(i16 %0, i16 %1) { body: - %right_shift = lshr i16 %0, %1 + %b = alloca i16, align 2 + store i16 %1, ptr %b, align 2 + %a = alloca i16, align 2 + store i16 %0, ptr %a, align 2 + %a1 = load i16, ptr %a, align 2 + %b2 = load i16, ptr %b, align 2 + %right_shift = lshr i16 %a1, %b2 ret i16 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u32.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u32.snap index 37f36ab1e..5f54444c0 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u32.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u32.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: u32, b: u32) -> u32 { a << b }\n pub f ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @leftshift(i32 %0, i32 %1) { body: - %left_shift = shl i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %left_shift = shl i32 %a1, %b2 ret i32 %left_shift } define i32 @rightshift(i32 %0, i32 %1) { body: - %right_shift = lshr i32 %0, %1 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %b2 = load i32, ptr %b, align 4 + %right_shift = lshr i32 %a1, %b2 ret i32 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u64.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u64.snap index b6c66ee9c..8cf4483f8 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u64.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u64.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: u64, b: u64) -> u64 { a << b }\n pub f ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i64 @leftshift(i64 %0, i64 %1) { body: - %left_shift = shl i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %left_shift = shl i64 %a1, %b2 ret i64 %left_shift } define i64 @rightshift(i64 %0, i64 %1) { body: - %right_shift = lshr i64 %0, %1 + %b = alloca i64, align 8 + store i64 %1, ptr %b, align 4 + %a = alloca i64, align 8 + store i64 %0, ptr %a, align 4 + %a1 = load i64, ptr %a, align 4 + %b2 = load i64, ptr %b, align 4 + %right_shift = lshr i64 %a1, %b2 ret i64 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u8.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u8.snap index 3519a1f46..62a9ddb0d 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u8.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__shift_op_u8.snap @@ -6,17 +6,29 @@ expression: "\n pub fn leftshift(a: u8, b: u8) -> u8 { a << b }\n pub fn r ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i8 @leftshift(i8 %0, i8 %1) { body: - %left_shift = shl i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %left_shift = shl i8 %a1, %b2 ret i8 %left_shift } define i8 @rightshift(i8 %0, i8 %1) { body: - %right_shift = lshr i8 %0, %1 + %b = alloca i8, align 1 + store i8 %1, ptr %b, align 1 + %a = alloca i8, align 1 + store i8 %0, ptr %a, align 1 + %a1 = load i8, ptr %a, align 1 + %b2 = load i8, ptr %b, align 1 + %right_shift = lshr i8 %a1, %b2 ret i8 %right_shift } @@ -24,5 +36,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__struct_test.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__struct_test.snap index cd7c48882..c1adbdc63 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__struct_test.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__struct_test.snap @@ -1,35 +1,34 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1080 expression: "\n struct(value) Bar(f64, i32, bool, Foo);\n struct(value) Foo { a: i32 };\n struct(value) Baz;\n pub fn foo() {\n let a: Foo = Foo { a: 5 };\n let b: Bar = Bar(1.23, a.a, true, a);\n let c: Baz = Baz;\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } %Baz = type {} %Bar = type { double, i32, i1, %Foo } %Foo = type { i32 } -@allocatorHandle = external global i8* +@allocatorHandle = external global ptr @dispatchTable = external global %DispatchTable -@global_type_lookup_table = external global [6 x i64*] +@global_type_lookup_table = external global [6 x ptr] define void @foo() { body: %c = alloca %Baz, align 8 %b = alloca %Bar, align 8 %a = alloca %Foo, align 8 - store %Foo { i32 5 }, %Foo* %a, align 4 - %"Foo->a" = getelementptr inbounds %Foo, %Foo* %a, i32 0, i32 0 - %Foo.a = load i32, i32* %"Foo->a", align 4 - %a1 = load %Foo, %Foo* %a, align 4 + store %Foo { i32 5 }, ptr %a, align 4 + %"Foo->a" = getelementptr inbounds nuw %Foo, ptr %a, i32 0, i32 0 + %Foo.a = load i32, ptr %"Foo->a", align 4 + %a1 = load %Foo, ptr %a, align 4 %init = insertvalue %Bar { double 1.230000e+00, i32 undef, i1 undef, %Foo undef }, i32 %Foo.a, 1 %init2 = insertvalue %Bar %init, i1 true, 2 %init3 = insertvalue %Bar %init2, %Foo %a1, 3 - store %Bar %init3, %Bar* %b, align 8 - store %Baz undef, %Baz* %c, align 1 + store %Bar %init3, ptr %b, align 8 + store %Baz undef, ptr %c, align 1 ret void } @@ -37,9 +36,8 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -%DispatchTable = type { i8** (i8*, i8*)* } +%DispatchTable = type { ptr } @dispatchTable = global %DispatchTable zeroinitializer -@global_type_lookup_table = global [6 x i64*] zeroinitializer -@allocatorHandle = unnamed_addr global i8* null - +@global_type_lookup_table = global [6 x ptr] zeroinitializer +@allocatorHandle = unnamed_addr global ptr null diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__true_is_true.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__true_is_true.snap index 50fbe74c2..184424a85 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__true_is_true.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__true_is_true.snap @@ -6,7 +6,7 @@ expression: "\n pub fn test_true() -> bool {\n true\n }\n\n pub ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i1 @test_true() { body: @@ -22,5 +22,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__update_operators.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__update_operators.snap index ea5f64c01..1c1086d11 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__update_operators.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__update_operators.snap @@ -6,41 +6,95 @@ expression: "\n pub fn add(a:i32, b:i32) -> i32 {\n let result = a\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @add(i32 %0, i32 %1) { body: - %add = add i32 %0, %1 - ret i32 %add + %result = alloca i32, align 4 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + store i32 %a1, ptr %result, align 4 + %result2 = load i32, ptr %result, align 4 + %b3 = load i32, ptr %b, align 4 + %add = add i32 %result2, %b3 + store i32 %add, ptr %result, align 4 + %result4 = load i32, ptr %result, align 4 + ret i32 %result4 } define i32 @subtract(i32 %0, i32 %1) { body: - %sub = sub i32 %0, %1 - ret i32 %sub + %result = alloca i32, align 4 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + store i32 %a1, ptr %result, align 4 + %result2 = load i32, ptr %result, align 4 + %b3 = load i32, ptr %b, align 4 + %sub = sub i32 %result2, %b3 + store i32 %sub, ptr %result, align 4 + %result4 = load i32, ptr %result, align 4 + ret i32 %result4 } define i32 @multiply(i32 %0, i32 %1) { body: - %mul = mul i32 %0, %1 - ret i32 %mul + %result = alloca i32, align 4 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + store i32 %a1, ptr %result, align 4 + %result2 = load i32, ptr %result, align 4 + %b3 = load i32, ptr %b, align 4 + %mul = mul i32 %result2, %b3 + store i32 %mul, ptr %result, align 4 + %result4 = load i32, ptr %result, align 4 + ret i32 %result4 } define i32 @divide(i32 %0, i32 %1) { body: - %div = sdiv i32 %0, %1 - ret i32 %div + %result = alloca i32, align 4 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + store i32 %a1, ptr %result, align 4 + %result2 = load i32, ptr %result, align 4 + %b3 = load i32, ptr %b, align 4 + %div = sdiv i32 %result2, %b3 + store i32 %div, ptr %result, align 4 + %result4 = load i32, ptr %result, align 4 + ret i32 %result4 } define i32 @remainder(i32 %0, i32 %1) { body: - %rem = srem i32 %0, %1 - ret i32 %rem + %result = alloca i32, align 4 + %b = alloca i32, align 4 + store i32 %1, ptr %b, align 4 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + store i32 %a1, ptr %result, align 4 + %result2 = load i32, ptr %result, align 4 + %b3 = load i32, ptr %b, align 4 + %rem = srem i32 %result2, %b3 + store i32 %rem, ptr %result, align 4 + %result4 = load i32, ptr %result, align 4 + ret i32 %result4 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__update_parameter.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__update_parameter.snap index 207cde62b..ce3d26eac 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__update_parameter.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__update_parameter.snap @@ -6,17 +6,21 @@ expression: "\n pub fn add_three(a:i32) -> i32 {\n a += 3;\n a\n ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define i32 @add_three(i32 %0) { body: - %add = add i32 %0, 3 - ret i32 %add + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 + %a1 = load i32, ptr %a, align 4 + %add = add i32 %a1, 3 + store i32 %add, ptr %a, align 4 + %a2 = load i32, ptr %a, align 4 + ret i32 %a2 } ; == GROUP IR (mod) ==================================== ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__void_return.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__void_return.snap index e9afcdc54..912161c08 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__void_return.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__void_return.snap @@ -1,21 +1,25 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n fn bar() {\n let a = 3;\n }\n pub fn foo(a:i32) {\n let c = bar()\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define void @bar() { body: + %a = alloca i32, align 4 + store i32 3, ptr %a, align 4 ret void } define void @foo(i32 %0) { body: + %c = alloca {}, align 8 + %a = alloca i32, align 4 + store i32 %0, ptr %a, align 4 call void @bar() ret void } @@ -24,5 +28,4 @@ body: ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/crates/mun_codegen/src/snapshots/mun_codegen__test__while_expr.snap b/crates/mun_codegen/src/snapshots/mun_codegen__test__while_expr.snap index d7afdb6d0..ef0cdf366 100644 --- a/crates/mun_codegen/src/snapshots/mun_codegen__test__while_expr.snap +++ b/crates/mun_codegen/src/snapshots/mun_codegen__test__while_expr.snap @@ -1,28 +1,42 @@ --- source: crates/mun_codegen/src/test.rs -assertion_line: 1045 expression: "\n pub fn foo(n:i32) {\n while n<3 {\n n += 1;\n };\n\n // This will be completely optimized out\n while n<4 {\n break;\n };\n }\n " --- ; == FILE IR (mod) ===================================== ; ModuleID = 'mod' source_filename = "mod" -@global_type_lookup_table = external global [1 x i64*] +@global_type_lookup_table = external global [1 x ptr] define void @foo(i32 %0) { body: + %n = alloca i32, align 4 + store i32 %0, ptr %n, align 4 br label %whilecond whilecond: ; preds = %while, %body - %n.0 = phi i32 [ %0, %body ], [ %add, %while ] - %less = icmp slt i32 %n.0, 3 - br i1 %less, label %while, label %whilecond3 + %n1 = load i32, ptr %n, align 4 + %less = icmp slt i32 %n1, 3 + br i1 %less, label %while, label %afterwhile while: ; preds = %whilecond - %add = add i32 %n.0, 1 + %n2 = load i32, ptr %n, align 4 + %add = add i32 %n2, 1 + store i32 %add, ptr %n, align 4 br label %whilecond -whilecond3: ; preds = %whilecond +afterwhile: ; preds = %whilecond + br label %whilecond3 + +whilecond3: ; preds = %afterwhile + %n6 = load i32, ptr %n, align 4 + %less7 = icmp slt i32 %n6, 4 + br i1 %less7, label %while4, label %afterwhile5 + +while4: ; preds = %whilecond3 + br label %afterwhile5 + +afterwhile5: ; preds = %while4, %whilecond3 ret void } @@ -30,5 +44,4 @@ whilecond3: ; preds = %whilecond ; ModuleID = 'group_name' source_filename = "group_name" -@global_type_lookup_table = global [1 x i64*] zeroinitializer - +@global_type_lookup_table = global [1 x ptr] zeroinitializer diff --git a/pixi.lock b/pixi.lock index 5b8ea3cbc..f80037a03 100644 --- a/pixi.lock +++ b/pixi.lock @@ -35,31 +35,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cargo-nextest-0.9.143-hb17b654_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.4.2-hff7ac6b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-16.1.0-h5fcb69b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.21.0-heca4667_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.21.0-hcf29cc6_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.1.0-ha9f2e26_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.1.0-h69a702a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.1.0-he0feb66_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h0cb94f2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-h474f4eb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-16.1.0-hf2715c6_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.1.0-h934c35e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-16.1.0-hdf11a46_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.4-hbdfff7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.4-ha7a5771_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-devel-2.15.4-ha7a5771_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lld-14.0.6-h07fd6de_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-14.0.6-hcd5def8_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmdev-14.0.6-hcd5def8_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lld-22.1.8-h5985d43_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-22-22.1.8-h7399f5f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-22.1.8-h7148c6a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmdev-22.1.8-h7399f5f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mdbook-0.5.4-hb17b654_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ninja-1.13.2-h171cf75_1.conda @@ -77,7 +78,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-64-14.0.6-hab78ec2_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt22_osx-64-22.1.8-h8d5f570_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/macosx_deployment_target_osx-64-15.5-h6502127_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-apple-darwin-1.97.1-h38e4360_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h374f1ed_10.conda @@ -85,30 +86,31 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/cargo-audit-0.22.1-ha9c3995_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cargo-llvm-cov-0.8.7-h009cd8f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cargo-nextest-0.9.143-h19f9e61_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-14-14.0.6-default_hdb78580_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-14.0.6-h694c41f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-14.0.6-default_hdb78580_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.4.2-haddf760_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-14.0.6-h613da45_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-py313hbf1d544_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-22.1.8-h694c41f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt22-22.1.8-h8c1e6b9_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h69064fd_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp14-14.0.6-default_hdb78580_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.21.0-h7dba2e6_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcompiler-rt-22.1.8-h8c1e6b9_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.21.0-h8f0b9e4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.8-h19cb2f5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321hba2e2ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-ha3d0635_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.7.0-h8c408c4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm14-14.0.6-hc8e404f_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h4ae439b_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm22-22.1.8-hd11396f_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libpsl-0.23.1-h7ff43d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hd53bb72_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.52.1-ha3d0635_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.4-h341e563_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.4-h3668fe6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-devel-2.15.4-h3668fe6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/lld-14.0.6-hc20ea95_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-14.0.6-hc8e404f_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/llvmdev-14.0.6-hc8e404f_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/lld-22.1.8-h9313d6c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-22-22.1.8-h36529c3_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-22.1.8-h8c1e6b9_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvmdev-22.1.8-h36529c3_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mdbook-0.5.4-h19f9e61_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ninja-1.13.2-hebe015c_1.conda @@ -119,7 +121,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-hbc1a06c_7.conda osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-14.0.6-h48302dc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt22_osx-arm64-22.1.8-hb8825d9_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/macosx_deployment_target_osx-arm64-15.5-hc5fe401_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-apple-darwin-1.97.1-hf6ec828_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda @@ -127,30 +129,33 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cargo-audit-0.22.1-h6fdd925_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cargo-llvm-cov-0.8.7-h748bcf4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cargo-nextest-0.9.143-h6fdd925_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-14-14.0.6-default_h5dc8d65_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-14.0.6-hce30654_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-14.0.6-default_h610c423_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.4.2-hf91ab31_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-14.0.6-h30b49de_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-22.1.8-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt22-22.1.8-hdb3d66b_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h34f8a20_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp14-14.0.6-default_h5dc8d65_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcompiler-rt-22.1.8-hdb3d66b_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.21.0-hf618e03_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.8-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321h26f1114_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h1a92334_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm14-14.0.6-hd1a9a77_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-he4c29f2_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm22-22.1.8-h759d1ac_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpsl-0.23.1-hdb0c161_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-hbf2880b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.52.1-h1a92334_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.4-heb56d2d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.4-h550178d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-devel-2.15.4-h550178d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lld-14.0.6-h6fc9e18_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-14.0.6-hd1a9a77_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmdev-14.0.6-hd1a9a77_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lld-22.1.8-h98a3de6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-22-22.1.8-h79441dc_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-22.1.8-hdb3d66b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmdev-22.1.8-h79441dc_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mdbook-0.5.4-h6fdd925_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-he64c551_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ninja-1.13.2-h3feff0a_1.conda @@ -173,16 +178,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libllvm14-14.0.6-h97333cc_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libllvm-c22-22.1.8-h830ff33_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libllvm22-22.1.8-h830ff33_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libpsl-0.23.1-h9b16d47_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h734d217_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.52.1-h6a83c73_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.13.9-h741aa76_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.4-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.4-he095d88_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-devel-2.15.4-he095d88_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lld-14.0.6-h3740485_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-14.0.6-hac7d729_4.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvmdev-14.0.6-h97333cc_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lld-22.1.8-he13e66b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-22.1.8-he5be12e_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvmdev-22.1.8-h830ff33_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mdbook-0.5.4-h18a1a76_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.13.2-h477610d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_1.conda @@ -454,20 +462,6 @@ packages: run_exports: {} size: 86474258 timestamp: 1787618763737 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda - sha256: 9f07834f0c546ab14d885ce0366285f61f44e326c0edd1fc63b8294e113ae432 - md5: 72a381cbad04f24b1c2a43ef707f45b4 - depends: - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - libgcc >=14 - license: MIT - license_family: MIT - run_exports: - weak: - - icu >=78.3,<79.0a0 - size: 14459115 - timestamp: 1786545741408 - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda sha256: dd053c96dcb0dcfd59422aefea9d2fe937a190167f34fba7893ec1e10a7e8963 md5: ba55d1b89fd7775e67de8291029b4059 @@ -511,15 +505,14 @@ packages: run_exports: {} size: 745303 timestamp: 1784214507189 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.21.0-heca4667_4.conda - sha256: aff8ef75636d0825ce34911e0bef2f26816e7afd090a9dcb4b9bacab75cbf584 - md5: 3f2fd5617cfacac49c85f6dc63842ea1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.21.0-hcf29cc6_1.conda + sha256: 7d243f45a48f62cb8e3b871dd336137fe0fb90094a191756fb553508837f6338 + md5: 2c1e55d695b11525c760b486ac0be517 depends: - __glibc >=2.17,<3.0.a0 - krb5 >=1.22.2,<1.23.0a0 - libgcc >=14 - libnghttp2 >=1.68.1,<2.0a0 - - libpsl >=0.23.0,<0.24.0a0 - libssh2 >=1.11.1,<2.0a0 - libzlib >=1.3.2,<2.0a0 - openssl >=3.5.7,<4.0a0 @@ -529,8 +522,8 @@ packages: run_exports: weak: - libcurl >=8.21.0,<9.0a0 - size: 480565 - timestamp: 1785500108494 + size: 478914 + timestamp: 1782802520033 - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda sha256: 6473eb8caf2aae830f37caa93db9b26dddf7ac84b63229e8bf7fc0e5c3ab95b0 md5: 50708d3b951d0f8e2d7f2df5b5edc040 @@ -613,18 +606,6 @@ packages: run_exports: {} size: 1058083 timestamp: 1787618680111 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.1.0-h69a702a_1.conda - sha256: 225275c562337a1cd61705da0ee4235dde7bba7504de1c34b74c894adb2b0eee - md5: 7ed870c014a6f23c7dfafda53d2763a9 - depends: - - libgcc 16.1.0 ha9f2e26_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - run_exports: - strong: - - libgcc - size: 28210 - timestamp: 1785375440733 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.1.0-he0feb66_1.conda sha256: 62cb599ad0539d99386515326d9d5e8f51f75a60c69c2131b21df76edf35bd89 md5: 88f2d91cb1533194c323534253094d23 @@ -649,20 +630,36 @@ packages: - _openmp_mutex >=4.5 size: 639968 timestamp: 1787618616266 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda - sha256: 225cc7c3b20ac1db1bdb37fa18c95bf8aecef4388e984ab2f7540a9f4382106a - md5: 73301c133ded2bf71906aa2104edae8b +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h0cb94f2_3.conda + sha256: f943117edb9cd4d9c61cc972eee5a34291dc55ea7a6e9e38da104995841cbcb6 + md5: f92233bf33e24a25668bb2119e2c51f9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: LGPL-2.1-only + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 789471 + timestamp: 1787033836207 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-h474f4eb_2.conda + sha256: cfc90781f703b8b8cc35694d46c9a200e3cf66657f55517f8b1ec1f672c42752 + md5: d70196b03134e3bab985d9f5554fb38b depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - libxml2 + - libxml2-16 >=2.15.3 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: weak: - - libllvm14 >=14.0.6,<14.1.0a0 - size: 31484415 - timestamp: 1690557554081 + - libllvm22 >=22.1.8,<22.2.0a0 + size: 44652037 + timestamp: 1787288437518 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda sha256: 9787df8c22a59c9a70d3e5a10db9ad663485e75e9ccc3f09bd092cb7b95e0dab md5: 1390b7c5ac0b1d8e447bc5efa6d3c8c2 @@ -696,21 +693,6 @@ packages: - libnghttp2 >=1.68.1,<2.0a0 size: 663344 timestamp: 1773854035739 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda - sha256: 09e8effdc89bc5d021349318d32b85594f5b8d8e3ab8f90a85b81f8fe695a566 - md5: 77be60417aa572afcb48cbe0f967401d - depends: - - libstdcxx >=15 - - libgcc >=15 - - __glibc >=2.17,<3.0.a0 - - icu >=78.3,<79.0a0 - license: MIT - license_family: MIT - run_exports: - weak: - - libpsl >=0.23.1,<0.24.0a0 - size: 72519 - timestamp: 1786970753847 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-16.1.0-hf2715c6_1.conda sha256: 85662ecadd3961bc96cbcc38dbc024a768cc35932c8440677ed028ea6322c36c md5: abd77210925872ee084672cf5be1d491 @@ -780,18 +762,6 @@ packages: run_exports: {} size: 6613148 timestamp: 1787618704262 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-16.1.0-hdf11a46_1.conda - sha256: 2876ca4463d1b394eb969ce4a84d1620aa63fb8202a6397837d1e45ec76c1208 - md5: c94f06123272d8e129d4acf3a25ffb35 - depends: - - libstdcxx 16.1.0 h934c35e_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - run_exports: - strong: - - libstdcxx - size: 28253 - timestamp: 1785375500257 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda sha256: 67761d0206f84140047a367eaf9befe03a7e157a29ee25aee0047b40801cc6b6 md5: 01c4ed87826af55996768af6dbc936b4 @@ -805,6 +775,64 @@ packages: - libuv >=1.52.1,<2.0a0 size: 420040 timestamp: 1785914567661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.4-hbdfff7e_0.conda + sha256: b6f96287c408269f5067bb4f7a61693ff5c856152902362964d9807152b9c146 + md5: 176fa262c40e1141e9f364d3e4783795 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - icu <0.0a0 + - libxml2 2.15.4 + license: MIT + license_family: MIT + run_exports: {} + size: 565717 + timestamp: 1788635209625 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.4-ha7a5771_0.conda + sha256: db52c038430a508656530fc7b5650ae3e2629875693a6a256cc48dec203f8bfe + md5: c322ae4591dfe866b2a9b1e8537fe805 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.4 hbdfff7e_0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - icu <0.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 46952 + timestamp: 1788635214834 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-devel-2.15.4-ha7a5771_0.conda + sha256: d91b9ed02cd1c5b6c376067d5d6e8a1f249ded7b78e4228fca9c19863a3943f2 + md5: c6f3dc33e581270da23d8688e50411bd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2 2.15.4 ha7a5771_0 + - libxml2-16 2.15.4 hbdfff7e_0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - icu <0.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 80664 + timestamp: 1788635219543 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda sha256: eb8a0db0aa570124f7d2a93d7c7f596e3390df5e047818d873baad32985fc736 md5: 0de0122d9570a8ab637c6b73db268389 @@ -819,58 +847,78 @@ packages: - libzlib >=1.3.2,<2.0a0 size: 63713 timestamp: 1785362952714 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lld-14.0.6-h07fd6de_1.conda - sha256: 485bb312335a651fdab913ece9dbfdb3f85e2e62934a0d035fe76d8420129766 - md5: b6257949dcbccab8f27e45bc6213dd43 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lld-22.1.8-h5985d43_1.conda + sha256: bcc18b52452ca1516b2ab77fe314669deb76e22eee2998b3433111a7e1d6b992 + md5: 6e91a99ddbc769d522f2564adaf72b48 depends: - - libgcc-ng >=12 - - libllvm14 >=14.0.6,<14.1.0a0 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libllvm22 >=22.1.8,<22.2.0a0 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 constrains: - - llvm ==14.0.6 + - llvm ==22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: APACHE run_exports: {} - size: 2972148 - timestamp: 1684384901275 -- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-14.0.6-hcd5def8_4.conda - sha256: 81e5a38c9ea9229d9db5a47d06e19e4bbf6110717998eb8316ec1b7f48128f76 - md5: 6281c129cd6fd3f0acda9c67681b0021 - depends: - - libgcc-ng >=12 - - libllvm14 14.0.6 hcd5def8_4 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - constrains: - - llvmdev 14.0.6 - - clang 14.0.6.* - - clang-tools 14.0.6.* - - llvm 14.0.6.* + size: 11785384 + timestamp: 1787520011288 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-22-22.1.8-h7399f5f_2.conda + sha256: 17d4ac1d341f748b92befd48a565040cb19c91dfcd9a487fd9f01c196de988ed + md5: 9258a076efb97baf34684a58bb5c085e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libllvm22 22.1.8 h474f4eb_2 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: {} - size: 14833868 - timestamp: 1690557676437 -- conda: https://conda.anaconda.org/conda-forge/linux-64/llvmdev-14.0.6-hcd5def8_4.conda - sha256: 2f76a3c647dacfa361b8733a5a880dc9e83f96a30b0b026f99b319cd25cb5e3a - md5: cdf305b971b0bba3619ba7db11f0e15b - depends: - - libgcc-ng >=12 - - libllvm14 14.0.6 hcd5def8_4 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - - llvm-tools 14.0.6 hcd5def8_4 - constrains: - - clang 14.0.6.* - - clang-tools 14.0.6.* - - llvm 14.0.6.* - - llvm-tools 14.0.6.* + size: 25578902 + timestamp: 1787288573116 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-22.1.8-h7148c6a_2.conda + sha256: 24d9ffcaab6aadbba036b807202a8b0f538f92927c7e95fbf7b8783796ee4c43 + md5: 2963ffab65d2a6485af223578e75d2da + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libllvm22 22.1.8 h474f4eb_2 + - libstdcxx >=15 + - llvm-tools-22 22.1.8 h7399f5f_2 + constrains: + - clang 22.1.8 + - clang-tools 22.1.8 + - llvm 22.1.8 + - llvmdev 22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: {} - size: 48866788 - timestamp: 1690557731509 + size: 51614 + timestamp: 1787288636935 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvmdev-22.1.8-h7399f5f_2.conda + sha256: 8298b12cf933c0e27d444a6b8ec17090ee7925a58cf5c4b45a2b4e3c48cff408 + md5: 2164739d4219c44229a45e662c143c67 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libllvm22 22.1.8 h474f4eb_2 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + - llvm-tools 22.1.8 h7148c6a_2 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - clang 22.1.8 + - clang-tools 22.1.8 + - llvm 22.1.8 + - llvm-tools 22.1.8 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + run_exports: {} + size: 62185155 + timestamp: 1787288653732 - conda: https://conda.anaconda.org/conda-forge/linux-64/mdbook-0.5.4-hb17b654_0.conda sha256: 905444801cffce938ca6db76673484d7612e2e16846586ad7056c8772d8fb51f md5: 82d41f97c6aac1abb0006c5752704c8a @@ -996,32 +1044,26 @@ packages: run_exports: {} size: 131780 timestamp: 1784754889428 -- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-64-14.0.6-hab78ec2_0.tar.bz2 - sha256: a8351d6a47a8a2cd8267862d36ad5a06f16955c68111140b8b147ee126433712 - md5: 4fdde3f4ed31722a1c811723f5db82f0 - depends: - - clang 14.0.6.* - - clangxx 14.0.6.* +- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt22_osx-64-22.1.8-h8d5f570_2.conda + sha256: e36bc782134229b2384c4ede85a3a69123434ae4cfdefbef7181b66c5de12e7e + md5: 1207b706fac598b4e80588498d0fbae0 constrains: - - compiler-rt 14.0.6 + - compiler-rt >=9.0.1 license: Apache-2.0 WITH LLVM-exception license_family: APACHE run_exports: {} - size: 15896681 - timestamp: 1667980403834 -- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-14.0.6-h48302dc_0.tar.bz2 - sha256: f9f63e8779ff31368cc92ee668308c8e7e974f68457f62148c5663aa0136a42d - md5: ebcb473032038866101b70f9f270a9a2 - depends: - - clang 14.0.6.* - - clangxx 14.0.6.* + size: 10543473 + timestamp: 1787295552414 +- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt22_osx-arm64-22.1.8-hb8825d9_2.conda + sha256: 016121f654e8052edf0e9912ab2f430c2d6ac93adc8cfd484318de6a656cd0c9 + md5: e603f604aa1e281db38ff849cc4e4c5d constrains: - - compiler-rt 14.0.6 + - compiler-rt >=9.0.1 license: Apache-2.0 WITH LLVM-exception license_family: APACHE run_exports: {} - size: 15828315 - timestamp: 1667980533329 + size: 10565200 + timestamp: 1787293602816 - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda sha256: 41557eeadf641de6aeae49486cef30d02a6912d8da98585d687894afd65b356a md5: 86d9cba083cd041bfbf242a01a7a1999 @@ -1222,48 +1264,6 @@ packages: run_exports: {} size: 6985066 timestamp: 1785902491652 -- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-14-14.0.6-default_hdb78580_1.conda - sha256: a8ef6982c0da903e31215425219693a45e39b47189018cf479b03290764793cd - md5: ce19ccaee311132f299ffd0eec9c4581 - depends: - - libclang-cpp14 14.0.6 default_hdb78580_1 - - libcxx >=15.0.7 - - libllvm14 >=14.0.6,<14.1.0a0 - constrains: - - clangxx 14.0.6 - - llvm-tools 14.0.6 - - clangdev 14.0.6 - - clang-tools 14.0.6 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - run_exports: {} - size: 1029529 - timestamp: 1684412293094 -- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-14.0.6-h694c41f_1.conda - sha256: f757328f9924d93b09aa16423160b6ebbe28dac7508cce76d50795db4d1d39c9 - md5: 1305da4c85c7eaa2e90fa14efc35f591 - depends: - - clang-14 14.0.6 default_hdb78580_1 - constrains: - - clang-tools 14.0.6.* - - llvm 14.0.6.* - - llvm-tools 14.0.6.* - - llvmdev 14.0.6.* - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - run_exports: {} - size: 133085 - timestamp: 1684412402322 -- conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-14.0.6-default_hdb78580_1.conda - sha256: 6c5ed5942dc9627926741e001a042f2a8dc31e221c0a7e4bcbbe35cd0e6681b8 - md5: cc2ac1c5c838cb0edd65258da7c38294 - depends: - - clang 14.0.6 h694c41f_1 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - run_exports: {} - size: 133262 - timestamp: 1684412419561 - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.4.2-haddf760_1.conda sha256: 8b9a204a7025b01bd22e4dbb927166efba0660e238a160e830cad582d8b4bc89 md5: d163a68be10be298cdcb15430df33cb9 @@ -1284,30 +1284,30 @@ packages: run_exports: {} size: 21903913 timestamp: 1786961216995 -- conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-14.0.6-h613da45_0.tar.bz2 - sha256: 2dea3b5efea587329320c70a335fa5666c3a814e70e76464734b90a40b70e8a8 - md5: b44e0625319f9933e584dc3b96f5baf7 +- conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt-22.1.8-h694c41f_2.conda + sha256: d639bbe88fbc6e18a706b2b5ab45a755cc64dc0f531ef8351723c0ce98e10896 + md5: 52c798da0612b52190100377ad64ae25 depends: - - clang 14.0.6.* - - clangxx 14.0.6.* - - compiler-rt_osx-64 14.0.6.* + - compiler-rt22 22.1.8 h8c1e6b9_2 + - libcompiler-rt 22.1.8 h8c1e6b9_2 + constrains: + - clang 22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: APACHE run_exports: {} - size: 85454 - timestamp: 1667980424247 -- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-py313hbf1d544_2.conda - sha256: 3abd86f3441f143b6b3203c92ae0d88dd8396a8857940af468f1fab854cdae57 - md5: f13f4740c18b562bf2662d494bad6099 + size: 16565 + timestamp: 1787295700472 +- conda: https://conda.anaconda.org/conda-forge/osx-64/compiler-rt22-22.1.8-h8c1e6b9_2.conda + sha256: a0e169e8661682c4cc06668fd6e02a3fa025924540359778e88256d58dd6ad7a + md5: 95596e37260b548959fc678aa8bccd0c depends: - __osx >=11.0 - license: MIT - license_family: MIT - run_exports: - weak: - - icu >=78.3,<79.0a0 - size: 14223209 - timestamp: 1786545868538 + - compiler-rt22_osx-64 22.1.8.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + run_exports: {} + size: 100010 + timestamp: 1787295694871 - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h69064fd_2.conda sha256: f41875ab241c4862b6bdb8316e5f4268ee8ff9e9115770d3d30a02028957c7c1 md5: da54bd0f3b96eb0d7663b3db01862a19 @@ -1324,27 +1324,27 @@ packages: - krb5 >=1.22.2,<1.23.0a0 size: 1199337 timestamp: 1786762832264 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp14-14.0.6-default_hdb78580_1.conda - sha256: 5720d4662bd032a1dc07d0ae1368fa5e454c938545bdd93f78dacd25b9f597d3 - md5: 9a235664bf087994aa3acc1a60614964 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcompiler-rt-22.1.8-h8c1e6b9_2.conda + sha256: bc8bb814e26cce74498cabf5505f8770b3ee240723bf7632a786e3014133f17c + md5: fd0d96af9a60eff79f46bbfbf7c52653 depends: - - libcxx >=15.0.7 - - libllvm14 >=14.0.6,<14.1.0a0 + - __osx >=11.0 + constrains: + - compiler-rt >=9.0.1 license: Apache-2.0 WITH LLVM-exception - license_family: Apache + license_family: APACHE run_exports: weak: - - libclang-cpp14 >=14.0.6,<14.1.0a0 - size: 11897758 - timestamp: 1684412176370 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.21.0-h7dba2e6_4.conda - sha256: 5a47abbbe5938b5e87cd80bfcb002a3b33babe975ef7bcb2076e92439327d160 - md5: c7ea54c4b80f207ece50ba7008e115b2 + - libcompiler-rt >=22.1.8 + size: 1367906 + timestamp: 1787295671883 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.21.0-h8f0b9e4_1.conda + sha256: 33ba88482d9607db195d2b5920e29f4d2744a4780fbbfc47f2e58e4b59a5530c + md5: 83fdd27f6406225d15e4f44b5b45aa96 depends: - __osx >=11.0 - krb5 >=1.22.2,<1.23.0a0 - libnghttp2 >=1.68.1,<2.0a0 - - libpsl >=0.23.0,<0.24.0a0 - libssh2 >=1.11.1,<2.0a0 - libzlib >=1.3.2,<2.0a0 - openssl >=3.5.7,<4.0a0 @@ -1354,8 +1354,8 @@ packages: run_exports: weak: - libcurl >=8.21.0,<9.0a0 - size: 431686 - timestamp: 1785500704757 + size: 430084 + timestamp: 1782803235400 - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.8-h19cb2f5_0.conda sha256: 57ee997f1f800cf38abc743c0f0a9ddfe6a101c697c35510452ce6f4ddf96361 md5: 0f600157f28fc7bc9549ecafdfa5bc12 @@ -1416,19 +1416,34 @@ packages: - libffi >=3.7.0,<3.8.0a0 size: 61307 timestamp: 1783521470318 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm14-14.0.6-hc8e404f_4.conda - sha256: 0df3902a300cfe092425f86144d5e00ef67be3cd1cc89fd63084d45262a772ad - md5: ed06753e2ba7c66ed0ca7f19578fcb68 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h4ae439b_3.conda + sha256: 2389e03a58ed0f5e8f2469eb4d4ba80d0af378b38854ae5eee65e5b641244082 + md5: 9fd2f77288f43e462ccc6b0e5f018c89 + depends: + - __osx >=11.0 + license: LGPL-2.1-only + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 736150 + timestamp: 1787034707041 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm22-22.1.8-hd11396f_2.conda + sha256: f74d914951ce3dbbe551003eefad9aaf091f02b9e36ec1e6a7ff299304eb40a4 + md5: b9d14a333c2c25bbadfb21e52f882f89 depends: - - libcxx >=15 - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=11.0 + - libcxx >=21 + - libxml2 + - libxml2-16 >=2.15.3 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: weak: - - libllvm14 >=14.0.6,<14.1.0a0 - size: 22467131 - timestamp: 1690563140552 + - libllvm22 >=22.1.8,<22.2.0a0 + size: 31955677 + timestamp: 1787289001404 - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_1.conda sha256: 7915dac7c71c208e40e716e2f6d3eff41a8d5584e0e7c2d46f9bf9bd5f9aa739 md5: daf49067580fbfeae3ac7f9535400494 @@ -1460,20 +1475,6 @@ packages: - libnghttp2 >=1.68.1,<2.0a0 size: 606749 timestamp: 1773854765508 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libpsl-0.23.1-h7ff43d8_1.conda - sha256: 6ee1849c23ddd4de76bacdcf88d4d16dc28fc10aa7c3431f859ef392da6936b8 - md5: 4cd9cae1ac1aa63d8f760fe127b42685 - depends: - - libcxx >=21 - - __osx >=11.0 - - icu >=78.3,<79.0a0 - license: MIT - license_family: MIT - run_exports: - weak: - - libpsl >=0.23.1,<0.24.0a0 - size: 72605 - timestamp: 1786970907332 - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hd53bb72_1.conda sha256: ed0db46844a548f4ca57dad0b3abb92b37050d7f75ab1ef08fbed9d23f06b2de md5: cb57b979974ef5b8a4526a8e5c8195b9 @@ -1500,6 +1501,61 @@ packages: - libuv >=1.52.1,<2.0a0 size: 128560 timestamp: 1785914631885 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.4-h341e563_0.conda + sha256: bc284057b85e4a0ecc158598d81c3081fa58e9111969a05d3056ab7a8442c837 + md5: 73b097ecff26dd04ebb0133f12e6d768 + depends: + - __osx >=11.0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - icu <0.0a0 + - libxml2 2.15.4 + license: MIT + license_family: MIT + run_exports: {} + size: 498699 + timestamp: 1788635665366 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.4-h3668fe6_0.conda + sha256: 9cf91223637981568c8fbd5c4dbbc1e6137592e919828554ae436bf259aa91d0 + md5: 49f8bc2da3e704b8520a0be94e43d360 + depends: + - __osx >=11.0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.4 h341e563_0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - icu <0.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 41401 + timestamp: 1788635683771 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-devel-2.15.4-h3668fe6_0.conda + sha256: 3870a7f372dfb6c0211c1bb4ae41d81d0dac129fe56c99c09045f8517610b858 + md5: 98fbd0a13e7bac8d1af90a3f8daa7783 + depends: + - __osx >=11.0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2 2.15.4 h3668fe6_0 + - libxml2-16 2.15.4 h341e563_0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - icu <0.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 80272 + timestamp: 1788635697029 - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_3.conda sha256: b2dba286dd6632292b12296e761193b5ef9fb0eaeecaa481f5ba9af72c0c18e1 md5: 7d3fa28263bb7f8ea32db11f570a5bb6 @@ -1514,53 +1570,73 @@ packages: - libzlib >=1.3.2,<2.0a0 size: 58993 timestamp: 1785276808631 -- conda: https://conda.anaconda.org/conda-forge/osx-64/lld-14.0.6-hc20ea95_1.conda - sha256: b44406ad4ef39c9af76ade5598f78a552ea9aeea66a571550440b6432f5e7252 - md5: 8ae3bdc5cd3ae2c46713810467efa319 +- conda: https://conda.anaconda.org/conda-forge/osx-64/lld-22.1.8-h9313d6c_1.conda + sha256: bf6a7b68eefacbc412b5cb9e810f9629e6306108bd4d3775822a2b7290aa9f18 + md5: 96e54e22e20ff90e15e1889453628023 depends: - - libllvm14 >=14.0.6,<14.1.0a0 - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=11.0 + - libcxx >=21.1.8 + - libllvm22 >=22.1.8,<22.2.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 constrains: - - llvm ==14.0.6 + - llvm ==22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: APACHE run_exports: {} - size: 2094606 - timestamp: 1684385851532 -- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-14.0.6-hc8e404f_4.conda - sha256: bbd455bb43d23a2daaa20d6805b4764b97c7a79ca8dfa80dc95c3a0b2155cbbc - md5: a55c7b960756f104bcbf5bfcd5c8890a + size: 5272130 + timestamp: 1787520385115 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-22-22.1.8-h36529c3_2.conda + sha256: 06f7072f26754772e80d468011fde943631580e5990233bffa7f0fad67213ffd + md5: e6907104d79f467e3e02d641dcfbc338 + depends: + - __osx >=11.0 + - libcxx >=21 + - libllvm22 22.1.8 hd11396f_2 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + run_exports: {} + size: 19079341 + timestamp: 1787289254893 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-22.1.8-h8c1e6b9_2.conda + sha256: 54e21ddb2d572b781083819b1ccfb32af409dcb1f30d639ea97f30835c7e9bf0 + md5: 7c104c8231927d82ca4895f4940ae8e9 depends: - - libllvm14 14.0.6 hc8e404f_4 - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=11.0 + - libllvm22 22.1.8 hd11396f_2 + - llvm-tools-22 22.1.8 h36529c3_2 constrains: - - llvmdev 14.0.6 - - clang 14.0.6.* - - clang-tools 14.0.6.* - - llvm 14.0.6.* + - clang 22.1.8 + - clang-tools 22.1.8 + - llvm 22.1.8 + - llvmdev 22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: {} - size: 11207189 - timestamp: 1690563328190 -- conda: https://conda.anaconda.org/conda-forge/osx-64/llvmdev-14.0.6-hc8e404f_4.conda - sha256: a5cccccbf5f0dd86f8246dcb960fb17422338ebc4d478db94aa49590ca8f2420 - md5: 9b099e5f0507bf2e04d25bb2a2017b6e - depends: - - libcxx >=15 - - libllvm14 14.0.6 hc8e404f_4 - - libzlib >=1.2.13,<2.0.0a0 - - llvm-tools 14.0.6 hc8e404f_4 - constrains: - - clang 14.0.6.* - - clang-tools 14.0.6.* - - llvm 14.0.6.* - - llvm-tools 14.0.6.* + size: 51661 + timestamp: 1787289337082 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvmdev-22.1.8-h36529c3_2.conda + sha256: 407e8a61801779e9c9626ac11793c314450c63b0cfcd3937baca2cad05084cce + md5: 8432e354b6d3e2a38dc9bd303af09709 + depends: + - __osx >=11.0 + - libcxx >=21 + - libllvm22 22.1.8 hd11396f_2 + - libzlib >=1.3.2,<2.0a0 + - llvm-tools 22.1.8 h8c1e6b9_2 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - clang 22.1.8 + - clang-tools 22.1.8 + - llvm 22.1.8 + - llvm-tools 22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: {} - size: 36318249 - timestamp: 1690563524375 + size: 46234310 + timestamp: 1787289388426 - conda: https://conda.anaconda.org/conda-forge/osx-64/mdbook-0.5.4-h19f9e61_0.conda sha256: eb346cd957c55aa5f955c7650d16eda293f34805682937b6d94380a91a2f3ff9 md5: d8cb61e668eb83e93159cc9eb2a49c77 @@ -1719,48 +1795,6 @@ packages: run_exports: {} size: 6504284 timestamp: 1785902364923 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-14-14.0.6-default_h5dc8d65_1.conda - sha256: b674c9ff31b9bbf225b6c62e0b8a2ca45fe70ef78ad5ca22a79f6c8e41f37306 - md5: aafcdf5d9f0b5a00540469242d7ab67b - depends: - - libclang-cpp14 14.0.6 default_h5dc8d65_1 - - libcxx >=15.0.7 - - libllvm14 >=14.0.6,<14.1.0a0 - constrains: - - clangxx 14.0.6 - - llvm-tools 14.0.6 - - clang-tools 14.0.6 - - clangdev 14.0.6 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - run_exports: {} - size: 1028007 - timestamp: 1684413668339 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-14.0.6-hce30654_1.conda - sha256: da28397f5ab383d9cdcc0d3ed9b3e51a6b2a73edbb1867e13120e2f137eeb69e - md5: 74394af220230cb88970984c086d2cba - depends: - - clang-14 14.0.6 default_h5dc8d65_1 - constrains: - - clang-tools 14.0.6.* - - llvm 14.0.6.* - - llvm-tools 14.0.6.* - - llvmdev 14.0.6.* - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - run_exports: {} - size: 133297 - timestamp: 1684413800824 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-14.0.6-default_h610c423_1.conda - sha256: abf47478baa7c0d183b43150ca600630dd5ce6762890e0bca925e05bd3247c6b - md5: a9b37a157fdc4a3584aa7f5fb69d3a1a - depends: - - clang 14.0.6 hce30654_1 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - run_exports: {} - size: 133461 - timestamp: 1684413825082 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.4.2-hf91ab31_1.conda sha256: 15e639e788fac8a1d68ff362e25fda5a9501064051c63be95404ecd42eece398 md5: db71b4b301e835d159db981ae1c8398d @@ -1781,18 +1815,30 @@ packages: run_exports: {} size: 20205878 timestamp: 1786961328614 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-14.0.6-h30b49de_0.tar.bz2 - sha256: 266578ae49450e6b4a778b454f8e7fd988676dd9146bb186093066ab1589ba06 - md5: b88a5457fa7def557e5902046ab56b6e +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-22.1.8-hce30654_2.conda + sha256: 28c01956aefbe38a8bddde58bb2398789fd580ffb341a12c54f44a542fa1a358 + md5: fa14e650717aac340bcc3251bab8117b depends: - - clang 14.0.6.* - - clangxx 14.0.6.* - - compiler-rt_osx-arm64 14.0.6.* + - compiler-rt22 22.1.8 hdb3d66b_2 + - libcompiler-rt 22.1.8 hdb3d66b_2 + constrains: + - clang 22.1.8 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + run_exports: {} + size: 16634 + timestamp: 1787293624982 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt22-22.1.8-hdb3d66b_2.conda + sha256: cfa490c27082b9aca7a087548c2608daf5af2644f0eb8345fba7d4baa45fd03d + md5: da9362e9de3e1f80c9786a268ff22bfa + depends: + - __osx >=11.0 + - compiler-rt22_osx-arm64 22.1.8.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE run_exports: {} - size: 85467 - timestamp: 1667980555472 + size: 99807 + timestamp: 1787293624048 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda sha256: 6cdb5dee54c72e56ab189fb3ad33cb28533553d42590e7e831160248f4416a43 md5: a5efc0b42bb8b42e97d0a29ae3e3c187 @@ -1821,19 +1867,20 @@ packages: - krb5 >=1.22.2,<1.23.0a0 size: 1165740 timestamp: 1786762145768 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp14-14.0.6-default_h5dc8d65_1.conda - sha256: 9cb083dae695cda715e280c2cadd08b625ecc5842f99fb575901990b0e60bf7c - md5: 7caa562f3551c16cd82d0147640091f8 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcompiler-rt-22.1.8-hdb3d66b_2.conda + sha256: ed70856638465fa1e3dbce41b7512425a63789774368e4b9878249517daeecad + md5: 1ea9adef104f7304dc445153f1f19274 depends: - - libcxx >=15.0.7 - - libllvm14 >=14.0.6,<14.1.0a0 + - __osx >=11.0 + constrains: + - compiler-rt >=9.0.1 license: Apache-2.0 WITH LLVM-exception - license_family: Apache + license_family: APACHE run_exports: weak: - - libclang-cpp14 >=14.0.6,<14.1.0a0 - size: 10930694 - timestamp: 1684413524265 + - libcompiler-rt >=22.1.8 + size: 1374400 + timestamp: 1787293619574 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.21.0-hf618e03_4.conda sha256: d25be36712d7f854a5f93513b9fbf1b0ee3219975b7fef4a3ee071b021b10167 md5: 66cf9c5003ee81ecdb0dc9f9df17bbe5 @@ -1913,19 +1960,34 @@ packages: - libffi >=3.7.0,<3.8.0a0 size: 43734 timestamp: 1783521647536 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm14-14.0.6-hd1a9a77_4.conda - sha256: 6f603914fe8633a615f0d2f1383978eb279eeb552079a78449c9fbb43f22a349 - md5: 9f3dce5d26ea56a9000cd74c034582bd +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-he4c29f2_3.conda + sha256: 689a14968267f2f97c07112fca5636e7d756036b9aee969911267c20bd3eea1f + md5: 17f4744c0873e9f77ac9b5cd0a27c187 depends: - - libcxx >=15 - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=11.0 + license: LGPL-2.1-only + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 750816 + timestamp: 1787033961086 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm22-22.1.8-h759d1ac_2.conda + sha256: 0d9f5b0d13e3b6b94132ebe5ce79edbd7790e089249852ce3e061888f1b0a0c5 + md5: 6f1791ed2becb128eb25d6819fea99b6 + depends: + - __osx >=11.0 + - libcxx >=21 + - libxml2 + - libxml2-16 >=2.15.3 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: weak: - - libllvm14 >=14.0.6,<14.1.0a0 - size: 20571387 - timestamp: 1690559110016 + - libllvm22 >=22.1.8,<22.2.0a0 + size: 30239322 + timestamp: 1787282732568 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda sha256: 23d0630046a3e8b164d8f80f2b74ed2605af2e7050ab9913018056402fae4311 md5: 8ab10323068b107661a4b9a4af84f3b5 @@ -1996,6 +2058,59 @@ packages: - libuv >=1.52.1,<2.0a0 size: 122729 timestamp: 1785914645797 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.4-heb56d2d_0.conda + sha256: 8a26f7c94ab849c1930da36c298f4b82e892382b70ae865cd7274188d9d783e2 + md5: b40633f711a5eb8617917e0e944b9965 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.4 + license: MIT + license_family: MIT + run_exports: {} + size: 469299 + timestamp: 1788635201153 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.4-h550178d_0.conda + sha256: 81217fcd4d4abdc69ee63cdb9cdb22e05a20b9ba7a76f596579914a838fe5960 + md5: 4b97a34d06740b578c32deba195daf5a + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.4 heb56d2d_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 41375 + timestamp: 1788635206084 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-devel-2.15.4-h550178d_0.conda + sha256: bf409a8a6c776479469de85eb25abbb35e750ef5b880fdbdcf3e2158255f6ba5 + md5: df2f9521a1b80a859d6d329dba7df2a0 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2 2.15.4 h550178d_0 + - libxml2-16 2.15.4 heb56d2d_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 80435 + timestamp: 1788635210248 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda sha256: a18fa5d5bac452401459f966cf0d872224e8080c4ff93c77e168d43ab42ef9d7 md5: f39288f0ea63ae962e1a2e4f355a0d75 @@ -2010,53 +2125,73 @@ packages: - libzlib >=1.3.2,<2.0a0 size: 47822 timestamp: 1785277049190 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lld-14.0.6-h6fc9e18_1.conda - sha256: dc551e82b54421bed56618f668147b0eedd7d156104551e083f9d8a743892eac - md5: 7411e24d82fed4500f4edda0902820b6 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lld-22.1.8-h98a3de6_1.conda + sha256: 9748f6f3e0d464c0c6965d0cda4ee4647c59d1d7d9850e3394069d495b42b6c4 + md5: e4677c0691b299aea5a481efa9695d07 depends: - - libllvm14 >=14.0.6,<14.1.0a0 - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=11.0 + - libcxx >=21.1.8 + - libllvm22 >=22.1.8,<22.2.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 constrains: - - llvm ==14.0.6 + - llvm ==22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: APACHE run_exports: {} - size: 1993863 - timestamp: 1684386403872 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-14.0.6-hd1a9a77_4.conda - sha256: a15fd9113f3ef412c4eb99363b517d1347ae771271571565ac573e3959151749 - md5: fd0a3b0a22ba6f5ace86ce5b5e26c4c5 + size: 6631619 + timestamp: 1787519842417 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-22-22.1.8-h79441dc_2.conda + sha256: 7034bea200b67b6a1effbf350cb34518786715a2640247f85173d9ee4159ad11 + md5: dffb5b6ba46221e9c287d09721e8ac9f + depends: + - __osx >=11.0 + - libcxx >=21 + - libllvm22 22.1.8 h759d1ac_2 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + run_exports: {} + size: 17968840 + timestamp: 1787282818022 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-22.1.8-hdb3d66b_2.conda + sha256: cf82447e24d3d46d7d17521ee8875eef6132313feda4f8dd2cfac989d5184189 + md5: 0b33be5a03e3f7ac75fdbbde668d8185 depends: - - libllvm14 14.0.6 hd1a9a77_4 - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=11.0 + - libllvm22 22.1.8 h759d1ac_2 + - llvm-tools-22 22.1.8 h79441dc_2 constrains: - - llvmdev 14.0.6 - - clang 14.0.6.* - - clang-tools 14.0.6.* - - llvm 14.0.6.* + - clang 22.1.8 + - clang-tools 22.1.8 + - llvm 22.1.8 + - llvmdev 22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: {} - size: 9776772 - timestamp: 1690559269462 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmdev-14.0.6-hd1a9a77_4.conda - sha256: 04e55e30222d459a0ded3e713b009113855ac66f04237d11ab510f8b4a8b5be3 - md5: 2217acc119bbc460da3c0c547066ba44 - depends: - - libcxx >=15 - - libllvm14 14.0.6 hd1a9a77_4 - - libzlib >=1.2.13,<2.0.0a0 - - llvm-tools 14.0.6 hd1a9a77_4 - constrains: - - clang 14.0.6.* - - clang-tools 14.0.6.* - - llvm 14.0.6.* - - llvm-tools 14.0.6.* + size: 51998 + timestamp: 1787282867589 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmdev-22.1.8-h79441dc_2.conda + sha256: aaa35a96f8927132bd96aa68c994a1cd2d39b02f7f4e640dfc72165f441e7143 + md5: c2372773aa41ab4ba92e53aa58788120 + depends: + - __osx >=11.0 + - libcxx >=21 + - libllvm22 22.1.8 h759d1ac_2 + - libzlib >=1.3.2,<2.0a0 + - llvm-tools 22.1.8 hdb3d66b_2 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - clang 22.1.8 + - clang-tools 22.1.8 + - llvm 22.1.8 + - llvm-tools 22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: {} - size: 34887783 - timestamp: 1690559504884 + size: 45957177 + timestamp: 1787282885488 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mdbook-0.5.4-h6fdd925_0.conda sha256: a901d89a7f9c6684408f2cca7f0895c2010f5e8d16f302f84ff935ae90fd0a1d md5: e2f776a82b6024c3641ecd7efe2718eb @@ -2307,19 +2442,38 @@ packages: - libiconv >=1.18,<2.0a0 size: 696926 timestamp: 1754909290005 -- conda: https://conda.anaconda.org/conda-forge/win-64/libllvm14-14.0.6-h97333cc_4.conda - sha256: 0ed382ff9f19a69c475c7bbbf0e7a0c619d04729980f08be1e18d725cc4a092d - md5: de8d9f8b13721488a3ba2ee87ab03007 +- conda: https://conda.anaconda.org/conda-forge/win-64/libllvm-c22-22.1.8-h830ff33_2.conda + sha256: 192b727dfd77a6880b354a47c5ae36b3b9adf2c9a798e98f36516cb7716f87b3 + md5: 653a9b9ec9842074176c76eaf2c60196 + depends: + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - llvmdev 22.1.8 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + run_exports: + weak: + - libllvm-c22 >=22.1.8,<22.2.0a0 + size: 26788308 + timestamp: 1787281796582 +- conda: https://conda.anaconda.org/conda-forge/win-64/libllvm22-22.1.8-h830ff33_2.conda + sha256: 1ee2a185e53581a7d9a49286aa442bca3b23f51248be22185eb7f5856f9e240c + md5: 0e349771392e86fa41947a3be1df5f30 depends: - - libzlib >=1.2.13,<2.0.0a0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: {} - size: 54865 - timestamp: 1690558621089 + size: 18628 + timestamp: 1787281775615 - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda sha256: d36c4a1e1f80fd08e18a407e03622ff2f34dfdd022da6488ad19603dea19e6d5 md5: 880a0c8549479b198af21ba5dc49b109 @@ -2380,12 +2534,33 @@ packages: - libuv >=1.52.1,<2.0a0 size: 331195 timestamp: 1785914602690 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.13.9-h741aa76_0.conda - sha256: 28ac5bbed11644b9e06241ba1dfdac7e3a99e74b69915d45f646717ad9645ca5 - md5: 333d21ab129d5fa5742225bf1d7557a5 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.4-h3cfd58e_0.conda + sha256: 9fa71cec30425c9cc8eda6af3574af1faf4fefa5e239c9e037b1f778ef3ce8ac + md5: bab5489f4bd38494ffaa83d6ab924c1f depends: + - icu >=78.3,<79.0a0 - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.1,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libxml2 2.15.4 + license: MIT + license_family: MIT + run_exports: {} + size: 515800 + timestamp: 1788635268845 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.4-he095d88_0.conda + sha256: a19bb3821830f6b1281e782844d5dd265f796dfed2e4812b16c9995a8c778c88 + md5: 3ce54d0f8f24dfab99d82414411640aa + depends: + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.4 h3cfd58e_0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 @@ -2393,9 +2568,31 @@ packages: license_family: MIT run_exports: weak: - - libxml2 >=2.13.9,<2.14.0a0 - size: 1521446 - timestamp: 1761766307746 + - libxml2 + - libxml2-16 >=2.15.4 + size: 43845 + timestamp: 1788635276599 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-devel-2.15.4-he095d88_0.conda + sha256: 047e9b29a4489a5c7e13d319232d2f14392d789b3e6ea2cd54ace1fef77f6ecd + md5: d50e00d25a326eb487f9f5540e09b77b + depends: + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2 2.15.4 he095d88_0 + - libxml2-16 2.15.4 h3cfd58e_0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 123569 + timestamp: 1788635283467 - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda sha256: 0629c2cc0404d3bb29d6baa7b4ba62da80797015e86de050db81ea5a07050527 md5: 5d2ff29d465097458cc3ff6569151991 @@ -2412,62 +2609,68 @@ packages: - libzlib >=1.3.2,<2.0a0 size: 58529 timestamp: 1785276664143 -- conda: https://conda.anaconda.org/conda-forge/win-64/lld-14.0.6-h3740485_1.conda - sha256: 5232f99320afcb69d28e980e9eba6ce2a9ab3ad2bf63aab8374776161f8529f4 - md5: 638497bf97bef0669e8630f198d8c835 +- conda: https://conda.anaconda.org/conda-forge/win-64/lld-22.1.8-he13e66b_1.conda + sha256: 1c6d370cbd32f502c1de597538cd216f1a343f19210abe603359b8479b745ddf + md5: 7009f63ffc954b09cf626b5faeb2f59d depends: - - libxml2 >=2.11.3,<2.14.0a0 - - libzlib >=1.2.13,<2.0.0a0 + - libxml2 + - libxml2-16 >=2.15.3 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 constrains: - - llvm ==14.0.6 + - llvm ==22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: APACHE run_exports: {} - size: 98958500 - timestamp: 1684385734920 -- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-14.0.6-hac7d729_4.conda - sha256: b625ebb8ea3697182f00277a9443213a5e51f64974601c166b593caee243d264 - md5: 5d76a3275d10426d5e0d498b9901a7aa + size: 142972417 + timestamp: 1787520438416 +- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-22.1.8-he5be12e_2.conda + sha256: 8212ab34401d9f544260a374332cad984cf7459c87005b992480284d3527ef5a + md5: e83e743d37170c04af83616a11e76261 depends: - - libllvm14 14.0.6 h97333cc_4 - - libxml2 >=2.11.4,<2.14.0a0 - - libzlib >=1.2.13,<2.0.0a0 + - libllvm22 22.1.8 h830ff33_2 + - libxml2 + - libxml2-16 >=2.15.3 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 constrains: - - llvmdev 14.0.6 - - clang 14.0.6.* - - clang-tools 14.0.6.* - - llvm 14.0.6.* + - clang 22.1.8 + - clang-tools 22.1.8 + - llvm 22.1.8 + - llvmdev 22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: {} - size: 274728870 - timestamp: 1690559234354 -- conda: https://conda.anaconda.org/conda-forge/win-64/llvmdev-14.0.6-h97333cc_4.conda - sha256: 396c9d6b36952522c4ca4cae9250976459b1111ec4671d7933e1718fd681630b - md5: 26a47916d84649ddd2db95be1107a418 + size: 268475888 + timestamp: 1787281985959 +- conda: https://conda.anaconda.org/conda-forge/win-64/llvmdev-22.1.8-h830ff33_2.conda + sha256: b8356062bafb48368cba1a6ded3b62d4987452c0f5ee8330833a15d2314269ec + md5: 884728d37939b1134bac6aaa51d1335f depends: - - libllvm14 14.0.6 h97333cc_4 - - libzlib >=1.2.13,<2.0.0a0 - - llvm-tools 14.0.6 hac7d729_4 + - libllvm-c22 22.1.8 h830ff33_2 + - libllvm22 22.1.8 h830ff33_2 + - libzlib >=1.3.2,<2.0a0 + - llvm-tools 22.1.8 he5be12e_2 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 constrains: - - clang 14.0.6.* - - clang-tools 14.0.6.* - - llvm 14.0.6.* - - llvm-tools 14.0.6.* + - clang 22.1.8 + - clang-tools 22.1.8 + - llvm 22.1.8 + - llvm-tools 22.1.8 license: Apache-2.0 WITH LLVM-exception license_family: Apache run_exports: {} - size: 83284043 - timestamp: 1690560165500 + size: 105323112 + timestamp: 1787282636982 - conda: https://conda.anaconda.org/conda-forge/win-64/mdbook-0.5.4-h18a1a76_0.conda sha256: 127c6463bef6f37ae9bd4b8bf42d2f8c542151271b9ba32c9022ff29363050a5 md5: 01fb9caa64f57f078220aff0c348b45d diff --git a/pixi.toml b/pixi.toml index 48bfa150b..cba35d994 100644 --- a/pixi.toml +++ b/pixi.toml @@ -5,9 +5,10 @@ channels = ["conda-forge"] platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] [dependencies] -llvmdev = "14.*" -lld = "14.*" +llvmdev = "22.1.*" +lld = "22.1.*" libffi = ">=3.4" +libxml2-devel = "2.15.*" rust = "1.97.*" cmake = ">=3.22" ninja = ">=1.10" @@ -35,15 +36,15 @@ nightly = { features = ["nightly"], no-default-feature = true } [target.osx-64.dependencies] macosx_deployment_target_osx-64 = "15.5.*" -compiler-rt = "14.*" +compiler-rt = "22.1.*" [target.osx-arm64.dependencies] macosx_deployment_target_osx-arm64 = "15.5.*" -compiler-rt = "14.*" +compiler-rt = "22.1.*" [target.osx.activation.env] DYLD_FALLBACK_LIBRARY_PATH = "$CONDA_PREFIX/lib" -LIBRARY_PATH = "$CONDA_PREFIX/lib/clang/14.0.6/lib/darwin" +LIBRARY_PATH = "$CONDA_PREFIX/lib/clang/22/lib/darwin" [tasks] build = "cargo build --workspace"