mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
597 lines
21 KiB
C
597 lines
21 KiB
C
// #target: macos-x64
|
|
module foo;
|
|
import std::io;
|
|
|
|
fault Foo { ABC }
|
|
|
|
fn void blurb() { io::printn("Blurb");}
|
|
|
|
macro int! tester()
|
|
{
|
|
defer blurb();
|
|
return Foo.ABC?;
|
|
}
|
|
fn void! test(int x)
|
|
{
|
|
io::printfn("test(%d)", x);
|
|
if (x || (tester()!)) io::printn("Ok1");
|
|
io::printn("Test next");
|
|
if (tester()! || x) io::printn("Ok?");
|
|
io::printn("Test ok");
|
|
}
|
|
|
|
fn void! test2(int x)
|
|
{
|
|
io::printfn("test2(%d)", x);
|
|
if (x && (tester()!)) io::printn("Ok1");
|
|
io::printn("Test next");
|
|
if ((tester()!) && x) io::printn("Ok?");
|
|
io::printn("Test ok");
|
|
}
|
|
|
|
fn void main()
|
|
{
|
|
anyfault a = test(0);
|
|
anyfault b = test(1);
|
|
anyfault c = test2(0);
|
|
anyfault d = test2(1);
|
|
}
|
|
|
|
/* #expect: foo.ll
|
|
|
|
define i64 @foo.test(i32 %0) #0 {
|
|
entry:
|
|
%retparam = alloca i64, align 8
|
|
%varargslots = alloca [1 x %any], align 16
|
|
%taddr = alloca i32, align 4
|
|
%error_var = alloca i64, align 8
|
|
%blockret = alloca i32, align 4
|
|
%len = alloca i64, align 8
|
|
%error_var2 = alloca i64, align 8
|
|
%retparam4 = alloca i64, align 8
|
|
%error_var6 = alloca i64, align 8
|
|
%error_var12 = alloca i64, align 8
|
|
%len19 = alloca i64, align 8
|
|
%error_var20 = alloca i64, align 8
|
|
%retparam22 = alloca i64, align 8
|
|
%error_var28 = alloca i64, align 8
|
|
%error_var34 = alloca i64, align 8
|
|
%error_var42 = alloca i64, align 8
|
|
%blockret43 = alloca i32, align 4
|
|
%len49 = alloca i64, align 8
|
|
%error_var50 = alloca i64, align 8
|
|
%retparam52 = alloca i64, align 8
|
|
%error_var58 = alloca i64, align 8
|
|
%error_var64 = alloca i64, align 8
|
|
%len74 = alloca i64, align 8
|
|
%error_var75 = alloca i64, align 8
|
|
%retparam77 = alloca i64, align 8
|
|
%error_var83 = alloca i64, align 8
|
|
%error_var89 = alloca i64, align 8
|
|
store i32 %0, ptr %taddr, align 4
|
|
%1 = insertvalue %any undef, ptr %taddr, 0
|
|
%2 = insertvalue %any %1, i64 ptrtoint (ptr @"$ct.int" to i64), 1
|
|
%3 = getelementptr inbounds [1 x %any], ptr %varargslots, i64 0, i64 0
|
|
store %any %2, ptr %3, align 16
|
|
%4 = call i64 @std.io.printfn(ptr %retparam, ptr @.str.1, i64 8, ptr %varargslots, i64 1)
|
|
%intbool = icmp ne i32 %0, 0
|
|
br i1 %intbool, label %or.phi, label %or.rhs
|
|
|
|
or.rhs: ; preds = %entry
|
|
store i64 ptrtoint (ptr @"foo.Foo$ABC" to i64), ptr %error_var, align 8
|
|
br label %opt_block_cleanup
|
|
|
|
opt_block_cleanup: ; preds = %or.rhs
|
|
call void @foo.blurb()
|
|
br label %guard_block
|
|
|
|
guard_block: ; preds = %opt_block_cleanup
|
|
%5 = load i64, ptr %error_var, align 8
|
|
ret i64 %5
|
|
|
|
or.phi: ; preds = %entry
|
|
br label %if.then
|
|
|
|
if.then: ; preds = %or.phi
|
|
%6 = call ptr @std.io.stdout()
|
|
%7 = call i64 @std.io.File.write(ptr %retparam4, ptr %6, ptr @.str.2, i64 3)
|
|
%not_err = icmp eq i64 %7, 0
|
|
%8 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
|
br i1 %8, label %after_check, label %assign_optional
|
|
|
|
assign_optional: ; preds = %if.then
|
|
store i64 %7, ptr %error_var2, align 8
|
|
br label %guard_block5
|
|
|
|
after_check: ; preds = %if.then
|
|
br label %noerr_block
|
|
|
|
guard_block5: ; preds = %assign_optional
|
|
br label %voiderr
|
|
|
|
noerr_block: ; preds = %after_check
|
|
%9 = load i64, ptr %retparam4, align 8
|
|
store i64 %9, ptr %len, align 8
|
|
%10 = call i64 @std.io.File.write_byte(ptr %6, i8 zeroext 10)
|
|
%not_err7 = icmp eq i64 %10, 0
|
|
%11 = call i1 @llvm.expect.i1(i1 %not_err7, i1 true)
|
|
br i1 %11, label %after_check9, label %assign_optional8
|
|
|
|
assign_optional8: ; preds = %noerr_block
|
|
store i64 %10, ptr %error_var6, align 8
|
|
br label %guard_block10
|
|
|
|
after_check9: ; preds = %noerr_block
|
|
br label %noerr_block11
|
|
|
|
guard_block10: ; preds = %assign_optional8
|
|
br label %voiderr
|
|
|
|
noerr_block11: ; preds = %after_check9
|
|
%12 = call i64 @std.io.File.flush(ptr %6)
|
|
%not_err13 = icmp eq i64 %12, 0
|
|
%13 = call i1 @llvm.expect.i1(i1 %not_err13, i1 true)
|
|
br i1 %13, label %after_check15, label %assign_optional14
|
|
|
|
assign_optional14: ; preds = %noerr_block11
|
|
store i64 %12, ptr %error_var12, align 8
|
|
br label %guard_block16
|
|
|
|
after_check15: ; preds = %noerr_block11
|
|
br label %noerr_block17
|
|
|
|
guard_block16: ; preds = %assign_optional14
|
|
br label %voiderr
|
|
|
|
noerr_block17: ; preds = %after_check15
|
|
%14 = load i64, ptr %len, align 8
|
|
%add = add i64 %14, 1
|
|
br label %voiderr
|
|
|
|
voiderr: ; preds = %noerr_block17, %guard_block16, %guard_block10, %guard_block5
|
|
br label %if.exit
|
|
|
|
if.exit: ; preds = %voiderr
|
|
%15 = call ptr @std.io.stdout()
|
|
%16 = call i64 @std.io.File.write(ptr %retparam22, ptr %15, ptr @.str.3, i64 9)
|
|
%not_err23 = icmp eq i64 %16, 0
|
|
%17 = call i1 @llvm.expect.i1(i1 %not_err23, i1 true)
|
|
br i1 %17, label %after_check25, label %assign_optional24
|
|
|
|
assign_optional24: ; preds = %if.exit
|
|
store i64 %16, ptr %error_var20, align 8
|
|
br label %guard_block26
|
|
|
|
after_check25: ; preds = %if.exit
|
|
br label %noerr_block27
|
|
|
|
guard_block26: ; preds = %assign_optional24
|
|
br label %voiderr41
|
|
|
|
noerr_block27: ; preds = %after_check25
|
|
%18 = load i64, ptr %retparam22, align 8
|
|
store i64 %18, ptr %len19, align 8
|
|
%19 = call i64 @std.io.File.write_byte(ptr %15, i8 zeroext 10)
|
|
%not_err29 = icmp eq i64 %19, 0
|
|
%20 = call i1 @llvm.expect.i1(i1 %not_err29, i1 true)
|
|
br i1 %20, label %after_check31, label %assign_optional30
|
|
|
|
assign_optional30: ; preds = %noerr_block27
|
|
store i64 %19, ptr %error_var28, align 8
|
|
br label %guard_block32
|
|
|
|
after_check31: ; preds = %noerr_block27
|
|
br label %noerr_block33
|
|
|
|
guard_block32: ; preds = %assign_optional30
|
|
br label %voiderr41
|
|
|
|
noerr_block33: ; preds = %after_check31
|
|
%21 = call i64 @std.io.File.flush(ptr %15)
|
|
%not_err35 = icmp eq i64 %21, 0
|
|
%22 = call i1 @llvm.expect.i1(i1 %not_err35, i1 true)
|
|
br i1 %22, label %after_check37, label %assign_optional36
|
|
|
|
assign_optional36: ; preds = %noerr_block33
|
|
store i64 %21, ptr %error_var34, align 8
|
|
br label %guard_block38
|
|
|
|
after_check37: ; preds = %noerr_block33
|
|
br label %noerr_block39
|
|
|
|
guard_block38: ; preds = %assign_optional36
|
|
br label %voiderr41
|
|
|
|
noerr_block39: ; preds = %after_check37
|
|
%23 = load i64, ptr %len19, align 8
|
|
%add40 = add i64 %23, 1
|
|
br label %voiderr41
|
|
|
|
voiderr41: ; preds = %noerr_block39, %guard_block38, %guard_block32, %guard_block26
|
|
store i64 ptrtoint (ptr @"foo.Foo$ABC" to i64), ptr %error_var42, align 8
|
|
br label %opt_block_cleanup44
|
|
|
|
opt_block_cleanup44: ; preds = %voiderr41
|
|
call void @foo.blurb()
|
|
br label %guard_block45
|
|
|
|
guard_block45: ; preds = %opt_block_cleanup44
|
|
%24 = load i64, ptr %error_var42, align 8
|
|
ret i64 %24
|
|
|
|
if.then47: ; No predecessors!
|
|
%25 = call ptr @std.io.stdout()
|
|
%26 = call i64 @std.io.File.write(ptr %retparam52, ptr %25, ptr @.str.4, i64 3)
|
|
%not_err53 = icmp eq i64 %26, 0
|
|
%27 = call i1 @llvm.expect.i1(i1 %not_err53, i1 true)
|
|
br i1 %27, label %after_check55, label %assign_optional54
|
|
|
|
assign_optional54: ; preds = %if.then47
|
|
store i64 %26, ptr %error_var50, align 8
|
|
br label %guard_block56
|
|
|
|
after_check55: ; preds = %if.then47
|
|
br label %noerr_block57
|
|
|
|
guard_block56: ; preds = %assign_optional54
|
|
br label %voiderr71
|
|
|
|
noerr_block57: ; preds = %after_check55
|
|
%28 = load i64, ptr %retparam52, align 8
|
|
store i64 %28, ptr %len49, align 8
|
|
%29 = call i64 @std.io.File.write_byte(ptr %25, i8 zeroext 10)
|
|
%not_err59 = icmp eq i64 %29, 0
|
|
%30 = call i1 @llvm.expect.i1(i1 %not_err59, i1 true)
|
|
br i1 %30, label %after_check61, label %assign_optional60
|
|
|
|
assign_optional60: ; preds = %noerr_block57
|
|
store i64 %29, ptr %error_var58, align 8
|
|
br label %guard_block62
|
|
|
|
after_check61: ; preds = %noerr_block57
|
|
br label %noerr_block63
|
|
|
|
guard_block62: ; preds = %assign_optional60
|
|
br label %voiderr71
|
|
|
|
noerr_block63: ; preds = %after_check61
|
|
%31 = call i64 @std.io.File.flush(ptr %25)
|
|
%not_err65 = icmp eq i64 %31, 0
|
|
%32 = call i1 @llvm.expect.i1(i1 %not_err65, i1 true)
|
|
br i1 %32, label %after_check67, label %assign_optional66
|
|
|
|
assign_optional66: ; preds = %noerr_block63
|
|
store i64 %31, ptr %error_var64, align 8
|
|
br label %guard_block68
|
|
|
|
after_check67: ; preds = %noerr_block63
|
|
br label %noerr_block69
|
|
|
|
guard_block68: ; preds = %assign_optional66
|
|
br label %voiderr71
|
|
|
|
noerr_block69: ; preds = %after_check67
|
|
%33 = load i64, ptr %len49, align 8
|
|
%add70 = add i64 %33, 1
|
|
br label %voiderr71
|
|
|
|
voiderr71: ; preds = %noerr_block69, %guard_block68, %guard_block62, %guard_block56
|
|
br label %if.exit72
|
|
|
|
if.exit72: ; preds = %voiderr71
|
|
%34 = call ptr @std.io.stdout()
|
|
%35 = call i64 @std.io.File.write(ptr %retparam77, ptr %34, ptr @.str.5, i64 7)
|
|
%not_err78 = icmp eq i64 %35, 0
|
|
%36 = call i1 @llvm.expect.i1(i1 %not_err78, i1 true)
|
|
br i1 %36, label %after_check80, label %assign_optional79
|
|
|
|
assign_optional79: ; preds = %if.exit72
|
|
store i64 %35, ptr %error_var75, align 8
|
|
br label %guard_block81
|
|
|
|
after_check80: ; preds = %if.exit72
|
|
br label %noerr_block82
|
|
|
|
guard_block81: ; preds = %assign_optional79
|
|
br label %voiderr96
|
|
|
|
noerr_block82: ; preds = %after_check80
|
|
%37 = load i64, ptr %retparam77, align 8
|
|
store i64 %37, ptr %len74, align 8
|
|
%38 = call i64 @std.io.File.write_byte(ptr %34, i8 zeroext 10)
|
|
%not_err84 = icmp eq i64 %38, 0
|
|
%39 = call i1 @llvm.expect.i1(i1 %not_err84, i1 true)
|
|
br i1 %39, label %after_check86, label %assign_optional85
|
|
|
|
assign_optional85: ; preds = %noerr_block82
|
|
store i64 %38, ptr %error_var83, align 8
|
|
br label %guard_block87
|
|
|
|
after_check86: ; preds = %noerr_block82
|
|
br label %noerr_block88
|
|
|
|
guard_block87: ; preds = %assign_optional85
|
|
br label %voiderr96
|
|
|
|
noerr_block88: ; preds = %after_check86
|
|
%40 = call i64 @std.io.File.flush(ptr %34)
|
|
%not_err90 = icmp eq i64 %40, 0
|
|
%41 = call i1 @llvm.expect.i1(i1 %not_err90, i1 true)
|
|
br i1 %41, label %after_check92, label %assign_optional91
|
|
|
|
assign_optional91: ; preds = %noerr_block88
|
|
store i64 %40, ptr %error_var89, align 8
|
|
br label %guard_block93
|
|
|
|
after_check92: ; preds = %noerr_block88
|
|
br label %noerr_block94
|
|
|
|
guard_block93: ; preds = %assign_optional91
|
|
br label %voiderr96
|
|
|
|
noerr_block94: ; preds = %after_check92
|
|
%42 = load i64, ptr %len74, align 8
|
|
%add95 = add i64 %42, 1
|
|
br label %voiderr96
|
|
|
|
voiderr96: ; preds = %noerr_block94, %guard_block93, %guard_block87, %guard_block81
|
|
ret i64 0
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define i64 @foo.test2(i32 %0) #0 {
|
|
entry:
|
|
%retparam = alloca i64, align 8
|
|
%varargslots = alloca [1 x %any], align 16
|
|
%taddr = alloca i32, align 4
|
|
%error_var = alloca i64, align 8
|
|
%blockret = alloca i32, align 4
|
|
%len = alloca i64, align 8
|
|
%error_var2 = alloca i64, align 8
|
|
%retparam4 = alloca i64, align 8
|
|
%error_var6 = alloca i64, align 8
|
|
%error_var12 = alloca i64, align 8
|
|
%error_var18 = alloca i64, align 8
|
|
%blockret19 = alloca i32, align 4
|
|
%len25 = alloca i64, align 8
|
|
%error_var26 = alloca i64, align 8
|
|
%retparam28 = alloca i64, align 8
|
|
%error_var34 = alloca i64, align 8
|
|
%error_var40 = alloca i64, align 8
|
|
store i32 %0, ptr %taddr, align 4
|
|
%1 = insertvalue %any undef, ptr %taddr, 0
|
|
%2 = insertvalue %any %1, i64 ptrtoint (ptr @"$ct.int" to i64), 1
|
|
%3 = getelementptr inbounds [1 x %any], ptr %varargslots, i64 0, i64 0
|
|
store %any %2, ptr %3, align 16
|
|
%4 = call i64 @std.io.printfn(ptr %retparam, ptr @.str.6, i64 9, ptr %varargslots, i64 1)
|
|
%intbool = icmp ne i32 %0, 0
|
|
br i1 %intbool, label %and.rhs, label %and.phi
|
|
|
|
and.rhs: ; preds = %entry
|
|
store i64 ptrtoint (ptr @"foo.Foo$ABC" to i64), ptr %error_var, align 8
|
|
br label %opt_block_cleanup
|
|
|
|
opt_block_cleanup: ; preds = %and.rhs
|
|
call void @foo.blurb()
|
|
br label %guard_block
|
|
|
|
guard_block: ; preds = %opt_block_cleanup
|
|
%5 = load i64, ptr %error_var, align 8
|
|
ret i64 %5
|
|
|
|
and.phi: ; preds = %entry
|
|
br label %if.exit
|
|
|
|
if.exit: ; preds = %and.phi
|
|
%6 = call ptr @std.io.stdout()
|
|
%7 = call i64 @std.io.File.write(ptr %retparam4, ptr %6, ptr @.str.7, i64 9)
|
|
%not_err = icmp eq i64 %7, 0
|
|
%8 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
|
br i1 %8, label %after_check, label %assign_optional
|
|
|
|
assign_optional: ; preds = %if.exit
|
|
store i64 %7, ptr %error_var2, align 8
|
|
br label %guard_block5
|
|
|
|
after_check: ; preds = %if.exit
|
|
br label %noerr_block
|
|
|
|
guard_block5: ; preds = %assign_optional
|
|
br label %voiderr
|
|
|
|
noerr_block: ; preds = %after_check
|
|
%9 = load i64, ptr %retparam4, align 8
|
|
store i64 %9, ptr %len, align 8
|
|
%10 = call i64 @std.io.File.write_byte(ptr %6, i8 zeroext 10)
|
|
%not_err7 = icmp eq i64 %10, 0
|
|
%11 = call i1 @llvm.expect.i1(i1 %not_err7, i1 true)
|
|
br i1 %11, label %after_check9, label %assign_optional8
|
|
|
|
assign_optional8: ; preds = %noerr_block
|
|
store i64 %10, ptr %error_var6, align 8
|
|
br label %guard_block10
|
|
|
|
after_check9: ; preds = %noerr_block
|
|
br label %noerr_block11
|
|
|
|
guard_block10: ; preds = %assign_optional8
|
|
br label %voiderr
|
|
|
|
noerr_block11: ; preds = %after_check9
|
|
%12 = call i64 @std.io.File.flush(ptr %6)
|
|
%not_err13 = icmp eq i64 %12, 0
|
|
%13 = call i1 @llvm.expect.i1(i1 %not_err13, i1 true)
|
|
br i1 %13, label %after_check15, label %assign_optional14
|
|
|
|
assign_optional14: ; preds = %noerr_block11
|
|
store i64 %12, ptr %error_var12, align 8
|
|
br label %guard_block16
|
|
|
|
after_check15: ; preds = %noerr_block11
|
|
br label %noerr_block17
|
|
|
|
guard_block16: ; preds = %assign_optional14
|
|
br label %voiderr
|
|
|
|
noerr_block17: ; preds = %after_check15
|
|
%14 = load i64, ptr %len, align 8
|
|
%add = add i64 %14, 1
|
|
br label %voiderr
|
|
|
|
voiderr: ; preds = %noerr_block17, %guard_block16, %guard_block10, %guard_block5
|
|
store i64 ptrtoint (ptr @"foo.Foo$ABC" to i64), ptr %error_var18, align 8
|
|
br label %opt_block_cleanup20
|
|
|
|
opt_block_cleanup20: ; preds = %voiderr
|
|
call void @foo.blurb()
|
|
br label %guard_block21
|
|
|
|
guard_block21: ; preds = %opt_block_cleanup20
|
|
%15 = load i64, ptr %error_var18, align 8
|
|
ret i64 %15
|
|
|
|
if.exit23: ; No predecessors!
|
|
%16 = call ptr @std.io.stdout()
|
|
%17 = call i64 @std.io.File.write(ptr %retparam28, ptr %16, ptr @.str.8, i64 7)
|
|
%not_err29 = icmp eq i64 %17, 0
|
|
%18 = call i1 @llvm.expect.i1(i1 %not_err29, i1 true)
|
|
br i1 %18, label %after_check31, label %assign_optional30
|
|
|
|
assign_optional30: ; preds = %if.exit23
|
|
store i64 %17, ptr %error_var26, align 8
|
|
br label %guard_block32
|
|
|
|
after_check31: ; preds = %if.exit23
|
|
br label %noerr_block33
|
|
|
|
guard_block32: ; preds = %assign_optional30
|
|
br label %voiderr47
|
|
|
|
noerr_block33: ; preds = %after_check31
|
|
%19 = load i64, ptr %retparam28, align 8
|
|
store i64 %19, ptr %len25, align 8
|
|
%20 = call i64 @std.io.File.write_byte(ptr %16, i8 zeroext 10)
|
|
%not_err35 = icmp eq i64 %20, 0
|
|
%21 = call i1 @llvm.expect.i1(i1 %not_err35, i1 true)
|
|
br i1 %21, label %after_check37, label %assign_optional36
|
|
|
|
assign_optional36: ; preds = %noerr_block33
|
|
store i64 %20, ptr %error_var34, align 8
|
|
br label %guard_block38
|
|
|
|
after_check37: ; preds = %noerr_block33
|
|
br label %noerr_block39
|
|
|
|
guard_block38: ; preds = %assign_optional36
|
|
br label %voiderr47
|
|
|
|
noerr_block39: ; preds = %after_check37
|
|
%22 = call i64 @std.io.File.flush(ptr %16)
|
|
%not_err41 = icmp eq i64 %22, 0
|
|
%23 = call i1 @llvm.expect.i1(i1 %not_err41, i1 true)
|
|
br i1 %23, label %after_check43, label %assign_optional42
|
|
|
|
assign_optional42: ; preds = %noerr_block39
|
|
store i64 %22, ptr %error_var40, align 8
|
|
br label %guard_block44
|
|
|
|
after_check43: ; preds = %noerr_block39
|
|
br label %noerr_block45
|
|
|
|
guard_block44: ; preds = %assign_optional42
|
|
br label %voiderr47
|
|
|
|
noerr_block45: ; preds = %after_check43
|
|
%24 = load i64, ptr %len25, align 8
|
|
%add46 = add i64 %24, 1
|
|
br label %voiderr47
|
|
|
|
voiderr47: ; preds = %noerr_block45, %guard_block44, %guard_block38, %guard_block32
|
|
ret i64 0
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define void @foo.main() #0 {
|
|
entry:
|
|
%a = alloca i64, align 8
|
|
%error_var = alloca i64, align 8
|
|
%b = alloca i64, align 8
|
|
%error_var1 = alloca i64, align 8
|
|
%c = alloca i64, align 8
|
|
%error_var6 = alloca i64, align 8
|
|
%d = alloca i64, align 8
|
|
%error_var11 = alloca i64, align 8
|
|
store i64 0, ptr %error_var, align 8
|
|
%0 = call i64 @foo.test(i32 0)
|
|
%not_err = icmp eq i64 %0, 0
|
|
%1 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
|
br i1 %1, label %after_check, label %assign_optional
|
|
|
|
assign_optional: ; preds = %entry
|
|
store i64 %0, ptr %error_var, align 8
|
|
br label %noerr_block
|
|
|
|
after_check: ; preds = %entry
|
|
br label %noerr_block
|
|
|
|
noerr_block: ; preds = %after_check, %assign_optional
|
|
%2 = load i64, ptr %error_var, align 8
|
|
store i64 %2, ptr %a, align 8
|
|
store i64 0, ptr %error_var1, align 8
|
|
%3 = call i64 @foo.test(i32 1)
|
|
%not_err2 = icmp eq i64 %3, 0
|
|
%4 = call i1 @llvm.expect.i1(i1 %not_err2, i1 true)
|
|
br i1 %4, label %after_check4, label %assign_optional3
|
|
|
|
assign_optional3: ; preds = %noerr_block
|
|
store i64 %3, ptr %error_var1, align 8
|
|
br label %noerr_block5
|
|
|
|
after_check4: ; preds = %noerr_block
|
|
br label %noerr_block5
|
|
|
|
noerr_block5: ; preds = %after_check4, %assign_optional3
|
|
%5 = load i64, ptr %error_var1, align 8
|
|
store i64 %5, ptr %b, align 8
|
|
store i64 0, ptr %error_var6, align 8
|
|
%6 = call i64 @foo.test2(i32 0)
|
|
%not_err7 = icmp eq i64 %6, 0
|
|
%7 = call i1 @llvm.expect.i1(i1 %not_err7, i1 true)
|
|
br i1 %7, label %after_check9, label %assign_optional8
|
|
|
|
assign_optional8: ; preds = %noerr_block5
|
|
store i64 %6, ptr %error_var6, align 8
|
|
br label %noerr_block10
|
|
|
|
after_check9: ; preds = %noerr_block5
|
|
br label %noerr_block10
|
|
|
|
noerr_block10: ; preds = %after_check9, %assign_optional8
|
|
%8 = load i64, ptr %error_var6, align 8
|
|
store i64 %8, ptr %c, align 8
|
|
store i64 0, ptr %error_var11, align 8
|
|
%9 = call i64 @foo.test2(i32 1)
|
|
%not_err12 = icmp eq i64 %9, 0
|
|
%10 = call i1 @llvm.expect.i1(i1 %not_err12, i1 true)
|
|
br i1 %10, label %after_check14, label %assign_optional13
|
|
|
|
assign_optional13: ; preds = %noerr_block10
|
|
store i64 %9, ptr %error_var11, align 8
|
|
br label %noerr_block15
|
|
|
|
after_check14: ; preds = %noerr_block10
|
|
br label %noerr_block15
|
|
|
|
noerr_block15: ; preds = %after_check14, %assign_optional13
|
|
%11 = load i64, ptr %error_var11, align 8
|
|
store i64 %11, ptr %d, align 8
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define i32 @main(i32 %0, ptr %1) #0 {
|
|
entry:
|
|
call void @foo.main()
|
|
ret i32 0
|
|
}
|