mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Optimize optional return.
This commit is contained in:
committed by
Christoffer Lerno
parent
dce171670f
commit
0f7d21330a
@@ -44,26 +44,26 @@ entry:
|
||||
%retparam12 = alloca i32, align 4
|
||||
%retparam16 = alloca i32, align 4
|
||||
%taddr24 = alloca i32, align 4
|
||||
%retparam28 = alloca i64, align 8
|
||||
%varargslots29 = alloca [1 x %variant], align 16
|
||||
%retparam30 = alloca i32, align 4
|
||||
%retparam34 = alloca i32, align 4
|
||||
%taddr42 = alloca i32, align 4
|
||||
%retparam46 = alloca i64, align 8
|
||||
%varargslots47 = alloca [1 x %variant], align 16
|
||||
%taddr48 = alloca i64, align 8
|
||||
%retparam52 = alloca i64, align 8
|
||||
%varargslots53 = alloca [1 x %variant], align 16
|
||||
%taddr54 = alloca i32, align 4
|
||||
%retparam58 = alloca i64, align 8
|
||||
%varargslots59 = alloca [1 x %variant], align 16
|
||||
%taddr60 = alloca i64, align 8
|
||||
%retparam64 = alloca i64, align 8
|
||||
%varargslots65 = alloca [1 x %variant], align 16
|
||||
%retparam27 = alloca i64, align 8
|
||||
%varargslots28 = alloca [1 x %variant], align 16
|
||||
%retparam29 = alloca i32, align 4
|
||||
%retparam33 = alloca i32, align 4
|
||||
%taddr41 = alloca i32, align 4
|
||||
%retparam44 = alloca i64, align 8
|
||||
%varargslots45 = alloca [1 x %variant], align 16
|
||||
%taddr46 = alloca i64, align 8
|
||||
%retparam49 = alloca i64, align 8
|
||||
%varargslots50 = alloca [1 x %variant], align 16
|
||||
%taddr51 = alloca i32, align 4
|
||||
%retparam54 = alloca i64, align 8
|
||||
%varargslots55 = alloca [1 x %variant], align 16
|
||||
%taddr56 = alloca i64, align 8
|
||||
%retparam59 = alloca i64, align 8
|
||||
%varargslots60 = alloca [1 x %variant], align 16
|
||||
%error_var = alloca i64, align 8
|
||||
%x = alloca i64, align 8
|
||||
%retparam71 = alloca i64, align 8
|
||||
%varargslots72 = alloca [1 x %variant], align 16
|
||||
%retparam65 = alloca i64, align 8
|
||||
%varargslots66 = alloca [1 x %variant], align 16
|
||||
%xy = alloca i32, align 4
|
||||
%xy.f = alloca i64, align 8
|
||||
%0 = call i64 @test_get_a(ptr %retparam1, i32 1)
|
||||
@@ -98,22 +98,15 @@ phi_block6: ; preds = %else_block5, %phi_b
|
||||
%6 = getelementptr inbounds [1 x %variant], ptr %varargslots, i64 0, i64 0
|
||||
store %variant %5, ptr %6, align 16
|
||||
%7 = call i64 @std_io_printfn(ptr %retparam, ptr @.str, i64 4, ptr %varargslots, i64 1)
|
||||
%not_err8 = icmp eq i64 %7, 0
|
||||
br i1 %not_err8, label %after_check9, label %voiderr
|
||||
|
||||
after_check9: ; preds = %phi_block6
|
||||
br label %voiderr
|
||||
|
||||
voiderr: ; preds = %after_check9, %phi_block6
|
||||
%8 = call i64 @test_get_a(ptr %retparam12, i32 2)
|
||||
%not_err13 = icmp eq i64 %8, 0
|
||||
br i1 %not_err13, label %after_check14, label %else_block15
|
||||
|
||||
after_check14: ; preds = %voiderr
|
||||
after_check14: ; preds = %phi_block6
|
||||
%9 = load i32, ptr %retparam12, align 4
|
||||
br label %phi_block19
|
||||
|
||||
else_block15: ; preds = %voiderr
|
||||
else_block15: ; preds = %phi_block6
|
||||
%10 = call i64 @test_get_b(ptr %retparam16, i32 4)
|
||||
%not_err17 = icmp eq i64 %10, 0
|
||||
br i1 %not_err17, label %after_check18, label %else_block21
|
||||
@@ -137,123 +130,74 @@ phi_block22: ; preds = %else_block21, %phi_
|
||||
%14 = getelementptr inbounds [1 x %variant], ptr %varargslots11, i64 0, i64 0
|
||||
store %variant %13, ptr %14, align 16
|
||||
%15 = call i64 @std_io_printfn(ptr %retparam10, ptr @.str.2, i64 4, ptr %varargslots11, i64 1)
|
||||
%not_err25 = icmp eq i64 %15, 0
|
||||
br i1 %not_err25, label %after_check26, label %voiderr27
|
||||
%16 = call i64 @test_get_a(ptr %retparam29, i32 1)
|
||||
%not_err30 = icmp eq i64 %16, 0
|
||||
br i1 %not_err30, label %after_check31, label %else_block32
|
||||
|
||||
after_check26: ; preds = %phi_block22
|
||||
br label %voiderr27
|
||||
after_check31: ; preds = %phi_block22
|
||||
%17 = load i32, ptr %retparam29, align 4
|
||||
br label %phi_block36
|
||||
|
||||
voiderr27: ; preds = %after_check26, %phi_block22
|
||||
%16 = call i64 @test_get_a(ptr %retparam30, i32 1)
|
||||
%not_err31 = icmp eq i64 %16, 0
|
||||
br i1 %not_err31, label %after_check32, label %else_block33
|
||||
else_block32: ; preds = %phi_block22
|
||||
%18 = call i64 @test_get_b(ptr %retparam33, i32 5)
|
||||
%not_err34 = icmp eq i64 %18, 0
|
||||
br i1 %not_err34, label %after_check35, label %else_block38
|
||||
|
||||
after_check32: ; preds = %voiderr27
|
||||
%17 = load i32, ptr %retparam30, align 4
|
||||
br label %phi_block37
|
||||
after_check35: ; preds = %else_block32
|
||||
%19 = load i32, ptr %retparam33, align 4
|
||||
br label %phi_block36
|
||||
|
||||
else_block33: ; preds = %voiderr27
|
||||
%18 = call i64 @test_get_b(ptr %retparam34, i32 5)
|
||||
%not_err35 = icmp eq i64 %18, 0
|
||||
br i1 %not_err35, label %after_check36, label %else_block39
|
||||
phi_block36: ; preds = %after_check35, %after_check31
|
||||
%val37 = phi i32 [ %17, %after_check31 ], [ %19, %after_check35 ]
|
||||
br label %phi_block39
|
||||
|
||||
after_check36: ; preds = %else_block33
|
||||
%19 = load i32, ptr %retparam34, align 4
|
||||
br label %phi_block37
|
||||
else_block38: ; preds = %else_block32
|
||||
br label %phi_block39
|
||||
|
||||
phi_block37: ; preds = %after_check36, %after_check32
|
||||
%val38 = phi i32 [ %17, %after_check32 ], [ %19, %after_check36 ]
|
||||
br label %phi_block40
|
||||
|
||||
else_block39: ; preds = %else_block33
|
||||
br label %phi_block40
|
||||
|
||||
phi_block40: ; preds = %else_block39, %phi_block37
|
||||
%val41 = phi i32 [ %val38, %phi_block37 ], [ -1, %else_block39 ]
|
||||
store i32 %val41, ptr %taddr42, align 4
|
||||
%20 = insertvalue %variant undef, ptr %taddr42, 0
|
||||
phi_block39: ; preds = %else_block38, %phi_block36
|
||||
%val40 = phi i32 [ %val37, %phi_block36 ], [ -1, %else_block38 ]
|
||||
store i32 %val40, ptr %taddr41, align 4
|
||||
%20 = insertvalue %variant undef, ptr %taddr41, 0
|
||||
%21 = insertvalue %variant %20, i64 ptrtoint (ptr @"ct$int" to i64), 1
|
||||
%22 = getelementptr inbounds [1 x %variant], ptr %varargslots29, i64 0, i64 0
|
||||
%22 = getelementptr inbounds [1 x %variant], ptr %varargslots28, i64 0, i64 0
|
||||
store %variant %21, ptr %22, align 16
|
||||
%23 = call i64 @std_io_printfn(ptr %retparam28, ptr @.str.3, i64 4, ptr %varargslots29, i64 1)
|
||||
%not_err43 = icmp eq i64 %23, 0
|
||||
br i1 %not_err43, label %after_check44, label %voiderr45
|
||||
|
||||
after_check44: ; preds = %phi_block40
|
||||
br label %voiderr45
|
||||
|
||||
voiderr45: ; preds = %after_check44, %phi_block40
|
||||
store i64 ptrtoint (ptr @"test_Foo$DEF" to i64), ptr %taddr48, align 8
|
||||
%24 = insertvalue %variant undef, ptr %taddr48, 0
|
||||
%23 = call i64 @std_io_printfn(ptr %retparam27, ptr @.str.3, i64 4, ptr %varargslots28, i64 1)
|
||||
store i64 ptrtoint (ptr @"test_Foo$DEF" to i64), ptr %taddr46, align 8
|
||||
%24 = insertvalue %variant undef, ptr %taddr46, 0
|
||||
%25 = insertvalue %variant %24, i64 ptrtoint (ptr @"ct$anyerr" to i64), 1
|
||||
%26 = getelementptr inbounds [1 x %variant], ptr %varargslots47, i64 0, i64 0
|
||||
%26 = getelementptr inbounds [1 x %variant], ptr %varargslots45, i64 0, i64 0
|
||||
store %variant %25, ptr %26, align 16
|
||||
%27 = call i64 @std_io_printfn(ptr %retparam46, ptr @.str.4, i64 4, ptr %varargslots47, i64 1)
|
||||
%not_err49 = icmp eq i64 %27, 0
|
||||
br i1 %not_err49, label %after_check50, label %voiderr51
|
||||
|
||||
after_check50: ; preds = %voiderr45
|
||||
br label %voiderr51
|
||||
|
||||
voiderr51: ; preds = %after_check50, %voiderr45
|
||||
store i32 3, ptr %taddr54, align 4
|
||||
%28 = insertvalue %variant undef, ptr %taddr54, 0
|
||||
%27 = call i64 @std_io_printfn(ptr %retparam44, ptr @.str.4, i64 4, ptr %varargslots45, i64 1)
|
||||
store i32 3, ptr %taddr51, align 4
|
||||
%28 = insertvalue %variant undef, ptr %taddr51, 0
|
||||
%29 = insertvalue %variant %28, i64 ptrtoint (ptr @"ct$int" to i64), 1
|
||||
%30 = getelementptr inbounds [1 x %variant], ptr %varargslots53, i64 0, i64 0
|
||||
%30 = getelementptr inbounds [1 x %variant], ptr %varargslots50, i64 0, i64 0
|
||||
store %variant %29, ptr %30, align 16
|
||||
%31 = call i64 @std_io_printfn(ptr %retparam52, ptr @.str.5, i64 4, ptr %varargslots53, i64 1)
|
||||
%not_err55 = icmp eq i64 %31, 0
|
||||
br i1 %not_err55, label %after_check56, label %voiderr57
|
||||
|
||||
after_check56: ; preds = %voiderr51
|
||||
br label %voiderr57
|
||||
|
||||
voiderr57: ; preds = %after_check56, %voiderr51
|
||||
store i64 ptrtoint (ptr @"test_Foo$DEF" to i64), ptr %taddr60, align 8
|
||||
%32 = insertvalue %variant undef, ptr %taddr60, 0
|
||||
%31 = call i64 @std_io_printfn(ptr %retparam49, ptr @.str.5, i64 4, ptr %varargslots50, i64 1)
|
||||
store i64 ptrtoint (ptr @"test_Foo$DEF" to i64), ptr %taddr56, align 8
|
||||
%32 = insertvalue %variant undef, ptr %taddr56, 0
|
||||
%33 = insertvalue %variant %32, i64 ptrtoint (ptr @"ct$anyerr" to i64), 1
|
||||
%34 = getelementptr inbounds [1 x %variant], ptr %varargslots59, i64 0, i64 0
|
||||
%34 = getelementptr inbounds [1 x %variant], ptr %varargslots55, i64 0, i64 0
|
||||
store %variant %33, ptr %34, align 16
|
||||
%35 = call i64 @std_io_printfn(ptr %retparam58, ptr @.str.6, i64 4, ptr %varargslots59, i64 1)
|
||||
%not_err61 = icmp eq i64 %35, 0
|
||||
br i1 %not_err61, label %after_check62, label %voiderr63
|
||||
|
||||
after_check62: ; preds = %voiderr57
|
||||
br label %voiderr63
|
||||
|
||||
voiderr63: ; preds = %after_check62, %voiderr57
|
||||
%35 = call i64 @std_io_printfn(ptr %retparam54, ptr @.str.6, i64 4, ptr %varargslots55, i64 1)
|
||||
store i64 0, ptr %error_var, align 8
|
||||
br label %phi_block67
|
||||
br label %phi_block62
|
||||
|
||||
phi_block67: ; preds = %voiderr63
|
||||
phi_block62: ; preds = %phi_block39
|
||||
br label %noerr_block
|
||||
|
||||
noerr_block: ; preds = %phi_block67
|
||||
noerr_block: ; preds = %phi_block62
|
||||
%36 = insertvalue %variant undef, ptr %error_var, 0
|
||||
%37 = insertvalue %variant %36, i64 ptrtoint (ptr @"ct$anyerr" to i64), 1
|
||||
%38 = getelementptr inbounds [1 x %variant], ptr %varargslots65, i64 0, i64 0
|
||||
%38 = getelementptr inbounds [1 x %variant], ptr %varargslots60, i64 0, i64 0
|
||||
store %variant %37, ptr %38, align 16
|
||||
%39 = call i64 @std_io_printfn(ptr %retparam64, ptr @.str.7, i64 4, ptr %varargslots65, i64 1)
|
||||
%not_err68 = icmp eq i64 %39, 0
|
||||
br i1 %not_err68, label %after_check69, label %voiderr70
|
||||
|
||||
after_check69: ; preds = %noerr_block
|
||||
br label %voiderr70
|
||||
|
||||
voiderr70: ; preds = %after_check69, %noerr_block
|
||||
%39 = call i64 @std_io_printfn(ptr %retparam59, ptr @.str.7, i64 4, ptr %varargslots60, i64 1)
|
||||
store i64 3, ptr %x, align 8
|
||||
%40 = insertvalue %variant undef, ptr %x, 0
|
||||
%41 = insertvalue %variant %40, i64 ptrtoint (ptr @"ct$long" to i64), 1
|
||||
%42 = getelementptr inbounds [1 x %variant], ptr %varargslots72, i64 0, i64 0
|
||||
%42 = getelementptr inbounds [1 x %variant], ptr %varargslots66, i64 0, i64 0
|
||||
store %variant %41, ptr %42, align 16
|
||||
%43 = call i64 @std_io_printfn(ptr %retparam71, ptr @.str.8, i64 4, ptr %varargslots72, i64 1)
|
||||
%not_err73 = icmp eq i64 %43, 0
|
||||
br i1 %not_err73, label %after_check74, label %voiderr75
|
||||
|
||||
after_check74: ; preds = %voiderr70
|
||||
br label %voiderr75
|
||||
|
||||
voiderr75: ; preds = %after_check74, %voiderr70
|
||||
%43 = call i64 @std_io_printfn(ptr %retparam65, ptr @.str.8, i64 4, ptr %varargslots66, i64 1)
|
||||
store i64 ptrtoint (ptr @"test_Foo$DEF" to i64), ptr %xy.f, align 8
|
||||
ret void
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user