// #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 }