Fix on rethrow + macros.

This commit is contained in:
Christoffer Lerno
2023-06-27 13:19:28 +02:00
parent fee80682b1
commit f651a59294
14 changed files with 566 additions and 498 deletions

View File

@@ -79,7 +79,6 @@ entry:
%14 = load { ptr, i64 }, ptr %result, align 8
ret { ptr, i64 } %14
}
; Function Attrs: nounwind
define void @test.main() #0 {
entry:
@@ -128,6 +127,9 @@ entry:
%retparam53 = alloca i64, align 8
%varargslots54 = alloca [1 x %any], align 16
%result55 = alloca %"int[]", align 8
%allocator58 = alloca ptr, align 8
%mark59 = alloca i64, align 8
%retparam60 = alloca ptr, align 8
call void @llvm.memset.p0.i64(ptr align 8 %map, i8 0, i64 40, i1 false)
%0 = load ptr, ptr @std.core.mem.thread_allocator, align 8
call void @"std.collections.map$int$test.Foo$.HashMap.init"(ptr %map, i32 16, float 7.500000e-01, ptr %0)
@@ -171,7 +173,6 @@ entry:
%not_err = icmp eq i64 %26, 0
%27 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
br i1 %27, label %after_check, label %after_check12
after_check: ; preds = %entry
%28 = getelementptr inbounds %Foo, ptr %retparam10, i32 0, i32 0
%29 = insertvalue %any undef, ptr %28, 0
@@ -182,7 +183,6 @@ after_check: ; preds = %entry
%not_err11 = icmp eq i64 %32, 0
%33 = call i1 @llvm.expect.i1(i1 %not_err11, i1 true)
br i1 %33, label %after_check12, label %after_check12
after_check12: ; preds = %entry, %after_check, %after_check
%34 = call i8 @"std.collections.map$int$test.Foo$.HashMap.has_key"(ptr %map, i32 1)
store i8 %34, ptr %taddr, align 1
@@ -253,22 +253,18 @@ after_check12: ; preds = %entry, %after_check
%80 = load ptr, ptr @std.core.mem.thread_temp_allocator, align 8
%not = icmp eq ptr %80, null
br i1 %not, label %if.then, label %if.exit
if.then: ; preds = %after_check12
%81 = load ptr, ptr @std.core.mem.thread_allocator, align 8
%82 = call i64 @std.core.mem.allocator.new_temp(ptr %retparam49, i64 262144, ptr %81)
%not_err50 = icmp eq i64 %82, 0
%83 = call i1 @llvm.expect.i1(i1 %not_err50, i1 true)
br i1 %83, label %after_check51, label %assign_optional
assign_optional: ; preds = %if.then
store i64 %82, ptr %error_var, align 8
br label %panic_block
after_check51: ; preds = %if.then
%84 = load ptr, ptr %retparam49, align 8
br label %noerr_block
panic_block: ; preds = %assign_optional
%85 = insertvalue %any undef, ptr %error_var, 0
%86 = insertvalue %any %85, i64 ptrtoint (ptr @"$ct.anyfault" to i64), 1
@@ -279,11 +275,9 @@ panic_block: ; preds = %assign_optional
store %"any[]" %89, ptr %indirectarg, align 8
call void @std.core.builtin.panicf(ptr @.panic_msg, i64 36, ptr @.file, i64 6, ptr @.func, i64 4, i32 399, ptr byval(%"any[]") align 8 %indirectarg)
unreachable
noerr_block: ; preds = %after_check51
store ptr %84, ptr @std.core.mem.thread_temp_allocator, align 8
br label %if.exit
if.exit: ; preds = %noerr_block, %after_check12
%90 = load ptr, ptr @std.core.mem.thread_temp_allocator, align 8
store ptr %90, ptr %allocator, align 8
@@ -306,25 +300,28 @@ if.exit: ; preds = %noerr_block, %after
%102 = call i64 @std.io.printfn(ptr %retparam53, ptr @.str.11, i64 2, ptr %varargslots54, i64 1)
%103 = load ptr, ptr %allocator, align 8
%104 = getelementptr inbounds %TempAllocator, ptr %103, i32 0, i32 0
store ptr %104, ptr %allocator58, align 8
%105 = load i64, ptr %mark, align 8
call void @std.core.mem.allocator.Allocator.reset(ptr %104, i64 %105)
store i64 %105, ptr %mark59, align 8
%106 = load ptr, ptr %allocator58, align 8
%107 = getelementptr inbounds %Allocator, ptr %106, i32 0, i32 0
%108 = load ptr, ptr %107, align 8
%109 = load ptr, ptr %allocator58, align 8
%110 = load i64, ptr %mark59, align 8
%111 = call i64 %108(ptr %retparam60, ptr %109, i64 %110, i64 0, i64 0, ptr null, i32 8)
ret void
}
define internal void @.static_initialize.0() {
entry:
br label %dtable_check
dtable_check: ; preds = %dtable_next, %entry
%dtable_ref = phi ptr [ getelementptr inbounds (%.introspect, ptr @"$ct.test.Foo", i32 0, i32 1), %entry ], [ %next_dtable_ref, %dtable_next ]
%dtable_ptr = load ptr, ptr %dtable_ref, align 8
%0 = icmp eq ptr %dtable_ptr, null
br i1 %0, label %dtable_found, label %dtable_next
dtable_next: ; preds = %dtable_check
%next_dtable_ref = getelementptr inbounds { ptr, ptr, ptr }, ptr %dtable_ptr, i32 0, i32 2
br label %dtable_check
dtable_found: ; preds = %dtable_check
store ptr @"$ct.dyn.test.Foo.to_string", ptr %dtable_ref, align 8
ret void