mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
109 lines
2.8 KiB
Plaintext
109 lines
2.8 KiB
Plaintext
// #target: macos-x64
|
|
module test;
|
|
|
|
extern fn void printf(char*,...);
|
|
|
|
fn void test(int x)
|
|
{
|
|
defer
|
|
{
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
printf("%d\n", x + i);
|
|
}
|
|
}
|
|
if (x == 1)
|
|
{
|
|
printf("1x\n");
|
|
return;
|
|
}
|
|
if (x == 0) return;
|
|
}
|
|
|
|
fn void main()
|
|
{
|
|
test(123);
|
|
test(1);
|
|
test(0);
|
|
}
|
|
|
|
/* #expect: test.ll
|
|
|
|
define void @test.test(i32 %0) #0 {
|
|
entry:
|
|
%i = alloca i32, align 4
|
|
%i4 = alloca i32, align 4
|
|
%i12 = alloca i32, align 4
|
|
%eq = icmp eq i32 %0, 1
|
|
br i1 %eq, label %if.then, label %if.exit
|
|
|
|
if.then: ; preds = %entry
|
|
call void (ptr, ...) @printf(ptr @.str)
|
|
store i32 0, ptr %i, align 4
|
|
br label %loop.cond
|
|
|
|
loop.cond: ; preds = %loop.body, %if.then
|
|
%1 = load i32, ptr %i, align 4
|
|
%lt = icmp slt i32 %1, 3
|
|
br i1 %lt, label %loop.body, label %loop.exit
|
|
|
|
loop.body: ; preds = %loop.cond
|
|
%2 = load i32, ptr %i, align 4
|
|
%add = add i32 %0, %2
|
|
call void (ptr, ...) @printf(ptr @.str.1, i32 %add)
|
|
%3 = load i32, ptr %i, align 4
|
|
%add1 = add i32 %3, 1
|
|
store i32 %add1, ptr %i, align 4
|
|
br label %loop.cond
|
|
|
|
loop.exit: ; preds = %loop.cond
|
|
ret void
|
|
|
|
if.exit: ; preds = %entry
|
|
%eq2 = icmp eq i32 %0, 0
|
|
br i1 %eq2, label %if.then3, label %if.exit11
|
|
|
|
if.then3: ; preds = %if.exit
|
|
store i32 0, ptr %i4, align 4
|
|
br label %loop.cond5
|
|
|
|
loop.cond5: ; preds = %loop.body7, %if.then3
|
|
%4 = load i32, ptr %i4, align 4
|
|
%lt6 = icmp slt i32 %4, 3
|
|
br i1 %lt6, label %loop.body7, label %loop.exit10
|
|
|
|
loop.body7: ; preds = %loop.cond5
|
|
%5 = load i32, ptr %i4, align 4
|
|
%add8 = add i32 %0, %5
|
|
call void (ptr, ...) @printf(ptr @.str.2, i32 %add8)
|
|
%6 = load i32, ptr %i4, align 4
|
|
%add9 = add i32 %6, 1
|
|
store i32 %add9, ptr %i4, align 4
|
|
br label %loop.cond5
|
|
|
|
loop.exit10: ; preds = %loop.cond5
|
|
ret void
|
|
|
|
if.exit11: ; preds = %if.exit
|
|
store i32 0, ptr %i12, align 4
|
|
br label %loop.cond13
|
|
|
|
loop.cond13: ; preds = %loop.body15, %if.exit11
|
|
%7 = load i32, ptr %i12, align 4
|
|
%lt14 = icmp slt i32 %7, 3
|
|
br i1 %lt14, label %loop.body15, label %loop.exit18
|
|
|
|
loop.body15: ; preds = %loop.cond13
|
|
%8 = load i32, ptr %i12, align 4
|
|
%add16 = add i32 %0, %8
|
|
call void (ptr, ...) @printf(ptr @.str.3, i32 %add16)
|
|
%9 = load i32, ptr %i12, align 4
|
|
%add17 = add i32 %9, 1
|
|
store i32 %add17, ptr %i12, align 4
|
|
br label %loop.cond13
|
|
|
|
loop.exit18: ; preds = %loop.cond13
|
|
ret void
|
|
}
|
|
|