mun_codegen 0.4.0

LLVM IR code generation for Mun
---
source: crates/mun_codegen/src/test.rs
assertion_line: 1080
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*)* }
%Foo = type { i32 }
%Bar = type { double, %Foo }

@allocatorHandle = external global i8*
@dispatchTable = external global %DispatchTable
@global_type_lookup_table = external global [4 x i64*]

define %Foo @bar_1(%Bar %0) {
body:
  %.fca.1.0.extract = extractvalue %Bar %0, 1, 0
  %Bar.1.fca.0.insert = insertvalue %Foo undef, i32 %.fca.1.0.extract, 0
  ret %Foo %Bar.1.fca.0.insert
}

define i32 @foo_a(%Foo %0) {
body:
  %.fca.0.extract = extractvalue %Foo %0, 0
  ret i32 %.fca.0.extract
}

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)
  %foo_a = call i32 @foo_a(%Foo %bar_1)
  ret i32 %foo_a
}

define i32 @bar_1_foo_a_wrapper(%Bar** %0) {
body:
  %"->data" = load %Bar*, %Bar** %0, align 8
  %deref = load %Bar, %Bar* %"->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
}

; == GROUP IR (mod) ====================================
; ModuleID = 'group_name'
source_filename = "group_name"

%DispatchTable = type { i8** (i8*, i8*)* }

@dispatchTable = global %DispatchTable zeroinitializer
@global_type_lookup_table = global [4 x i64*] zeroinitializer
@allocatorHandle = unnamed_addr global i8* null